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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-13 09:50:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
SQL注入。有攻有防。知道进攻。才懂得防守./ G" g* p7 n! {3 {9 m" G, Q; b# n

: B& D3 {# ~1 ^0 I9 C7 A* S有的时候,很容易受到SQL注入攻击的程序,可能会进行输入过滤,用来防止攻击者无限制的利用其中存在的设计缺陷。
2 W: C; x' \, @3 y+ `9 P! S3 F, c- X' S& N* G
唱出会删除或者净化一些字符,或者阻止常用的sql关键词。3 z2 Q+ j+ D1 S6 w7 d+ X* T
4 {: W( M% P" A7 J- |
我们通常有以下几种技巧,去避开这些过滤。6 M, s) J' L( G  z

5 B* X. T) j% \" J) x& F, |1,避免使用被阻止的字符,即不使用这些字符仍然达到攻击目的。9 h# v' M! I5 \0 C, }% |9 V3 u& Y

2 d! R; r6 D! C6 tA,如果注入一个数字数据字段,就不需要使用单引号。# F& x3 ~/ a' e9 v! k
) T& b3 a3 d7 z$ i
B,输入注释符号被阻止使用,我们可以设计注入的数据,既不破坏周围的查询语法。( \' I% t: @6 j$ z- b

& k. n+ Z3 Z% d# g! y比如, ?id=1′ 这里存在注入,过滤了注释符合,我们可以输入 ?id=1′ or ‘a’=’a, |/ a& p8 j, a4 C& M. s
% g; f9 v  z/ Q$ q- K
目的其实很简单,就是把后面的单引号给闭合掉。. A4 h3 b% U6 t* ~, e. C  ]$ N6 ?

6 K+ V- D/ P' x0 U7 i$ \C,在一个MSSQL注入中注入批量查询的时候,不必使用分号分隔符。
& {. M( n" y; ]& G& @* C+ o: C
- t" _4 b- ~# `0 `3 n+ y只要纠正所有批量查询的语法,无论你是否使用分号,查询的解析器依然能正确的去解释它们的。. y) g8 y  V; `6 B# U9 B' n

) ]  S4 `4 T( g2,避免使用简单确认
4 M" N8 V# _( `' r: @( S) z2 s9 z: K' z: [7 Y: h
一些输入确认机制使用一个简单的黑名单,组织或删除任何出现在这个名单中的数据,比如防注入程序。3 U4 o" f: x; f& K
; \7 _/ U! x; e
这一般要看这个机制是否做的足够的好了,黑名单是否足够能确保安全。如果只是简单的黑名单,那也有机会突破的。0 j( Z) b, D8 R" U9 Z9 v& Q

" N5 p1 g  D- [A,如果select关键词被阻止或删除
. [% \/ r: \4 x4 k  c
- G; ^' {$ o/ t( I我们可以输入:9 M' ~3 l9 b3 e3 t0 n) ^2 u  V. w) T
$ h, Q, H/ k" @) z  g& t
SeLeCt       注意大小写
% r  _1 P2 }& o" y& x
) {' Z( I6 U/ Y$ h& pselselectect    还记得ewebeditor是怎么过滤asp的么?
, C8 O: _, q: ]5 r* f5 c- z1 V( \1 p% K' [4 ^! K3 F* L
%53%45%4c%45%43%54                        URL编码& e% X7 \$ u; ~9 Z8 W1 D

5 h' N$ d2 U3 x& E0 {! d1 ?" o  g%2553%2545%254c%2545%2543%2554    对上面的每个%后加了一个25
+ Q( K7 q1 v% K/ K" v5 H* s
0 t; d5 C8 e1 O% H/ h9 @3,使用SQL注释符1 A9 m8 O3 M' |( P2 o
* c: e! E/ j  j, U$ r3 ^* y
A,使用注释来冒充注入的数据中的空格。( I4 D6 |7 G1 V# f- u- p

- L# I/ x$ Q7 Dselect/*yesu*/username,password/*yesu*/from/*yesu*/admin
3 Z' C# {, V. ~' z! c0 Q- k1 b6 }* G, x! P- [' i
/*yesu*/来冒充空格0 M, T/ k& ?2 f7 ]
; L% a  s- q: i$ `7 X
B,使用注释来避开某些注入的确认过滤。; a% P1 i6 N, Q0 p& E
* @: {  ]9 H' u+ \( }: j7 b- E% l
SEL/*yesu*/ECT username,password fr/*yesu*/om admin+ s/ J2 ?- w& {" X

' D  \- P) y8 |4,处理被阻止的字符串
0 D5 e* a5 Q' o* ^, C
: E' g( I5 T* r* k* R5 \比如,程序阻止了admin,因为怕攻击者注入admin表单中的数据。
0 Q/ u1 A" Z! O0 _; O9 k
% Q- ^; E5 y# G我们可以这样+ B) [- G* s# q7 D

. D- P" p9 a) L& eA,oracle数据库: ‘adm’||’in’
5 C  c& A8 M. N, |, Q
& X6 ~2 i  w4 q, qB,MSSQL数据库: ‘adm’+’in’
: O& ?, J4 C! v& O, p: d3 I' B6 L3 M+ a8 G. R' P0 T2 _/ |7 ?
C,MYSQL数据库: concat (‘adm’,’in’)
" ^/ r! [6 [; q) @, Y/ K
3 |  }5 ^' o6 p6 WD,oracle中如果单引号被阻止了,还可以用chr函数
! U5 C* k; R2 v
- R7 B+ C6 q& ~+ \2 @/ j( g( isleect password from admin where username = char(97) || chr(100) || chr(109) || chr(105) || chr(110)
! D6 e5 a$ [! v9 q- K+ N7 a5 G) k2 V' V# F. a  `* O
还有其他方法。正在收集中.
. j1 a5 @  X1 C5 X$ g6 p( @1 ]
回复

使用道具 举报

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

本版积分规则

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