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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-13 09:50:58 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
SQL注入。有攻有防。知道进攻。才懂得防守.8 p3 b! c9 h' ~9 o. n& M
0 S% c- e  F* A( {9 |
有的时候,很容易受到SQL注入攻击的程序,可能会进行输入过滤,用来防止攻击者无限制的利用其中存在的设计缺陷。
6 i  U. m! {3 L
, k$ ~+ _' I: L唱出会删除或者净化一些字符,或者阻止常用的sql关键词。
* _, L+ Z4 `  p: o5 O$ z% x$ _7 `+ C* y+ _" d/ B$ J8 E& a3 A$ L
我们通常有以下几种技巧,去避开这些过滤。
/ l; g) w$ C: ~$ G7 n/ i& ^& q+ w+ Z# @2 y9 \4 }) e
1,避免使用被阻止的字符,即不使用这些字符仍然达到攻击目的。, {! M  m6 Q* D7 W7 m& c2 y
; n0 v2 Y& s1 q( P6 E4 b, \
A,如果注入一个数字数据字段,就不需要使用单引号。
: W6 f7 G. u3 ?5 a9 h/ }  W* X7 f# b% U( u2 ~: ?
B,输入注释符号被阻止使用,我们可以设计注入的数据,既不破坏周围的查询语法。& U; x& P6 y$ Y4 O/ X( B* ~
1 B5 \$ Y. k3 O7 d/ I9 M
比如, ?id=1′ 这里存在注入,过滤了注释符合,我们可以输入 ?id=1′ or ‘a’=’a9 Y: L7 Z& M! `: y+ F1 q

1 ?- c! z. U0 f9 z$ r% Y2 F$ A目的其实很简单,就是把后面的单引号给闭合掉。
1 d  {6 V! o) G% t- o1 ~
4 X: I7 @2 s& Z& S0 E& A8 ~& DC,在一个MSSQL注入中注入批量查询的时候,不必使用分号分隔符。& ~* a* E; V, e. H6 X- R
7 t; v+ a3 Z' p$ F* ?( u. C, a
只要纠正所有批量查询的语法,无论你是否使用分号,查询的解析器依然能正确的去解释它们的。
" d+ h: \1 O! K; f9 q0 @0 f" j4 L( h; E! N) ?, N9 w0 H
2,避免使用简单确认
5 M! O' K3 z# r) `/ R+ C8 W. Y
2 t2 X" R: _5 ?1 n' V一些输入确认机制使用一个简单的黑名单,组织或删除任何出现在这个名单中的数据,比如防注入程序。! O9 \( Y- |! U3 f

* p' y2 x" D6 k; ~# ?这一般要看这个机制是否做的足够的好了,黑名单是否足够能确保安全。如果只是简单的黑名单,那也有机会突破的。
8 y; D8 ?2 J+ u  k7 S# q, @/ R' ?) {  P3 E4 N$ H& p: S9 x
A,如果select关键词被阻止或删除
) F" A3 @# a  Z, T# ?% Q
  |7 m" d( i- n' ~) d5 y) @我们可以输入:+ j  o- t+ B+ U7 I: o

+ K7 t' Z! U* |+ N2 n- \6 zSeLeCt       注意大小写
- j, C2 R: X3 U3 e! E# [& t# B6 K* p0 F$ z3 U# G0 D% j: d- L
selselectect    还记得ewebeditor是怎么过滤asp的么?6 @4 n/ M# U4 @2 z2 u/ |% O. Y: h
  L! M. m! G2 {# _2 M8 ?+ }
%53%45%4c%45%43%54                        URL编码/ c+ t: i' i0 a* h3 i; U! o0 |* s
9 w  \0 Z, j6 ?
%2553%2545%254c%2545%2543%2554    对上面的每个%后加了一个25! @0 A, L- a3 L, k' k

& v4 L6 G" c* Y: O3,使用SQL注释符7 l. ~1 E( x3 k" r( ~0 K

8 {% u1 ~4 q6 A8 W( G' s. {, N( R+ UA,使用注释来冒充注入的数据中的空格。
" `" F! T( L3 F$ I" C
8 U  S0 O+ O, J9 l3 ^select/*yesu*/username,password/*yesu*/from/*yesu*/admin( r$ u5 l6 D9 P- g1 x7 A, V

5 y: L. g6 F, ^& g4 l9 A/*yesu*/来冒充空格. v; V4 U2 l3 G# d: a

" \, ^) t. b5 T/ L0 k$ m8 NB,使用注释来避开某些注入的确认过滤。0 @5 {$ M; y0 ^" k
4 n$ z% p3 p1 _, @5 }2 i" Q
SEL/*yesu*/ECT username,password fr/*yesu*/om admin
6 K# S! R" I* Y; [1 Q, F- a: q  b; N6 G4 b9 t5 |/ G: q
4,处理被阻止的字符串8 [2 d. J4 _: G7 @6 `" N4 v

8 e1 m3 T& x8 P比如,程序阻止了admin,因为怕攻击者注入admin表单中的数据。( t+ ?3 T' y, ~6 V/ _& S9 e
  ]# l7 r" C8 a; p8 |
我们可以这样! H' D6 ]1 W, a1 Q% k
3 S4 }6 x; a, Y/ h6 _! r( S- G
A,oracle数据库: ‘adm’||’in’
$ N0 Y! m: c  c5 n1 r' b( I* @6 x4 Y, I! V$ B* {; U
B,MSSQL数据库: ‘adm’+’in’
& u3 O1 N/ X  u4 h& m6 v7 [! T9 I" W3 }( {
C,MYSQL数据库: concat (‘adm’,’in’)
0 C8 ^* Q% O+ S) O4 Q( v8 v* c- u; S! s8 {8 H
D,oracle中如果单引号被阻止了,还可以用chr函数
7 v3 ]! j) E% T% ~% C" z, ]. M& q
7 f6 m" f6 p) g7 Isleect password from admin where username = char(97) || chr(100) || chr(109) || chr(105) || chr(110)
/ P( @5 u7 ]" d; Y( C
) n2 ^$ F: ^) H6 A; ]- i$ `  _还有其他方法。正在收集中.
: D, z! f. _! v/ h7 d- E! K( S/ B7 c
回复

使用道具 举报

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

本版积分规则

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