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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-13 09:50:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
SQL注入。有攻有防。知道进攻。才懂得防守.8 D) J+ W: I! M5 C7 A6 f
/ H, v* X& X4 p7 B- S/ F/ b. _
有的时候,很容易受到SQL注入攻击的程序,可能会进行输入过滤,用来防止攻击者无限制的利用其中存在的设计缺陷。
" M. h+ A, _8 O4 h8 [1 h9 x. K+ y3 `+ _) G
唱出会删除或者净化一些字符,或者阻止常用的sql关键词。* q9 A# \; k; T* R3 ]5 P2 y% r
  e" k6 o& F3 l% F2 H# D4 j, T5 E/ x
我们通常有以下几种技巧,去避开这些过滤。- V8 m( k; d! M- M0 w, M& ~

4 m8 Z# J* y$ m2 ?0 t1,避免使用被阻止的字符,即不使用这些字符仍然达到攻击目的。) m# N. |6 e5 C
$ r, p7 r1 D6 A+ n# [8 X8 P5 C
A,如果注入一个数字数据字段,就不需要使用单引号。
$ g9 {9 H' {2 \1 R: ~4 p; C/ c2 d4 n8 s
4 W7 y: m8 _0 ]" j3 [: AB,输入注释符号被阻止使用,我们可以设计注入的数据,既不破坏周围的查询语法。# ?- e" S9 u0 J8 {( j" E' b

3 E& z6 O# m# ^: Y8 A2 l比如, ?id=1′ 这里存在注入,过滤了注释符合,我们可以输入 ?id=1′ or ‘a’=’a
/ M, Q7 r0 d4 _' L7 r9 X2 T! ]( V% i9 A8 l( F
目的其实很简单,就是把后面的单引号给闭合掉。
& N2 f4 D8 u$ j" d2 F! `0 m, F- e+ w) G0 z) I
C,在一个MSSQL注入中注入批量查询的时候,不必使用分号分隔符。( J. k; ^) e4 M8 S" d% p4 l

: {( o* ]! u9 Z只要纠正所有批量查询的语法,无论你是否使用分号,查询的解析器依然能正确的去解释它们的。) G- o, V; d9 u/ j
# m" @4 h/ w2 U& v) n* d
2,避免使用简单确认9 P) }0 e1 k8 H) i4 U
1 x4 O3 g' J8 e0 ~
一些输入确认机制使用一个简单的黑名单,组织或删除任何出现在这个名单中的数据,比如防注入程序。
* w) f4 i; w& ]1 b2 n- X* \
" ]" K+ ?6 |) _: M* q. ]这一般要看这个机制是否做的足够的好了,黑名单是否足够能确保安全。如果只是简单的黑名单,那也有机会突破的。
% S4 }0 T6 b. l0 A) q, s4 U: ?' I5 g( R, H2 y. Y/ Y* `
A,如果select关键词被阻止或删除0 K; p- J, J+ Y" H- a; F
- j4 U* {+ C/ y
我们可以输入:
! h7 e* N& S6 U; w$ o! I9 r% M
" b2 n3 U% V7 T# M. n0 s) _8 {& Q* ESeLeCt       注意大小写
; ^) s- M9 }3 |2 ^6 @( {
7 Q0 U( H3 @8 j4 u4 p( Iselselectect    还记得ewebeditor是怎么过滤asp的么?: ]0 u1 I) a; ~% g9 b

& \+ M# g( e/ M2 A  R%53%45%4c%45%43%54                        URL编码
4 I+ ~' u" Y5 k4 j, Y3 n0 K
" H3 j+ |5 }5 S  s8 w- E6 Z%2553%2545%254c%2545%2543%2554    对上面的每个%后加了一个25
$ O: @  m" q, ^) ?) i  r- b  O3 \# V6 U! }
3,使用SQL注释符
; O0 ?; F8 q6 g. T& r
7 O! u3 C9 W0 l8 t) p2 d" AA,使用注释来冒充注入的数据中的空格。
% b2 z2 O& x, L4 h3 c( Y% I/ a% a" O& P9 v
select/*yesu*/username,password/*yesu*/from/*yesu*/admin
8 o7 }% G* p: u! o
+ y7 S* \, ]' ]$ j% r/*yesu*/来冒充空格
/ q% v. u# b" K" }2 W! ?( _  [  v9 x# V' n" R1 v3 e; n+ C/ I
B,使用注释来避开某些注入的确认过滤。7 v+ M. ?+ @- ^8 x9 E# a5 y2 U9 V
3 Q9 |* F- V$ |0 O
SEL/*yesu*/ECT username,password fr/*yesu*/om admin
3 y4 u: N) b/ D9 O# [4 ^
- k) f4 [- w' p5 [6 C! f4,处理被阻止的字符串
! P7 j2 R; K0 ~9 z: j, C
- |5 z. X, c/ C比如,程序阻止了admin,因为怕攻击者注入admin表单中的数据。
$ d, _' I0 n7 P# V9 I8 p- F+ C: K# g0 P; {& }5 f, [  f: x% s
我们可以这样
. v+ d  `  v: l9 o9 k# u% @7 ^+ w: D. N
A,oracle数据库: ‘adm’||’in’
8 ^* _: ^2 M2 A( w
+ T+ W/ I! N- `3 U6 jB,MSSQL数据库: ‘adm’+’in’
* [% m& ^# z& ^! ~" Y9 \6 p  W# u& @( F0 Z0 {
C,MYSQL数据库: concat (‘adm’,’in’)
; q+ e5 I% H! L4 h) {1 z% T4 L( ?' }& Z& x/ ^
D,oracle中如果单引号被阻止了,还可以用chr函数
: o, w6 f+ o' i5 M( ?
0 \; g9 `3 |/ Y( T( osleect password from admin where username = char(97) || chr(100) || chr(109) || chr(105) || chr(110)/ V1 V# \: y& k

. r6 H, e* u1 D/ g4 P3 k还有其他方法。正在收集中.5 u! h% i# m* m3 y( M, P' C0 X

9 {. M4 W6 D" P2 D
回复

使用道具 举报

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

本版积分规则

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