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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-13 09:50:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
SQL注入。有攻有防。知道进攻。才懂得防守.. K5 w$ E2 k3 t; {, p. G" i
- U* F* q/ p5 E% v' L) a
有的时候,很容易受到SQL注入攻击的程序,可能会进行输入过滤,用来防止攻击者无限制的利用其中存在的设计缺陷。1 B  r: `' k# {' ~- `7 E, t! F
$ i& V9 l! C9 N7 B
唱出会删除或者净化一些字符,或者阻止常用的sql关键词。
. S' ]* }' o: _( o. G* e  r$ \/ G  P  b& `
我们通常有以下几种技巧,去避开这些过滤。
- H1 ?) z7 u' O0 |1 m+ t9 G6 \, j8 E# W& Y
1,避免使用被阻止的字符,即不使用这些字符仍然达到攻击目的。
9 M! Y- M: K8 D% a( r, _
, `  s6 g( L# C2 \5 `0 N0 `A,如果注入一个数字数据字段,就不需要使用单引号。
4 g* E2 F( s; `: V
% _2 |& G1 [1 N4 ~$ x6 rB,输入注释符号被阻止使用,我们可以设计注入的数据,既不破坏周围的查询语法。
' I. j! X1 z( X: v9 i4 s5 ]
( d* i1 Y5 z& q2 G4 t. x比如, ?id=1′ 这里存在注入,过滤了注释符合,我们可以输入 ?id=1′ or ‘a’=’a! J* G, [( J( ]4 ]1 H( ]

5 g1 g6 J& _5 J目的其实很简单,就是把后面的单引号给闭合掉。/ K! g0 E' l( K: m: c
, l+ q) D- j1 f. A% T
C,在一个MSSQL注入中注入批量查询的时候,不必使用分号分隔符。
9 z% j2 ?' U( S
' T% _' k+ p! ^  D2 J只要纠正所有批量查询的语法,无论你是否使用分号,查询的解析器依然能正确的去解释它们的。
; V2 {  g5 ~6 r. y7 K% {+ H4 H" M" n; T! j6 L- H2 f0 Q' l
2,避免使用简单确认
7 p" n6 H1 o0 z5 W" _9 N
1 c; b+ ]& x2 d- q6 I一些输入确认机制使用一个简单的黑名单,组织或删除任何出现在这个名单中的数据,比如防注入程序。9 ?" `) ]+ j: B# j3 h) ?1 x+ p; ]

! X- v! W' A! t0 G这一般要看这个机制是否做的足够的好了,黑名单是否足够能确保安全。如果只是简单的黑名单,那也有机会突破的。2 ^8 ~  z3 o- n( S2 h

( n! I  t' K3 O% D4 o8 eA,如果select关键词被阻止或删除6 ]' K4 k( A) c6 i, i

1 A: a4 b1 t" I( z& H. z  ]5 y我们可以输入:
" x* ?" w1 X; L( t& Q$ ~0 N( {% |) ^1 q$ X: g( F0 }( y1 k
SeLeCt       注意大小写
2 K) x9 ~- v1 n$ V5 d5 \* c. O) d
" b/ U. ^6 ?. ^& c) s% fselselectect    还记得ewebeditor是怎么过滤asp的么?
7 Y8 K: F+ ^; S% i
5 i$ e# ^& o" T. n9 Z  s! E4 M%53%45%4c%45%43%54                        URL编码, A" M% p6 a! ]
% n) V8 w4 V8 g$ }) N
%2553%2545%254c%2545%2543%2554    对上面的每个%后加了一个25: a9 H4 `! X7 o! o1 s
; x8 d- Z9 T0 M. m2 G8 F" @% c
3,使用SQL注释符
0 j* e( Y, A8 B, h9 W" B( d6 V1 s' v$ i
: b0 D7 Y  H# b( w* \( mA,使用注释来冒充注入的数据中的空格。
. G) n& J- ?1 l
& _- W$ W. h$ ^: v+ `' \select/*yesu*/username,password/*yesu*/from/*yesu*/admin+ K) n4 {1 Z4 m1 {5 o  S0 ?
3 w8 l. g, P/ \! w& m
/*yesu*/来冒充空格1 Y& E  h1 Q- x% J! X7 }% F6 u& p

1 m) q. Y( X. a: Z2 I. j9 ?7 ^B,使用注释来避开某些注入的确认过滤。! q8 S  I' I$ E

3 [, S2 A) U, K6 x$ ^( a3 KSEL/*yesu*/ECT username,password fr/*yesu*/om admin" u# m$ j" E  p) U- T1 I+ o
! h) S/ b, z+ t3 H) _
4,处理被阻止的字符串
/ {; a. h/ U6 v% G% l/ ~  V6 @
9 g4 }2 k( I( m# q( i! m比如,程序阻止了admin,因为怕攻击者注入admin表单中的数据。
/ `% P- a& {7 s& n
* ?* w. h+ Z+ M& h4 j- ]- i/ s我们可以这样
# g2 p. q% F$ q; p( e/ m, r7 c  m$ ~! Q6 Y, ~
A,oracle数据库: ‘adm’||’in’
; ?4 B1 f) G2 g% z1 z2 {7 @" v( P% @- g$ R$ S5 q* P& m+ t
B,MSSQL数据库: ‘adm’+’in’
  [) c8 N, r$ Y8 z. O% P% P: H% Q, R. c' y6 i
C,MYSQL数据库: concat (‘adm’,’in’)
' Y+ N4 B% l6 j; G/ _# B5 x$ j* Y
4 E. W: Q  {0 z* A5 QD,oracle中如果单引号被阻止了,还可以用chr函数
4 ]5 f* O+ f9 K- Z* n; v2 E$ J7 P+ l) f! b( M  A: }0 C) H
sleect password from admin where username = char(97) || chr(100) || chr(109) || chr(105) || chr(110)
$ w3 T: r& E6 D1 z
/ g  g/ Q& \  q还有其他方法。正在收集中.
, ^# W* |8 J3 j5 D: ?
& X+ c3 r# P, M, r9 t
回复

使用道具 举报

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

本版积分规则

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