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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-13 09:50:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
SQL注入。有攻有防。知道进攻。才懂得防守.
/ C- \# B# E* E) p+ K/ i; w2 z4 Y) U" s; q4 U6 h7 L: f
有的时候,很容易受到SQL注入攻击的程序,可能会进行输入过滤,用来防止攻击者无限制的利用其中存在的设计缺陷。
9 {$ l3 Y7 X( r
) b; B* L: D# |: z& y) ^唱出会删除或者净化一些字符,或者阻止常用的sql关键词。  Y& S, ~* M$ D+ D

0 U( I1 Z- \' d2 [6 Q" V我们通常有以下几种技巧,去避开这些过滤。
1 b, \6 p4 k# p( l6 R% g8 _9 U: A  V' B
1,避免使用被阻止的字符,即不使用这些字符仍然达到攻击目的。
8 k' ^5 K0 X+ {( ~
0 N8 r+ O+ J* P* k+ IA,如果注入一个数字数据字段,就不需要使用单引号。* ^1 ~' V2 L' \. w! H0 ~6 V% S) |9 D+ S

1 _8 |1 O8 _  @, |6 O) O1 gB,输入注释符号被阻止使用,我们可以设计注入的数据,既不破坏周围的查询语法。
% g$ N: M! R1 r. L; I" m+ A8 ]) s+ E7 L$ l
比如, ?id=1′ 这里存在注入,过滤了注释符合,我们可以输入 ?id=1′ or ‘a’=’a+ n  w) y1 `; H' R, P5 k0 F* ~

: P2 n) I* \6 o$ l- o. A目的其实很简单,就是把后面的单引号给闭合掉。
: d- N. y! m7 K: i1 b2 M) J4 p+ w
. f0 k# P5 i# p- |C,在一个MSSQL注入中注入批量查询的时候,不必使用分号分隔符。
) E$ w  l2 M3 \( F$ D! H/ g- [9 ~* p
只要纠正所有批量查询的语法,无论你是否使用分号,查询的解析器依然能正确的去解释它们的。2 C6 o: Z* e4 O4 v: k8 P+ \

( |. G7 u: n9 L1 l3 J2,避免使用简单确认+ v' f! ~7 S6 |0 S. n& v
! `# u* O# F5 n4 X6 q0 t
一些输入确认机制使用一个简单的黑名单,组织或删除任何出现在这个名单中的数据,比如防注入程序。  P( V  n3 E2 k8 c* x

/ Y5 b0 p& X) C- K这一般要看这个机制是否做的足够的好了,黑名单是否足够能确保安全。如果只是简单的黑名单,那也有机会突破的。3 s9 m# [' u/ n" x2 X$ c" V& {

. P- a5 d, K8 ^$ n( M! O6 fA,如果select关键词被阻止或删除
! E6 u! y* k. f. W6 B4 P4 Y
* T6 }; f2 J  ?: A1 s; N我们可以输入:
3 T! J6 W$ B# j" _7 \
/ j9 x0 d& D* m' {SeLeCt       注意大小写
1 I6 I5 Q* s5 A. ]% |; h' u7 A; _; v; H0 X
selselectect    还记得ewebeditor是怎么过滤asp的么?
& x& @) b5 ~* _+ t0 c5 e
0 c, J7 g/ T1 C6 z%53%45%4c%45%43%54                        URL编码) N+ N* Y) J" B% M* {
! p; e& v: e& @/ N3 ]2 U& a# \
%2553%2545%254c%2545%2543%2554    对上面的每个%后加了一个25
1 _8 g; G5 p, Y/ g+ F9 E% J  q* I9 K: \0 _$ I! k! ?* Q& z0 C
3,使用SQL注释符+ T. J1 R: p8 M  h, c3 I  Y

' u0 Q# E/ e, l9 gA,使用注释来冒充注入的数据中的空格。
+ Y# I. A" }( K- m: k& o
* b+ Z/ u/ W' @. b. Nselect/*yesu*/username,password/*yesu*/from/*yesu*/admin  s3 E) M6 f* S0 @$ X4 P

& q4 i# |' n0 u; c3 B2 x/*yesu*/来冒充空格
; k6 _9 a) O: o6 q/ \+ @2 N$ U
5 T( c  c  V1 x# {- B' O3 OB,使用注释来避开某些注入的确认过滤。
8 Y; H7 i$ Y0 g# S. o) E0 Q# ?$ s5 M+ J6 A5 n- ~1 z" O
SEL/*yesu*/ECT username,password fr/*yesu*/om admin
' b4 q, }( S  j5 A' @" H, ?2 O9 A2 L& j2 i4 V
4,处理被阻止的字符串. D' a  \  m! _

: \% Y2 [5 A, ^  U6 {6 c7 h比如,程序阻止了admin,因为怕攻击者注入admin表单中的数据。
0 U# E, n2 C; Q8 p9 I1 }4 X/ z
; x! R8 r- c1 p& S+ `9 P% |我们可以这样
3 e! E+ w' t8 A, V' }; [; o$ D! a% B! R
A,oracle数据库: ‘adm’||’in’
1 G5 M6 w; e) t+ o( [6 E7 T9 B3 c8 J/ T: N$ Z
B,MSSQL数据库: ‘adm’+’in’% B/ Y, [0 x( K0 C3 j. {
$ \1 N' N: @9 `, _/ Z# {
C,MYSQL数据库: concat (‘adm’,’in’)- o; v, y/ `/ _
0 |! r- X& x- S$ {) q
D,oracle中如果单引号被阻止了,还可以用chr函数( [( u! u$ h' ^$ `6 b
8 r& f- Y& x! V* {5 i. e' t5 `) l- l
sleect password from admin where username = char(97) || chr(100) || chr(109) || chr(105) || chr(110)
7 M1 O2 e$ q2 e, b9 H, s
8 n7 g( }2 c3 R1 \还有其他方法。正在收集中.$ q; L3 l/ Q% d

, }- I$ X0 L8 Q* K# k. s5 t
回复

使用道具 举报

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

本版积分规则

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