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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-13 09:50:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
SQL注入。有攻有防。知道进攻。才懂得防守.. M& B3 _5 b3 ^+ v% ?
) u! r: z" B* r' F
有的时候,很容易受到SQL注入攻击的程序,可能会进行输入过滤,用来防止攻击者无限制的利用其中存在的设计缺陷。
+ m3 |5 c, b, R0 L4 t- w$ ?5 q+ o. `- e, Y. [9 x4 ^
唱出会删除或者净化一些字符,或者阻止常用的sql关键词。
1 _2 U, k: d9 \- X# _! F* @2 {1 C- S0 W, `
我们通常有以下几种技巧,去避开这些过滤。4 o+ ?; Y. Q# {4 n& `

7 _# r. l$ j% k# ^3 {8 L1,避免使用被阻止的字符,即不使用这些字符仍然达到攻击目的。
! C) {7 s) u! C/ \3 F7 @4 }7 F1 c/ M. ?, Q2 X- l* ~
A,如果注入一个数字数据字段,就不需要使用单引号。( v8 X$ V+ k. f- ^* u
6 X/ u1 s1 C) e: Y& x' H% y" x
B,输入注释符号被阻止使用,我们可以设计注入的数据,既不破坏周围的查询语法。
" u( R% d! t% a9 f
4 q  b$ }& s; c! w  f比如, ?id=1′ 这里存在注入,过滤了注释符合,我们可以输入 ?id=1′ or ‘a’=’a
  u9 C( W2 n. k; ~6 u% V* Q$ p; w9 U+ N- _( b
目的其实很简单,就是把后面的单引号给闭合掉。
* \8 T, L) ]1 D1 y) _; m8 _" V9 I7 @2 q
C,在一个MSSQL注入中注入批量查询的时候,不必使用分号分隔符。$ G3 F9 I9 V  {- l

% e" b# t% N  s+ f  H只要纠正所有批量查询的语法,无论你是否使用分号,查询的解析器依然能正确的去解释它们的。
8 m8 C' \3 O2 ?+ K9 a: F' M% @2 \" E/ `; m9 {/ E7 M" b
2,避免使用简单确认1 I6 {- u# ]) s, M7 h7 j

, D# T7 C9 S/ q8 V( Y: q6 q一些输入确认机制使用一个简单的黑名单,组织或删除任何出现在这个名单中的数据,比如防注入程序。
9 {% K3 o$ G! l/ o" O' q8 J5 n
* B' n( p0 z9 l: k这一般要看这个机制是否做的足够的好了,黑名单是否足够能确保安全。如果只是简单的黑名单,那也有机会突破的。
0 m% ?0 v. D" ~6 L  t% v$ r# L
4 k0 k1 f- C% N# LA,如果select关键词被阻止或删除5 N+ Z7 b1 S# e, M

! ^4 Y8 A8 Y) y% J1 x4 D& M$ t我们可以输入:
& M  O8 F7 w2 M- ?& W2 n1 @  v4 W8 {/ _) x: q
SeLeCt       注意大小写
* s+ L  \% y, o5 [7 u7 a5 O0 Y8 Q' e, ~0 z# d+ M  u
selselectect    还记得ewebeditor是怎么过滤asp的么?+ Z5 Q: ?9 F/ f5 Z4 o" G

) \3 g! i% O6 t' T  w' Z%53%45%4c%45%43%54                        URL编码. F, h3 r: u7 H

, d3 h. K# P( B%2553%2545%254c%2545%2543%2554    对上面的每个%后加了一个25
- @6 c8 w, G  J, s9 Z9 g2 f, L/ O7 H( {! _
3,使用SQL注释符0 _7 s4 z3 _3 p; M; g8 q
/ T! m. v9 Z: F; `( Q, t
A,使用注释来冒充注入的数据中的空格。9 i1 P  @' f4 y7 u

+ ^) u4 o; Z; j4 b5 W/ j. sselect/*yesu*/username,password/*yesu*/from/*yesu*/admin, k& r0 B- X& P

8 Z5 `/ E1 b! @/ O7 Y/*yesu*/来冒充空格+ l# ?% {* D/ ]. N; H
+ f+ B5 l& ]% A  R
B,使用注释来避开某些注入的确认过滤。2 p. h+ V5 H- J

& a, O$ O: X: y: W8 h+ S; k" u+ n. vSEL/*yesu*/ECT username,password fr/*yesu*/om admin
; ?' i, v' y* O* _( [# @8 ?. Y: U9 }, A+ X2 @+ `+ U; F0 Y, ?
4,处理被阻止的字符串/ l: K1 s4 ]5 l

6 M4 o& y0 s' i6 ~+ @$ g2 k比如,程序阻止了admin,因为怕攻击者注入admin表单中的数据。
0 ~! c. ~6 @- V9 [4 B% k. ]
& ?% |; ]& A7 t我们可以这样
6 H8 e! y- r  K; g. ~
; O3 G+ L  z* eA,oracle数据库: ‘adm’||’in’+ r: y4 K1 ?% J  v8 c
- \- h- H$ @- _8 ]2 h+ \( \
B,MSSQL数据库: ‘adm’+’in’0 Z- U0 H& |! v  e9 j( q  ^! g7 w

5 u6 Q% B7 I: NC,MYSQL数据库: concat (‘adm’,’in’); m7 P  v, o6 Y8 ^+ q  u9 G
6 E! C  R7 z4 {2 K
D,oracle中如果单引号被阻止了,还可以用chr函数8 E& t0 K' \% W# Z8 S) \3 y! l& S
6 z( p8 q6 {& J% j9 F. \( k
sleect password from admin where username = char(97) || chr(100) || chr(109) || chr(105) || chr(110)7 [/ p$ t. E8 S$ C/ S& B
# L# b6 C1 v% Y0 b) T6 ^5 D
还有其他方法。正在收集中.
1 m& I- U. U" N1 l% g- D" F
5 @* A. G" S7 G& m$ }8 x
回复

使用道具 举报

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

本版积分规则

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