找回密码
 立即注册
欢迎中测联盟老会员回家,1997年注册的域名
查看: 2140|回复: 0
打印 上一主题 下一主题

PHP中SQL注入,绕开过滤,照样注入

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-13 09:50:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
SQL注入。有攻有防。知道进攻。才懂得防守.1 e/ Z2 m; X7 m9 ~3 P. _9 w4 W
7 [( N& K8 {) Y: e. n
有的时候,很容易受到SQL注入攻击的程序,可能会进行输入过滤,用来防止攻击者无限制的利用其中存在的设计缺陷。
+ A/ G& f6 k7 f/ s& e+ P+ Y# m# y* ~+ D1 Q
唱出会删除或者净化一些字符,或者阻止常用的sql关键词。
( I; q8 a, ?- m) F. \$ y1 \+ ~
我们通常有以下几种技巧,去避开这些过滤。0 q! J( U$ T+ ^7 S/ `

* ^6 x# _. n" O, D% Y1 [1,避免使用被阻止的字符,即不使用这些字符仍然达到攻击目的。9 t7 h  h) E+ S" S
- W2 ~% U0 Z4 P0 B1 z
A,如果注入一个数字数据字段,就不需要使用单引号。+ E5 z' s" G+ h5 a
3 J) N, Q2 T' `% {3 o
B,输入注释符号被阻止使用,我们可以设计注入的数据,既不破坏周围的查询语法。- X* G) e4 T6 H# f; C7 B

. s0 t, E; l. m7 ]* w: L# P比如, ?id=1′ 这里存在注入,过滤了注释符合,我们可以输入 ?id=1′ or ‘a’=’a
/ F- P) |( N- I& j; K
6 D9 Y* x( J! K+ ]& ]目的其实很简单,就是把后面的单引号给闭合掉。+ [3 ^8 D3 A3 j1 F

6 L3 n) [$ \& X3 T* H5 C/ Z: ?C,在一个MSSQL注入中注入批量查询的时候,不必使用分号分隔符。
' m0 u, R( m9 c8 M4 U9 d0 Y
+ p. A0 {3 {5 Z只要纠正所有批量查询的语法,无论你是否使用分号,查询的解析器依然能正确的去解释它们的。; n3 m9 g; C$ l
  D2 Q( f1 }  |% E3 W/ a
2,避免使用简单确认
  Z+ N0 A) @( |# j- u5 e2 B& g
3 N1 c* b+ A$ @& r( u一些输入确认机制使用一个简单的黑名单,组织或删除任何出现在这个名单中的数据,比如防注入程序。
( x6 ^; P( R( a2 z
! ^* o6 F% N/ e, Y  G: @这一般要看这个机制是否做的足够的好了,黑名单是否足够能确保安全。如果只是简单的黑名单,那也有机会突破的。& [; i$ j# T/ I8 ]

8 M- L$ V5 r" ZA,如果select关键词被阻止或删除
; s( x' h% [- ]+ F' S( {2 a- Y0 w4 r- J" U- R4 X
我们可以输入:
6 j3 z; x! |: J' G6 E' _1 ?0 L( j1 B* G) Z9 d
SeLeCt       注意大小写
) y% R. A3 y% p# C+ N& v4 {
: N& X8 `8 B2 A3 U8 Aselselectect    还记得ewebeditor是怎么过滤asp的么?2 {) `9 i+ N3 c3 d0 [( d; N
4 Y  g5 N1 d0 `( ]: ~
%53%45%4c%45%43%54                        URL编码
: d/ x$ B; v! o8 j0 N# H. q/ Z1 S" y: P0 F( o1 B5 ]3 y1 h- f1 n
%2553%2545%254c%2545%2543%2554    对上面的每个%后加了一个253 O3 b4 b& }* {3 D0 Z6 [
) Q4 U4 j+ T  K" |
3,使用SQL注释符& |5 T0 d* Y* S# _& @
- n; K. G3 L7 D( ]
A,使用注释来冒充注入的数据中的空格。
% M8 `) u4 ]1 s: ^6 F; \8 }. @
7 }) o! @9 d! d) W8 d( [select/*yesu*/username,password/*yesu*/from/*yesu*/admin4 \- D- M* |& L' g
- O$ [& D/ g* C, _
/*yesu*/来冒充空格- I9 L8 V9 o. J5 b

7 J7 E6 A! ^9 n9 C% qB,使用注释来避开某些注入的确认过滤。
1 i4 s, [7 R$ w; q* H* d/ f/ A2 f; a! \' Y& ~
SEL/*yesu*/ECT username,password fr/*yesu*/om admin
6 P* ?7 ]* n& d* e4 _6 E- V# D% a- C8 D& \
4,处理被阻止的字符串
9 {4 p1 }$ ^* H4 W4 L; x$ j1 x! h# E4 H
比如,程序阻止了admin,因为怕攻击者注入admin表单中的数据。
0 U4 S8 Q& j. L+ q. U9 J# e9 r/ ~) f
我们可以这样
( ^6 o* I5 f( r  N  Z7 L7 N2 w% v: z4 M
A,oracle数据库: ‘adm’||’in’1 R: d7 o- L# ^: X: i3 w
, g( V1 p8 I( y- X
B,MSSQL数据库: ‘adm’+’in’
+ a! e* P5 }' G' G0 c
! J  ~* T, I. A/ n1 Z7 K% b; rC,MYSQL数据库: concat (‘adm’,’in’)
0 S) z! M6 c3 J; F9 X% B! g) N& w# W  K) B4 }
D,oracle中如果单引号被阻止了,还可以用chr函数. i7 c6 r- P% L( W
' z( ]6 g. j  p7 F$ |/ }
sleect password from admin where username = char(97) || chr(100) || chr(109) || chr(105) || chr(110)
$ G/ ^% a0 D1 ?
9 @1 `3 L' ~1 F3 m# L5 {, R还有其他方法。正在收集中.
$ ?0 q& r( P" n, J8 B' V3 O5 }. m$ X' H. a, q8 o  a5 j
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表