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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-13 09:50:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
SQL注入。有攻有防。知道进攻。才懂得防守.: K1 k' _# [- C- p) p
3 T/ e6 q; I$ S4 \$ e
有的时候,很容易受到SQL注入攻击的程序,可能会进行输入过滤,用来防止攻击者无限制的利用其中存在的设计缺陷。% @8 l% g4 e  K& Q$ q9 i

4 p) ]2 Q8 ^9 _6 K+ R唱出会删除或者净化一些字符,或者阻止常用的sql关键词。
. d+ ~- X: x8 @0 E
6 P, N) h9 U( \: D我们通常有以下几种技巧,去避开这些过滤。& v  {/ k( _# K# m/ g9 ]7 r9 K9 M9 q
: Q5 r* m; Q6 U* Y: l
1,避免使用被阻止的字符,即不使用这些字符仍然达到攻击目的。
% h! g: h: L3 L9 {( p) L4 I- ~
- \& z9 s- |+ Y- A) `, E  b" HA,如果注入一个数字数据字段,就不需要使用单引号。! u' {. @. Q* L3 q
& l: u9 H8 P; N7 u& ]; q
B,输入注释符号被阻止使用,我们可以设计注入的数据,既不破坏周围的查询语法。" q2 `; p! ^! s! l3 f

1 \& ^! R. c) a/ S) X比如, ?id=1′ 这里存在注入,过滤了注释符合,我们可以输入 ?id=1′ or ‘a’=’a
; E& H& V. }) j) }/ s
. l) G. `) H3 K8 c$ i9 x目的其实很简单,就是把后面的单引号给闭合掉。
. z- v# J9 o% ~( q! M7 j* N- A+ g5 v  k3 D* A
C,在一个MSSQL注入中注入批量查询的时候,不必使用分号分隔符。
0 |0 N( E. q- z6 W; G3 Z) ~  L! X, F& b7 h. c
只要纠正所有批量查询的语法,无论你是否使用分号,查询的解析器依然能正确的去解释它们的。9 f0 `( X- o+ r% B( l- c" K

& R! ?$ f# e- w" b0 r2,避免使用简单确认- j2 U! f) |- h

& r  {1 z) K: w% I' z2 s9 h% n一些输入确认机制使用一个简单的黑名单,组织或删除任何出现在这个名单中的数据,比如防注入程序。* i0 p2 Y7 Y5 ^# o

2 J, j$ D/ _% p这一般要看这个机制是否做的足够的好了,黑名单是否足够能确保安全。如果只是简单的黑名单,那也有机会突破的。
. p3 M; r, H! ?& B0 g* \2 x5 q! Y8 Z& @& g
A,如果select关键词被阻止或删除8 \) ~2 r5 a- c0 v( f. p
4 Z, c2 J% |+ C0 z6 ~9 N9 C+ K* h
我们可以输入:
4 o( X% F" m& [/ l+ F! ?' g
* Q: w  y  o3 z6 g0 hSeLeCt       注意大小写0 m' d# v- f$ Z. z, Z
) G% ^! e$ |7 |& [
selselectect    还记得ewebeditor是怎么过滤asp的么?
$ T; h6 B5 x' O2 R) X/ h0 z. U- {1 @; a7 y: a
%53%45%4c%45%43%54                        URL编码1 `+ o' L5 I' E2 o

0 `. d# o: p! z6 d/ p0 O) W%2553%2545%254c%2545%2543%2554    对上面的每个%后加了一个25! j9 u" Q9 ?* n) i4 K2 b
3 h* D; [$ K8 a. X
3,使用SQL注释符  V9 \- m5 u0 o' j& n/ R! s
/ i% n9 I5 w+ N* o
A,使用注释来冒充注入的数据中的空格。  f6 A, i8 k# v$ D
% |; x. Z+ I7 A  _, x5 `
select/*yesu*/username,password/*yesu*/from/*yesu*/admin
. ]1 D/ v, p8 l; \0 R3 i- d" {# s. E7 n
/*yesu*/来冒充空格3 e8 U6 Q) ^1 B) W. ]

5 \) v8 ^* J& E# o) J3 Y6 I: {$ ~B,使用注释来避开某些注入的确认过滤。9 H, L. f+ o6 d( h- e$ j/ @
0 Q  N4 j6 ~8 y' l" M% f3 x* W
SEL/*yesu*/ECT username,password fr/*yesu*/om admin
0 i/ ?2 V( h% b9 I. z  q7 t3 C
7 t: D6 b$ c- \4,处理被阻止的字符串
5 \9 N  e9 g8 T1 m/ Y  ~- G' d, B+ @/ ]# q7 \6 m( ]$ u
比如,程序阻止了admin,因为怕攻击者注入admin表单中的数据。
; ~- q8 V8 o; A$ S7 E: K6 `
9 z' |- c$ A3 \- a- F+ f4 X( n我们可以这样3 {: H3 d8 B! V. Y) |  ~% s9 _1 c) y! d

+ H2 \3 e2 x( KA,oracle数据库: ‘adm’||’in’5 M+ s8 `% r) m1 l  s6 L! |+ c$ p

# w5 j, t' P3 L! H6 \B,MSSQL数据库: ‘adm’+’in’
* Y6 M9 n; X) M/ M5 n# {
7 d4 o$ Z" j) jC,MYSQL数据库: concat (‘adm’,’in’)
) Y- I' ^/ ]5 c
) X: ?5 w$ M: ]" `) Y# S$ nD,oracle中如果单引号被阻止了,还可以用chr函数; w* K: h. {* B. s9 c# n$ a' v0 C
+ s' j5 B3 ]2 d0 Q1 |: L
sleect password from admin where username = char(97) || chr(100) || chr(109) || chr(105) || chr(110)
- |/ ?. o6 D" s* Q6 W$ T# I9 V1 ~9 G, t: O1 f  ^
还有其他方法。正在收集中.
1 s1 @2 d* n" I3 N, U
0 E. R, `: B9 w9 o7 k+ S
回复

使用道具 举报

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

本版积分规则

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