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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-13 09:50:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
SQL注入。有攻有防。知道进攻。才懂得防守.
1 t2 ^9 |5 q& x5 @2 C
9 a! j( f! D/ I有的时候,很容易受到SQL注入攻击的程序,可能会进行输入过滤,用来防止攻击者无限制的利用其中存在的设计缺陷。
1 v0 D3 [1 r# I5 u4 t+ J  O. s+ j; \2 j1 ?& A, W/ U
唱出会删除或者净化一些字符,或者阻止常用的sql关键词。
3 o; P1 M! {% C9 ?1 q, t& J% g! M
我们通常有以下几种技巧,去避开这些过滤。, z. F0 f- C& ^

, m$ y# h1 F' @+ m0 e1,避免使用被阻止的字符,即不使用这些字符仍然达到攻击目的。4 K/ a6 y1 j# }+ |* {4 m- i- k5 n7 k* v

- P9 r, k0 Q( [, |- t% bA,如果注入一个数字数据字段,就不需要使用单引号。
9 }3 p2 w. H) h) k- V  P% O" b8 e1 c: M, j  v5 r
B,输入注释符号被阻止使用,我们可以设计注入的数据,既不破坏周围的查询语法。
4 F2 Z! n! F6 M1 M# Q' t: S( t- C  E" `" {% R8 L6 p- d
比如, ?id=1′ 这里存在注入,过滤了注释符合,我们可以输入 ?id=1′ or ‘a’=’a) S5 p! Y9 E6 v1 Z

# \3 `* j, L! w8 d6 t2 i目的其实很简单,就是把后面的单引号给闭合掉。7 @& Y  p5 G: F3 Q0 F; E' g. v# G
$ H, ]8 O5 P! t; g" x% f$ ]) [
C,在一个MSSQL注入中注入批量查询的时候,不必使用分号分隔符。% p# U  Y# |& W+ i

) w( |* P9 ?/ K9 p. c8 h% p只要纠正所有批量查询的语法,无论你是否使用分号,查询的解析器依然能正确的去解释它们的。2 ]: f/ n1 V- n$ N( a1 {* o

% i; U; _& A& U# P2,避免使用简单确认
# z6 m( k3 h/ o# ^- N/ |2 M: S( K# Z- ?: w
一些输入确认机制使用一个简单的黑名单,组织或删除任何出现在这个名单中的数据,比如防注入程序。
' }1 S4 M6 L& U8 ?, x5 X; H1 f8 G4 o5 z0 g
这一般要看这个机制是否做的足够的好了,黑名单是否足够能确保安全。如果只是简单的黑名单,那也有机会突破的。3 a7 {% M: G1 E' J# }$ u8 x# z, Z# n

8 I& m' w6 Q" \& u7 p' i7 F+ }* dA,如果select关键词被阻止或删除
0 x8 x5 I' y2 p$ H4 C4 V7 W* \; |2 L0 y' u8 a
我们可以输入:: D) W8 o) e) N, v5 A
+ f7 e+ u; @3 n) u5 X
SeLeCt       注意大小写: _6 a+ {6 R+ T& n6 O2 a' D' f
- h9 }1 U2 Z/ o9 {3 c
selselectect    还记得ewebeditor是怎么过滤asp的么?$ l) Z6 S1 q% r6 K( f% X1 K

6 [3 q* [1 Q( Q1 A2 V) t+ z$ [%53%45%4c%45%43%54                        URL编码
; D2 `. A" a4 o9 f! E; n% r7 h. g& ?! [
%2553%2545%254c%2545%2543%2554    对上面的每个%后加了一个25$ o2 d  ~# [5 P4 @3 K
* {2 a) K7 U, e3 U, y, k7 ]
3,使用SQL注释符
9 h" K# O( R# y8 N
- C" ~* [. `- p4 ZA,使用注释来冒充注入的数据中的空格。2 p. m+ \0 X$ |* G; }8 a

2 {) j6 F# o& T& i! H  zselect/*yesu*/username,password/*yesu*/from/*yesu*/admin
1 c2 p7 c: b2 ?! U
/ \: b. B" y/ v$ p/*yesu*/来冒充空格: `# j3 B  P9 e! p' W& {9 y9 R
; u6 I! ]& ^: L& K0 }
B,使用注释来避开某些注入的确认过滤。
6 U. h# @0 |  M- i0 M+ P7 Y! M5 a
SEL/*yesu*/ECT username,password fr/*yesu*/om admin
! ]5 K& A1 p9 m; P
' U6 G( O! F9 |4,处理被阻止的字符串
9 |4 h2 o# k1 [1 O' {! r6 ^- J
/ `% q: i5 T* a1 y比如,程序阻止了admin,因为怕攻击者注入admin表单中的数据。
5 m! ^9 B* q8 h3 l! m' V4 Y& i
# q5 |) k4 r6 {  s2 {8 l我们可以这样: w9 d8 ?& [6 ~. ~! C
& }" v0 X. |) F. g1 H' b
A,oracle数据库: ‘adm’||’in’
, d5 k1 [1 ?" ~, C+ L+ t( X0 i1 y% k) o: h7 z4 r' h8 }
B,MSSQL数据库: ‘adm’+’in’9 u7 M$ Z6 F+ F/ J! `4 ]5 M9 S4 ^( @
$ c! h# [. P/ }7 Y
C,MYSQL数据库: concat (‘adm’,’in’)6 U. R  J7 J7 }' d
* d6 @: ^; Q) c7 Z
D,oracle中如果单引号被阻止了,还可以用chr函数6 `' B6 j5 `; `5 L% Y3 O

6 N" o, ~- m2 q0 N3 z3 D  Psleect password from admin where username = char(97) || chr(100) || chr(109) || chr(105) || chr(110): H$ Z& ]8 s; m1 A
- R2 \% |8 n* w
还有其他方法。正在收集中.
6 m9 F, Z7 \1 f3 O' F# q
$ o; q. A; @3 v6 L0 r0 o/ ?$ ~4 ]
回复

使用道具 举报

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

本版积分规则

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