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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-13 09:50:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
SQL注入。有攻有防。知道进攻。才懂得防守.4 v7 i# D6 M. g6 ]: z6 r( k0 W

' E5 q& J( I$ s" l  m4 _0 N有的时候,很容易受到SQL注入攻击的程序,可能会进行输入过滤,用来防止攻击者无限制的利用其中存在的设计缺陷。0 c! {9 w& z& V" o: o

# {) h2 g1 F* R# C  P8 Q; u唱出会删除或者净化一些字符,或者阻止常用的sql关键词。
0 [6 u' a0 Y7 g) u5 t
9 ]' Y* t+ J" C$ |4 `: L我们通常有以下几种技巧,去避开这些过滤。5 F" R8 N  m! i3 r" T/ {  U3 i, B

6 `5 Y" ^& T- A1,避免使用被阻止的字符,即不使用这些字符仍然达到攻击目的。* M/ O! P7 w0 ^2 m
& K( X& T7 K' A9 @: E0 ^
A,如果注入一个数字数据字段,就不需要使用单引号。
  W) X& @: v8 i
8 j4 Q/ _" x3 |& dB,输入注释符号被阻止使用,我们可以设计注入的数据,既不破坏周围的查询语法。5 ?" p* B# {! j

5 K2 G3 E9 L5 T6 I比如, ?id=1′ 这里存在注入,过滤了注释符合,我们可以输入 ?id=1′ or ‘a’=’a
9 X' J& K' B$ v2 Y3 U: j' I- p9 Z% {: d* g: a3 Q1 }  j
目的其实很简单,就是把后面的单引号给闭合掉。/ O: i+ U% y2 y3 l8 [) T4 L2 r
  y7 z( f/ r7 M8 J/ D0 ?
C,在一个MSSQL注入中注入批量查询的时候,不必使用分号分隔符。8 _/ q- ?  b2 K' p$ f" H" a

& `) ]" u  Q1 r只要纠正所有批量查询的语法,无论你是否使用分号,查询的解析器依然能正确的去解释它们的。
; E) b. U  J6 P/ C+ D' i4 e; q/ J0 B+ A; `
2,避免使用简单确认
: P# A- t3 I! J4 P4 s
! O* e; `5 C6 \+ n6 m一些输入确认机制使用一个简单的黑名单,组织或删除任何出现在这个名单中的数据,比如防注入程序。
$ w# @# Z/ {, e0 T/ w' E0 \- O3 [, e0 }9 W! ]) a1 l  A
这一般要看这个机制是否做的足够的好了,黑名单是否足够能确保安全。如果只是简单的黑名单,那也有机会突破的。/ r+ x3 T6 C7 u5 j/ P# I2 d
" F9 D9 z3 [7 ^2 ~* i; }
A,如果select关键词被阻止或删除
, O3 H4 c% H+ E" Y8 r. Z2 T2 y" ]- n
+ m( [4 _. A; q9 x6 A4 |4 X/ w我们可以输入:/ p. _4 ~* }- F3 {* k' H" r

$ Q+ `5 w9 Q; ]0 Y* YSeLeCt       注意大小写
) O8 A7 C7 o9 e/ X" H& u
) V: u/ A, b6 v2 r/ w; Eselselectect    还记得ewebeditor是怎么过滤asp的么?
- \# G3 z, i2 `! y
0 W9 V0 o8 @, B: Z; e" h. B%53%45%4c%45%43%54                        URL编码
+ |9 K5 Y$ W6 Z: n$ L' t% D( v7 A
0 h& B- F; |0 C) _# X. o( [%2553%2545%254c%2545%2543%2554    对上面的每个%后加了一个25" O4 @* w* H+ i+ O

" q1 y' _, r! l2 c" _: B3,使用SQL注释符( ~9 I4 d5 W9 }  k+ d. {2 S7 H, ^# k

1 n8 W% z9 r8 A( c' L: aA,使用注释来冒充注入的数据中的空格。
; u3 ]+ y' n, k9 r
, c$ i6 z- S" b6 I9 uselect/*yesu*/username,password/*yesu*/from/*yesu*/admin
/ v8 q( v; X- k1 L' w+ d8 |  o# J
/*yesu*/来冒充空格/ ], H2 u9 Q6 j$ B

& l8 i# p2 G" ^+ d# F1 qB,使用注释来避开某些注入的确认过滤。$ m. B: k6 A0 T. w9 r8 j
" S3 h- x4 ~2 @6 r$ d
SEL/*yesu*/ECT username,password fr/*yesu*/om admin
+ ~( M; U. O" X3 O% K& {8 M+ `& g! u
4,处理被阻止的字符串- j+ U5 K2 T# s
* N, J5 E, {7 O& U* F+ |
比如,程序阻止了admin,因为怕攻击者注入admin表单中的数据。
: t0 r/ H& y4 M! ^/ T
/ y9 G+ c& J) R5 o8 |2 i我们可以这样
" U! G6 H6 N2 y" Y; D, J( l
: q# t( n6 I1 l, o; g4 F$ gA,oracle数据库: ‘adm’||’in’
# M% L; _1 Z) {
( A) ^$ y3 ]1 E' dB,MSSQL数据库: ‘adm’+’in’& H8 e9 ]) j7 H( W" _

4 k: o0 E3 j% S! nC,MYSQL数据库: concat (‘adm’,’in’)
  ]6 L6 _: Q7 Z( w6 j. j! j1 u# _
2 O3 e7 v) F! J9 TD,oracle中如果单引号被阻止了,还可以用chr函数
2 l+ C% Q4 L! y3 ^* l# N7 B8 G! z" ^' T* z5 g1 R' }* x# z' A4 r& C
sleect password from admin where username = char(97) || chr(100) || chr(109) || chr(105) || chr(110)
4 u0 ^) C& I2 B6 b9 c+ ?% ?( R8 p8 w4 z6 |; a  g/ S% `
还有其他方法。正在收集中.
1 _! f: v' @. E* g
5 V6 o; ~' \3 N9 H  v7 B
回复

使用道具 举报

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

本版积分规则

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