中国网络渗透测试联盟
标题:
PHP中SQL注入,绕开过滤,照样注入
[打印本页]
作者:
admin
时间:
2013-1-13 09:50
标题:
PHP中SQL注入,绕开过滤,照样注入
SQL注入。有攻有防。知道进攻。才懂得防守.
+ I' q) b# j* `/ g
: X3 z& S6 `) p6 w0 P) h9 g
有的时候,很容易受到SQL注入攻击的程序,可能会进行输入过滤,用来防止攻击者无限制的利用其中存在的设计缺陷。
1 l, F+ N, B" v: E/ ~0 K5 n
- o6 }4 Q5 e* N) c+ S: B
唱出会删除或者净化一些字符,或者阻止常用的sql关键词。
( L p2 T# S' u/ a' M
s( M/ ?/ G$ ?
我们通常有以下几种技巧,去避开这些过滤。
0 Q, H* P3 Y4 ]. c& P, ?
9 I' {7 D5 u6 S. W
1,避免使用被阻止的字符,即不使用这些字符仍然达到攻击目的。
' q& r2 l W. S1 F4 }# \
) H1 s( V+ W5 N: X) H" `# x
A,如果注入一个数字数据字段,就不需要使用单引号。
( Y& k* J; v _) [* s% p
" t# S8 b; F" ^4 O, N! l) j' s
B,输入注释符号被阻止使用,我们可以设计注入的数据,既不破坏周围的查询语法。
" r- J+ S; Q4 j/ E6 ?( @& ?2 }
& ]/ t. N e* G
比如, ?id=1′ 这里存在注入,过滤了注释符合,我们可以输入 ?id=1′ or ‘a’=’a
! W/ E. ?/ F/ \ S& i2 {
0 T1 q. j3 p; i" Z* K* W
目的其实很简单,就是把后面的单引号给闭合掉。
3 l7 d0 L \" W; L3 m; n7 n2 a! @
# W7 C- ~& [5 v+ F2 K, g
C,在一个MSSQL注入中注入批量查询的时候,不必使用分号分隔符。
& C4 h, _6 X7 _; ^
# o* C" ?2 [1 @! j9 |
只要纠正所有批量查询的语法,无论你是否使用分号,查询的解析器依然能正确的去解释它们的。
' D+ p# z6 u: q" L& r
6 W# N* ?6 A, A5 d- Q
2,避免使用简单确认
: `7 C4 F- |% _) `/ x
% Z/ D% l& E: c' o
一些输入确认机制使用一个简单的黑名单,组织或删除任何出现在这个名单中的数据,比如防注入程序。
2 D J$ ?3 z+ [
3 C9 T4 G) |$ W T4 Q
这一般要看这个机制是否做的足够的好了,黑名单是否足够能确保安全。如果只是简单的黑名单,那也有机会突破的。
% ^* g# g0 w) X
7 L7 x, _* s& X; R8 v0 |" j
A,如果select关键词被阻止或删除
) C" |; y1 E* |: g) G/ b
- H* [# M. @8 ?4 K1 o
我们可以输入:
9 l& x0 v# v6 _- N3 ]! f
2 }' J5 U/ `; W5 F
SeLeCt 注意大小写
' s Y* I- k: m2 _4 J
3 v4 v' n9 k7 b% U2 c* Y T5 h
selselectect 还记得ewebeditor是怎么过滤asp的么?
# U' s' P: b' T- ]$ [. T n
/ ]& K* ^ l/ W
%53%45%4c%45%43%54 URL编码
) O) {7 f( y8 N5 ^" |
: l) p, J$ E7 c4 l, [7 f0 G
%2553%2545%254c%2545%2543%2554 对上面的每个%后加了一个25
3 B: @* z; v# l- W) q- a
, f# |' x o! X$ u
3,使用SQL注释符
5 J9 p1 v& N7 `# W3 n, h
( E& F4 ~% [/ I4 H" M
A,使用注释来冒充注入的数据中的空格。
+ |; t$ m, x" z" F0 Z+ a* O, H
% F( a0 L& j/ t
select/*yesu*/username,password/*yesu*/from/*yesu*/admin
4 X8 [, C' g' [
7 t: O2 i: U6 `$ d
/*yesu*/来冒充空格
* ~" Q! `6 _/ z: @; A. j
; N/ b4 z/ e( X) }/ q( H
B,使用注释来避开某些注入的确认过滤。
/ I! x0 x2 f: m& ^6 r
. T" X2 Y9 ^0 u$ X1 L# u
SEL/*yesu*/ECT username,password fr/*yesu*/om admin
3 i: r( g( U8 U6 |) K8 |' Q
4 C( q7 X( ]3 n, Q" N& D
4,处理被阻止的字符串
: T& d2 m- N5 Q
; s8 i8 i4 K6 s4 r; _8 c5 O2 A" l
比如,程序阻止了admin,因为怕攻击者注入admin表单中的数据。
; G1 l* O' [/ B8 A" P: b G' E+ W( T
& ?' `5 |6 [' F3 O' r1 h3 i" B8 k
我们可以这样
. w- r; f* w k" A
9 q1 h$ ?! T5 G/ R- W
A,oracle数据库: ‘adm’||’in’
' C1 i1 V6 ]* D, A
' b. }) \' S" i5 W
B,MSSQL数据库: ‘adm’+’in’
% x0 S" t- e, ]1 \0 M
6 T! `7 f" x6 A& h. f
C,MYSQL数据库: concat (‘adm’,’in’)
6 j2 i7 K7 d6 T! W/ [
- M2 \! X4 E5 z: e, e
D,oracle中如果单引号被阻止了,还可以用chr函数
1 H$ W3 I+ q ^
# |" j+ D6 g# v. z
sleect password from admin where username = char(97) || chr(100) || chr(109) || chr(105) || chr(110)
. q/ J. Y. G! B- u& Y) B& x" Q
7 X. d* v1 R' B; T$ K3 e) O
还有其他方法。正在收集中.
6 T8 |3 {0 E0 l' s7 M& K/ W' x1 {
- |5 L6 V- b7 L5 o4 l
欢迎光临 中国网络渗透测试联盟 (https://cobjon.com/)
Powered by Discuz! X3.2