找回密码
 立即注册
查看: 2607|回复: 0
打印 上一主题 下一主题

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-13 09:50:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
SQL注入。有攻有防。知道进攻。才懂得防守.
8 X0 E9 E. o3 Z, P& U* o
# l0 M4 a5 Q* r' |3 Q有的时候,很容易受到SQL注入攻击的程序,可能会进行输入过滤,用来防止攻击者无限制的利用其中存在的设计缺陷。6 m& q+ t+ w( P3 ?3 n3 @# |

4 H; U/ Y+ A: F  T0 i唱出会删除或者净化一些字符,或者阻止常用的sql关键词。2 I+ r. y- U! O) X2 ]) U! C" _

8 w. f: Y) `# }5 o我们通常有以下几种技巧,去避开这些过滤。& h0 Y2 W. ~6 o. p% m. P( s
  ]% N1 U  A# D3 I; N, I1 a
1,避免使用被阻止的字符,即不使用这些字符仍然达到攻击目的。
# W5 S) Z& L! Q1 ]' w: y. R4 S* [/ N7 Y) e) r/ B
A,如果注入一个数字数据字段,就不需要使用单引号。
) ^$ s0 \2 }: x2 Y& q7 `% P: S+ }: _2 n0 R- Y( j
B,输入注释符号被阻止使用,我们可以设计注入的数据,既不破坏周围的查询语法。
- j. U2 O, |  |: O. f
/ T0 C( Z8 E/ I# H" z比如, ?id=1′ 这里存在注入,过滤了注释符合,我们可以输入 ?id=1′ or ‘a’=’a
/ Z3 Q' q1 ^# Q8 B" a( j
% o5 z# I: W6 X% y9 b$ M3 F目的其实很简单,就是把后面的单引号给闭合掉。
: ?* j1 J1 }1 r) w/ Y5 [  V
/ x3 [( l' W) P& ~) Z- N% lC,在一个MSSQL注入中注入批量查询的时候,不必使用分号分隔符。
0 |; U% q) z+ d7 Z3 Y
( v4 ^  i0 ~+ e: d只要纠正所有批量查询的语法,无论你是否使用分号,查询的解析器依然能正确的去解释它们的。0 `; N) H8 N! r9 c5 [$ r# v

1 ^+ H8 G0 {, e9 w! m- q7 T' z2,避免使用简单确认7 h3 G2 f6 z% m/ N7 R

0 m  [! s1 n9 B5 c一些输入确认机制使用一个简单的黑名单,组织或删除任何出现在这个名单中的数据,比如防注入程序。
' F+ H/ U" B5 N, l  ~$ F  ~- H. A0 v! w% X0 H9 q3 Y! ]* f
这一般要看这个机制是否做的足够的好了,黑名单是否足够能确保安全。如果只是简单的黑名单,那也有机会突破的。$ ]  ?& r7 ~% G/ ~2 }

( D8 @  h: q5 c6 _8 D9 @) [- jA,如果select关键词被阻止或删除/ z3 s9 n) W: I1 B5 L  _

* O1 ?6 L5 b& f* [4 X8 J$ a4 m我们可以输入:
$ y9 f+ y, s1 ^! ?! T" C4 \8 _5 s7 X2 o, ~
SeLeCt       注意大小写& \, u4 d8 m# W1 r
% N" g/ @  V- m2 D6 p9 V2 A
selselectect    还记得ewebeditor是怎么过滤asp的么?
1 T, x' n) D) [, T
5 M- l0 K1 D/ N%53%45%4c%45%43%54                        URL编码
) O/ Z1 u; h4 v  z: ]% B. C6 ^  g) w% O
%2553%2545%254c%2545%2543%2554    对上面的每个%后加了一个251 C9 Z. t2 J4 C

: }4 g" l( x( m3,使用SQL注释符
* W- o" a) T' K+ \3 ~0 i+ y7 s5 n* L# N! L
A,使用注释来冒充注入的数据中的空格。  b8 r' Z- B! s8 S
& z) B4 {2 i% |) ^: W
select/*yesu*/username,password/*yesu*/from/*yesu*/admin
* g$ H3 ^5 c2 T4 S! V: w. l6 d* `# k: i( L3 Y" @0 i+ t
/*yesu*/来冒充空格
, _9 U" D: _+ Y" I9 P8 C  x
( b( T8 x- O& C$ ~7 p: T; kB,使用注释来避开某些注入的确认过滤。
/ i' }1 X$ v( P4 J! N  O5 ^* j1 v' n# O* P3 T
SEL/*yesu*/ECT username,password fr/*yesu*/om admin2 s0 G! S' N5 W" b* L9 I

, {- p5 C4 J7 m2 _# p- _6 d4,处理被阻止的字符串4 J  g- B. Z. V& c
# p0 X7 D; U5 W& S4 }, e! K2 i
比如,程序阻止了admin,因为怕攻击者注入admin表单中的数据。
9 C4 l( R2 A; t" i: T4 Q2 ^$ W, ]1 J+ t; ~, N
我们可以这样9 W! }  w, C2 C
4 k! p0 j) ]& i/ M
A,oracle数据库: ‘adm’||’in’
; t, d0 w3 u" o4 e' L
( b1 Y2 }7 `6 Z3 j, oB,MSSQL数据库: ‘adm’+’in’
9 A3 }: O0 X( z+ N3 Y" U+ w/ K6 @+ Z( Z- v& C. E
C,MYSQL数据库: concat (‘adm’,’in’)+ A0 b  I3 e" F$ X

' C+ Q/ k: E2 X% o* RD,oracle中如果单引号被阻止了,还可以用chr函数6 r- x7 d5 W2 m0 I. m

6 S- }" @5 p" N' p9 i' osleect password from admin where username = char(97) || chr(100) || chr(109) || chr(105) || chr(110)
. G6 h* G5 _* p1 Z9 l/ n- L0 o, l2 v( @
还有其他方法。正在收集中./ u; a* z3 @1 ?/ y& ]/ O" L' X/ b
1 ]( F8 Q( A) L9 e; x; d( e
回复

使用道具 举报

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

本版积分规则

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