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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-13 09:50:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
SQL注入。有攻有防。知道进攻。才懂得防守.
: I2 b0 }8 F5 Z+ i: [$ n1 b; Z3 Q& }5 Q3 `- n
有的时候,很容易受到SQL注入攻击的程序,可能会进行输入过滤,用来防止攻击者无限制的利用其中存在的设计缺陷。
9 H: s2 `! ^4 `. f1 ?4 v4 _7 E5 K9 D! L
唱出会删除或者净化一些字符,或者阻止常用的sql关键词。
$ O% F9 m  m- r4 G2 z
/ I: _. w: v, H( U6 `4 V我们通常有以下几种技巧,去避开这些过滤。
: S4 r- v! r/ s
1 s1 c. G+ M5 \$ g. k, G- t1,避免使用被阻止的字符,即不使用这些字符仍然达到攻击目的。* }$ f, S0 t; A+ P
) G+ C& }, T  u4 |6 V# ?
A,如果注入一个数字数据字段,就不需要使用单引号。
$ s' q* q% z  ?6 n, O0 `) N/ L2 }
B,输入注释符号被阻止使用,我们可以设计注入的数据,既不破坏周围的查询语法。; Y, t0 t4 N+ i( E. J: T
; {" Q( |: y! }# R/ S
比如, ?id=1′ 这里存在注入,过滤了注释符合,我们可以输入 ?id=1′ or ‘a’=’a% M; ]" j2 v( z8 D
1 Q! Z) p- N  i8 P$ F
目的其实很简单,就是把后面的单引号给闭合掉。
: o  i5 H- E8 w# V' Q$ G9 u8 Q! [# k* e' y2 @1 x
C,在一个MSSQL注入中注入批量查询的时候,不必使用分号分隔符。
" _* @- G, g2 T% ]# G/ }0 s' X/ K. D3 E
只要纠正所有批量查询的语法,无论你是否使用分号,查询的解析器依然能正确的去解释它们的。
& \& \- w& S% Q5 c& g: J7 k* A/ S- g. e  b' |$ H4 Y+ H
2,避免使用简单确认
) o( z" \5 ]$ G+ X+ W! u3 O1 T8 e
一些输入确认机制使用一个简单的黑名单,组织或删除任何出现在这个名单中的数据,比如防注入程序。
" \) d  C, w/ K- N, N: Z
0 {# j+ B/ N7 w7 X" G" C( H% \这一般要看这个机制是否做的足够的好了,黑名单是否足够能确保安全。如果只是简单的黑名单,那也有机会突破的。- b+ }; i% N# i! S7 r0 E

, C$ B2 d2 B2 K; K0 J6 eA,如果select关键词被阻止或删除; D7 }/ D4 `, g) @- J9 L% v

) K+ h" ~; t2 U0 u0 {+ T我们可以输入:8 L$ U6 {5 J. C0 M  b

/ m4 ^4 s/ b: vSeLeCt       注意大小写
" L% C3 w$ `4 s# U9 x5 A1 c7 Q1 |4 s- r0 m$ ]
selselectect    还记得ewebeditor是怎么过滤asp的么?8 S5 T* Y! \  u  r. J
5 {1 v$ N& i$ ^$ W9 X( M, d+ m
%53%45%4c%45%43%54                        URL编码2 q+ A; a% X& g( z0 J
9 p2 Y& v* m( o9 {# Z! k
%2553%2545%254c%2545%2543%2554    对上面的每个%后加了一个25) e* t! e/ n" D% p2 ~

8 \+ [: y( m! y. H5 y% r3 n& y( k( N3,使用SQL注释符3 w! ?9 t  ?1 O' T8 T5 s, o  T* Z. U

. L9 \3 R" v- e5 p8 _6 R( FA,使用注释来冒充注入的数据中的空格。! A8 o5 G9 y! X2 y9 Z* O/ X

- Z8 F. V2 T, Sselect/*yesu*/username,password/*yesu*/from/*yesu*/admin
. Q9 ~6 d5 L1 Y7 N9 T! p
9 S! ~# R4 P0 O; k2 p& ~2 h/*yesu*/来冒充空格
; t8 K$ V- c* P" u; ~8 y' i
& i' F) C) a, oB,使用注释来避开某些注入的确认过滤。
9 D, [1 K5 w# Z1 S& r9 \/ E, k& w- i0 C' d1 j( _
SEL/*yesu*/ECT username,password fr/*yesu*/om admin/ ^  e3 ~, K5 W- X6 I& F* ^
, ~; D( e0 e5 N% L4 y) W" z5 `
4,处理被阻止的字符串
) |' k2 t# X! u
$ l5 ?, _/ {) N, F比如,程序阻止了admin,因为怕攻击者注入admin表单中的数据。
8 x; J- S; v* l3 }& ^8 U0 F3 p0 v6 s& B" @3 B
我们可以这样. i) |( q! ]  S. C0 m8 B

) Q' h0 L' P% m4 FA,oracle数据库: ‘adm’||’in’
& T& C0 t- W- @3 J/ L9 S& ]* Q
/ {, ~2 F& k/ C$ NB,MSSQL数据库: ‘adm’+’in’
* @' ^0 R6 s& e" R4 b$ q7 Z, k9 m3 q  p% l
C,MYSQL数据库: concat (‘adm’,’in’)
0 C4 Z5 T7 G" s. ?' a' U! L/ U+ @. G/ A1 Y( ]( b
D,oracle中如果单引号被阻止了,还可以用chr函数4 L3 ]' q/ H) W0 w' E9 H3 Q0 `

5 }! N: C& A6 V" nsleect password from admin where username = char(97) || chr(100) || chr(109) || chr(105) || chr(110)0 H6 F/ M' W" v7 g& g
! v+ G1 B, f! J, D% a( r
还有其他方法。正在收集中.  r! Z3 a) i$ b4 X) R; a. V

: H" _; s: N5 O) Y  T$ c/ R, W
回复

使用道具 举报

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

本版积分规则

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