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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-13 09:50:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
SQL注入。有攻有防。知道进攻。才懂得防守.% t$ f6 f6 R# Y+ Z2 R
8 p$ N5 r6 W' y4 R4 d3 m* m
有的时候,很容易受到SQL注入攻击的程序,可能会进行输入过滤,用来防止攻击者无限制的利用其中存在的设计缺陷。
% S2 u1 W6 P2 f, n" _2 g! q
& |5 Z) @7 N8 ~( _, j" e唱出会删除或者净化一些字符,或者阻止常用的sql关键词。
: i: N7 @. o3 I5 r( Q" G
. w! G% c: [; F7 f. q( v. N: }; X' q我们通常有以下几种技巧,去避开这些过滤。; P( X. [$ n7 z3 A( F0 ^

8 a! k( v+ l$ U" a/ B; @1,避免使用被阻止的字符,即不使用这些字符仍然达到攻击目的。* @# Y$ ~1 a7 r  n
4 Z* t2 H: \  R* x; y2 t
A,如果注入一个数字数据字段,就不需要使用单引号。; ^# ?" ?/ d/ j- V* z

/ N" Q, Q- M& kB,输入注释符号被阻止使用,我们可以设计注入的数据,既不破坏周围的查询语法。
1 f0 y- [* s3 x8 T) h  x1 C* V( Y# P8 Y3 x' L; a* q4 B
比如, ?id=1′ 这里存在注入,过滤了注释符合,我们可以输入 ?id=1′ or ‘a’=’a
# l$ D: \0 e) f2 q# U# G! x
: H! T; J' W3 z" g% C1 I目的其实很简单,就是把后面的单引号给闭合掉。
' Y2 \+ _, w' R% \4 n4 r7 Z
7 M- ], r. }& D* SC,在一个MSSQL注入中注入批量查询的时候,不必使用分号分隔符。
& e& h( [8 K& c! q) e0 {/ x, S2 q8 c+ |. I! o
只要纠正所有批量查询的语法,无论你是否使用分号,查询的解析器依然能正确的去解释它们的。
7 e, x) g, Y2 i0 a6 ~+ u
7 F6 B9 W2 U! w9 r8 n8 {2,避免使用简单确认
" M# y6 s6 P. @! ^7 o  i# b9 V! ^5 N' K  M' h6 j* v
一些输入确认机制使用一个简单的黑名单,组织或删除任何出现在这个名单中的数据,比如防注入程序。
+ n3 q. ], G: `% D# ?% ^" }
; `. q/ o! J0 C$ ]& A/ n; w这一般要看这个机制是否做的足够的好了,黑名单是否足够能确保安全。如果只是简单的黑名单,那也有机会突破的。3 q# q$ U& L! l2 ]& V
3 E3 i; s* b  k2 n5 }
A,如果select关键词被阻止或删除; _& w1 x7 ^" T( F. @7 P9 `) f0 S
, a# v. N' V6 Z2 m$ w+ P
我们可以输入:5 n  Y4 z' H) z! `- n/ S
8 w  g3 M! K9 G1 A% c# P
SeLeCt       注意大小写
( W6 m- K  \+ F2 x- L3 F' G2 C! Y  i* H* C' i9 i
selselectect    还记得ewebeditor是怎么过滤asp的么?( Y6 X" i% t1 C' @4 ~+ n; E7 X1 z6 s

5 v1 z- q  z; c9 l%53%45%4c%45%43%54                        URL编码
: P' ~+ b+ b6 {+ H
2 Q" V4 B& ~) M9 H$ o, t%2553%2545%254c%2545%2543%2554    对上面的每个%后加了一个258 M( G  B; e* s

- n3 |5 [  O- H  `/ E2 M1 i) X1 u3,使用SQL注释符
4 P7 v$ U- R; }! I& N" h1 x& G+ j, e6 E1 `- e; I! R
A,使用注释来冒充注入的数据中的空格。" `0 ~  j7 |& z2 s* G2 _4 q2 |
0 b, b* u  J% a5 ?) Q0 d# j
select/*yesu*/username,password/*yesu*/from/*yesu*/admin) S4 R0 m( U2 G( n5 n- N

2 a4 z$ a: M5 ]1 X5 q/*yesu*/来冒充空格
$ T, s0 y9 @1 y/ V4 R. Q: w  N1 F) B. {: ?
B,使用注释来避开某些注入的确认过滤。
- h& \( h$ }" K  ^( p& I+ @. A- V/ ^, v+ x, C3 y0 k
SEL/*yesu*/ECT username,password fr/*yesu*/om admin3 V0 v$ \  V$ ^, W
* R% M0 t1 X! q: P( U
4,处理被阻止的字符串
& f3 t$ ~1 p! o8 ]7 m8 Y$ q8 p( a
比如,程序阻止了admin,因为怕攻击者注入admin表单中的数据。3 r3 W% w, ?' m

. M( C! m! U" W# O我们可以这样
% g" ?1 @/ o. k* f9 N" T! `8 v7 a% ~9 D* @
A,oracle数据库: ‘adm’||’in’
7 D' N) s( O% g
2 p# W& d. t; _& PB,MSSQL数据库: ‘adm’+’in’
4 @; ]; L  ?8 @) K. p" E6 }+ h+ A- _- G. I+ W
C,MYSQL数据库: concat (‘adm’,’in’)
9 L5 ~  N" \; T) v. c+ _
( G  p9 f9 Z8 \. eD,oracle中如果单引号被阻止了,还可以用chr函数
- ~& o) H+ J+ q" }: G. U+ G( m* \0 H
sleect password from admin where username = char(97) || chr(100) || chr(109) || chr(105) || chr(110)( S; C4 d! |7 g. ?9 v0 R

0 ]- z" E8 Z1 X还有其他方法。正在收集中.
% a& h6 E0 H1 X) S: y! x; I
% [2 ]- P. Y$ B) q
回复

使用道具 举报

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

本版积分规则

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