找回密码
 立即注册
查看: 2904|回复: 0
打印 上一主题 下一主题

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-13 09:50:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
SQL注入。有攻有防。知道进攻。才懂得防守.
# T0 F+ _( C! D4 o& F
6 c* C/ L( J- C- L, `) T9 y有的时候,很容易受到SQL注入攻击的程序,可能会进行输入过滤,用来防止攻击者无限制的利用其中存在的设计缺陷。8 j8 Y2 R7 B" T9 q- f5 @& Y) o

$ B0 c! `  L# |唱出会删除或者净化一些字符,或者阻止常用的sql关键词。* A7 R& G' |( u, O; T  f
. I% P1 M' ]1 \
我们通常有以下几种技巧,去避开这些过滤。. e/ W- E  \% _" G' B* w7 q
2 \# {) N$ k: n3 H2 o2 y
1,避免使用被阻止的字符,即不使用这些字符仍然达到攻击目的。/ P* z: z$ A" ]! H
9 b9 ~( v! Z) J3 j, h. B
A,如果注入一个数字数据字段,就不需要使用单引号。1 H& x7 \* G! z" M, C6 a* z3 p( F
$ }8 d- W- ~. y7 f# `& y/ K3 {
B,输入注释符号被阻止使用,我们可以设计注入的数据,既不破坏周围的查询语法。( Z1 a* N4 i, F) o6 ~2 t
; m& i' k+ L/ c$ I7 A3 P7 Y9 I
比如, ?id=1′ 这里存在注入,过滤了注释符合,我们可以输入 ?id=1′ or ‘a’=’a
5 V& j0 y5 M5 U4 w2 k
9 @. s0 b' R. o, m目的其实很简单,就是把后面的单引号给闭合掉。. S* P& k. q0 e! L
7 _/ ?; w/ B3 P5 Q# w
C,在一个MSSQL注入中注入批量查询的时候,不必使用分号分隔符。
( d+ F7 F- c) E' h; k* w* `% ?, M9 @2 j. p
只要纠正所有批量查询的语法,无论你是否使用分号,查询的解析器依然能正确的去解释它们的。
% V5 Q8 M% ]6 J  o  W$ x' N& ?5 y3 `7 U
2,避免使用简单确认7 \0 c6 J$ `" H- J( \# b( `

2 J- ~  l, N+ n  ~' K一些输入确认机制使用一个简单的黑名单,组织或删除任何出现在这个名单中的数据,比如防注入程序。7 G% z6 E5 E- {! S" B  S
% q# b! f6 U( D  v
这一般要看这个机制是否做的足够的好了,黑名单是否足够能确保安全。如果只是简单的黑名单,那也有机会突破的。8 q" }7 c) d6 g4 W
4 A- g- z. C9 \  ?$ O% A
A,如果select关键词被阻止或删除
1 k, c- I& b: A; q1 L- O6 t9 N
! }0 S9 P( |) J+ e. D( i" `7 ?我们可以输入:) V- ?! |# o! d6 ~- q0 ~
; b3 P: K3 W3 h
SeLeCt       注意大小写
" |* I1 y  F4 V" j3 Q3 f( r9 P, f4 Q) f* o+ `) i  r$ n- K
selselectect    还记得ewebeditor是怎么过滤asp的么?" R, c- p$ ^# D8 P# ~

. D9 Z! I( I/ Z8 v7 a2 U%53%45%4c%45%43%54                        URL编码+ G% U7 ]* t( P9 J

6 j* D# B! u4 V9 i%2553%2545%254c%2545%2543%2554    对上面的每个%后加了一个25+ y( c& G% Q" i0 Q* q
3 Z1 E1 K" r7 D: N
3,使用SQL注释符
" Q) j& i7 i" ?5 d8 _  f/ e) _0 ^5 N, @, E' K) M/ t0 Y5 m
A,使用注释来冒充注入的数据中的空格。+ H/ J2 Q0 B6 @/ |" C9 n9 E
% Z5 t4 i+ D, R7 Z, P
select/*yesu*/username,password/*yesu*/from/*yesu*/admin
. n; Z, h; ?( A
+ E( b4 z) @+ |, u4 o# L: e6 o/*yesu*/来冒充空格
: h- d: v' y9 C( \. i4 t0 U& C, K. g7 H) J% A
B,使用注释来避开某些注入的确认过滤。! T: S! B) m; e. s( [# h- g0 }5 c4 g: O
: h% d" ?% |4 A9 W. E1 Z, [( o
SEL/*yesu*/ECT username,password fr/*yesu*/om admin' i6 l$ K+ G+ S3 {
* q- K7 ~) d- F* q. X
4,处理被阻止的字符串
- j  f8 u" S5 u7 \* U; }0 T3 ?+ _9 f* y- R; z/ b% R8 z5 m0 p7 L
比如,程序阻止了admin,因为怕攻击者注入admin表单中的数据。
' ^9 f+ ~& ~$ \! X! O9 P2 _) i" @9 Z* V! f/ D  o( |( }& u% h2 f
我们可以这样
. O0 B& u9 Y/ [8 I) e) [3 O6 j& r/ b3 y" ?# Q# ?# ^. X
A,oracle数据库: ‘adm’||’in’6 p% W# o6 b5 h/ A) K7 C

4 H; ^2 Z# c; B) h# e! N" rB,MSSQL数据库: ‘adm’+’in’/ R- e2 J" l0 A: m
0 c. |4 X8 O2 o: L% a2 ^
C,MYSQL数据库: concat (‘adm’,’in’). n( @* T% j8 [9 W4 F: |

& ?' s% h! H8 }9 }0 j% sD,oracle中如果单引号被阻止了,还可以用chr函数
5 ^. q6 J; T6 ?6 K4 {! q3 y5 L5 V
sleect password from admin where username = char(97) || chr(100) || chr(109) || chr(105) || chr(110)
7 s: j$ o+ q6 N3 W6 j2 {% I+ f+ _% i) `
还有其他方法。正在收集中.
3 F1 o3 o: P9 U$ Q
- ]( W, k6 Q2 F6 @# h
回复

使用道具 举报

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

本版积分规则

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