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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-13 09:50:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
SQL注入。有攻有防。知道进攻。才懂得防守.7 j2 l& r- R" I0 ]. ^( w1 S2 _
/ q  p. ]* h$ d( h: E; U
有的时候,很容易受到SQL注入攻击的程序,可能会进行输入过滤,用来防止攻击者无限制的利用其中存在的设计缺陷。
- T) A, Y: c" J. m/ d6 Y/ d4 ^6 C4 v3 C0 j
唱出会删除或者净化一些字符,或者阻止常用的sql关键词。
3 Q- \% y. _7 J6 Z
, p8 o2 Y* z6 C; c, E$ H, ?8 p我们通常有以下几种技巧,去避开这些过滤。
& K0 P. v' W; |( I) ]& j, i. b$ }8 O- A  o1 d
1,避免使用被阻止的字符,即不使用这些字符仍然达到攻击目的。& |- }, E% |" }, l# f
5 w% ~0 y, @) Y9 z
A,如果注入一个数字数据字段,就不需要使用单引号。
4 C* \! y3 X. l% Y
% ?: |/ Y) Z8 j( P+ s7 J( WB,输入注释符号被阻止使用,我们可以设计注入的数据,既不破坏周围的查询语法。
* D1 ?7 Y+ O* b7 O: ^5 i6 ?- _; K3 T4 T
比如, ?id=1′ 这里存在注入,过滤了注释符合,我们可以输入 ?id=1′ or ‘a’=’a* {0 k9 @4 {' T5 v' S/ O

# A! O8 F7 _9 [! l# D1 I. H" z目的其实很简单,就是把后面的单引号给闭合掉。2 g6 r/ s$ C1 P1 W& g# c$ l8 q
$ S  Z  Q) t8 {7 N' b+ c
C,在一个MSSQL注入中注入批量查询的时候,不必使用分号分隔符。" o% U) U) K* S; T: a
' {; F: O2 x8 h0 B- A) N3 m% k. `4 K
只要纠正所有批量查询的语法,无论你是否使用分号,查询的解析器依然能正确的去解释它们的。
- [2 @8 q( Y  p; v, t7 k& E/ r) U- V- V8 t0 B
2,避免使用简单确认8 G0 Y- r6 z0 q$ j1 y/ y! S/ I

' f- }: }4 J2 Y一些输入确认机制使用一个简单的黑名单,组织或删除任何出现在这个名单中的数据,比如防注入程序。
# c/ Y" N: c, R0 R% i- V2 N
8 E1 O8 W! e: a/ T4 b这一般要看这个机制是否做的足够的好了,黑名单是否足够能确保安全。如果只是简单的黑名单,那也有机会突破的。
9 Z0 H/ m" d; i! M# t  r; K( ?7 Y9 R% @, `( l
A,如果select关键词被阻止或删除
6 S- z$ M2 s/ K9 |* \- Y
1 k) M" x- s$ M8 v, G! U我们可以输入:& W5 ]7 X; y# V1 F
2 O5 }7 j0 i/ s' ]2 m
SeLeCt       注意大小写
. @1 h* v2 p' j! E( A
5 J) Q$ s0 p6 ]0 \( _* Mselselectect    还记得ewebeditor是怎么过滤asp的么?7 y' }! y. Q9 C) v

) L% j0 `7 D- s" W' ~1 b%53%45%4c%45%43%54                        URL编码
$ I- z! v, z9 q7 l& \! `: w* F
. }& ~2 C# p* |6 Z; `/ W%2553%2545%254c%2545%2543%2554    对上面的每个%后加了一个25
3 t5 Q/ Q1 R- o! h, o
# H7 T+ z' C1 w9 L- I3,使用SQL注释符
$ z" j3 p* j- Q* U" u4 W; P9 ^/ S. p! y* ]0 k3 q$ b# o
A,使用注释来冒充注入的数据中的空格。3 L" o6 a: ]/ J2 t2 ?* t

! y- O. p  v+ L" Z4 Uselect/*yesu*/username,password/*yesu*/from/*yesu*/admin
& w7 ^% }) {0 E8 o3 x
+ O" F7 D0 J( u- _5 i4 X/*yesu*/来冒充空格
  M7 h2 h0 p3 [4 i# B
( a# S+ ]7 C4 k9 rB,使用注释来避开某些注入的确认过滤。
- P9 ^6 }3 U6 g7 ?* U4 v$ R7 P. E0 H( d
SEL/*yesu*/ECT username,password fr/*yesu*/om admin
* \3 F# C" d, b. u$ T2 h8 Y+ M# y; T
4,处理被阻止的字符串
/ V3 ~! j; w) Z
: g* @. \. N5 ]& ^比如,程序阻止了admin,因为怕攻击者注入admin表单中的数据。, ~* [' |) O5 \7 X
6 }& _/ @& M, h" J1 M8 Z
我们可以这样
0 L" }" [: s" \! e; |' P& n' n2 Z
/ \7 J- A! \, HA,oracle数据库: ‘adm’||’in’
( L5 B& |4 T  X9 _, ]& a# Q! `) ?
/ f4 Y8 G0 A; z. |5 b9 hB,MSSQL数据库: ‘adm’+’in’
8 x4 _! R3 Y% U- H+ d
; k) g# a# z% BC,MYSQL数据库: concat (‘adm’,’in’)
( j+ k0 N# {) a* S) k0 n- `" b! J
D,oracle中如果单引号被阻止了,还可以用chr函数  M' H6 |( R. J
8 ?& W2 j2 X3 a9 X; n; B
sleect password from admin where username = char(97) || chr(100) || chr(109) || chr(105) || chr(110)" q* i4 K9 s; w2 N, t

& J" {; N, u) K7 T. |% b  Z$ O还有其他方法。正在收集中.& ?! R8 Q* t$ _4 q# y: ]
1 q& g8 K# V  V9 g4 p. H
回复

使用道具 举报

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

本版积分规则

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