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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-13 09:50:58 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
SQL注入。有攻有防。知道进攻。才懂得防守.
. n) L+ a4 z" R. T/ [; Z& ]9 X+ `/ D2 F6 ^# \; s  b8 _
有的时候,很容易受到SQL注入攻击的程序,可能会进行输入过滤,用来防止攻击者无限制的利用其中存在的设计缺陷。
2 m5 c- M8 t9 W) u7 ]3 _) F' q- d
唱出会删除或者净化一些字符,或者阻止常用的sql关键词。+ z( _: b( o- j( s+ \( |- V. N
, F( P# G* M+ q. K2 `: d
我们通常有以下几种技巧,去避开这些过滤。5 F- {$ ?# i$ D# o

/ f5 V4 ?5 Y, l- P. e5 r1,避免使用被阻止的字符,即不使用这些字符仍然达到攻击目的。- p: `2 m, D- z3 Q% Q

  ~3 r( _* g6 o' F% D$ {' nA,如果注入一个数字数据字段,就不需要使用单引号。
3 ]+ f1 a: _8 R4 _+ f
  f( G  Z# P' q% |/ S& o* DB,输入注释符号被阻止使用,我们可以设计注入的数据,既不破坏周围的查询语法。8 L, j; R2 \$ e

# Q" w1 n& s) K比如, ?id=1′ 这里存在注入,过滤了注释符合,我们可以输入 ?id=1′ or ‘a’=’a
( F9 H$ b! L  ^* j" L! }1 H7 Y. w0 A. _6 R- D: q
目的其实很简单,就是把后面的单引号给闭合掉。1 B' H5 P: L/ V$ D& t! y
0 z% ]7 s, `8 e
C,在一个MSSQL注入中注入批量查询的时候,不必使用分号分隔符。
5 k; Z9 p% ]  f6 d" {9 `0 c
: C  O- j6 T6 |% b+ i" w* s只要纠正所有批量查询的语法,无论你是否使用分号,查询的解析器依然能正确的去解释它们的。
' l7 }0 S  T3 V% e7 p2 [, D* s! E1 u2 V) K
2,避免使用简单确认
" K! t+ s; D' f. }, ^/ k& h( ~/ A3 @5 ]1 b
一些输入确认机制使用一个简单的黑名单,组织或删除任何出现在这个名单中的数据,比如防注入程序。
4 r& c) j2 U3 ~  v% |, d
% K, c4 I5 [4 L% q8 W# e2 X这一般要看这个机制是否做的足够的好了,黑名单是否足够能确保安全。如果只是简单的黑名单,那也有机会突破的。- H& p( `8 R# j% X  Q

0 ?; t0 `3 [$ `- y8 wA,如果select关键词被阻止或删除. L& t' |( B" b

) E2 U5 F' ^: w( y0 P我们可以输入:$ g! y3 ~: e' x& T6 v

; U3 o* D8 s: s, ZSeLeCt       注意大小写/ x. Y9 B- r) l/ T  d5 f
9 D4 R& n0 q2 J# \
selselectect    还记得ewebeditor是怎么过滤asp的么?: r: B, N4 q# |' k2 M
3 f3 c5 Z) e& h
%53%45%4c%45%43%54                        URL编码* s* j- \) \( J9 h6 k

  A# v) Q$ `. N  a%2553%2545%254c%2545%2543%2554    对上面的每个%后加了一个25
9 q4 c; e  }- x- E8 A$ d
2 y2 d/ r6 ~, L3,使用SQL注释符
! L! u8 h7 Z1 D! A8 I6 b* j/ q: f6 E/ i+ R
A,使用注释来冒充注入的数据中的空格。/ H1 x, T+ ^+ F; s( K; Y. n6 K
' O& K1 R( t9 F$ D7 E6 P+ L
select/*yesu*/username,password/*yesu*/from/*yesu*/admin
+ b. T3 p, I7 @; i; l% H" y) \$ ]
/*yesu*/来冒充空格0 ~" o! k" S5 z2 Y* ~  Q; P* P4 |
7 e% o+ d0 Q: W# r, @% u
B,使用注释来避开某些注入的确认过滤。. _1 [% \2 D" R* D$ u/ K2 @

( }) g) k7 M, ]# x* cSEL/*yesu*/ECT username,password fr/*yesu*/om admin
" s3 n7 k" y- T+ q2 \9 [
8 p$ ^: g5 r- _8 `4,处理被阻止的字符串
+ N7 C# M/ ]$ l! b* O. S, O+ X5 _, |6 r, m
比如,程序阻止了admin,因为怕攻击者注入admin表单中的数据。
6 Y7 Z1 f& }" v9 A8 F
' p, e5 R8 i2 l$ Z我们可以这样
; o; u3 ^8 |# Q
! m8 \6 E4 M6 H7 V! Q8 TA,oracle数据库: ‘adm’||’in’
3 ?. E. _& g3 B. g* {4 G* l9 b6 e) Q1 E& `6 h( [: @5 ^6 C! H
B,MSSQL数据库: ‘adm’+’in’
, e1 ?/ Q; A" E6 u& U
5 _* _1 ~) |/ {. ]! I" hC,MYSQL数据库: concat (‘adm’,’in’)
3 R- D9 i4 Q# B' J7 c9 Y. S
) P8 m7 X$ M' s5 L3 o) c8 vD,oracle中如果单引号被阻止了,还可以用chr函数$ S/ Z9 B" T9 Y
3 C7 v2 b7 n# g8 u! I' d6 Q
sleect password from admin where username = char(97) || chr(100) || chr(109) || chr(105) || chr(110), p# V6 S; ?' z: T. {

1 D7 u0 f! N, Y  V1 u' R! ]还有其他方法。正在收集中.5 a6 D2 i6 K# ]7 ~
- \! V* i- P* ]6 v! m' G0 r
回复

使用道具 举报

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

本版积分规则

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