中国网络渗透测试联盟

标题: PHP中SQL注入,绕开过滤,照样注入 [打印本页]

作者: admin    时间: 2013-1-13 09:50
标题: PHP中SQL注入,绕开过滤,照样注入
SQL注入。有攻有防。知道进攻。才懂得防守.% |! p* d; P, C- N7 e9 ^5 K0 }

' \) L6 k9 ~$ K9 a2 ]2 u1 ~有的时候,很容易受到SQL注入攻击的程序,可能会进行输入过滤,用来防止攻击者无限制的利用其中存在的设计缺陷。
  p& ~& d3 J! r1 s; p: S9 d5 p! R" D
! I9 K' F  g  W3 @唱出会删除或者净化一些字符,或者阻止常用的sql关键词。% W# a, h6 b. [# T

4 v0 l( [/ W9 N; {8 o  n3 m我们通常有以下几种技巧,去避开这些过滤。, n6 l& q5 a' y* Y& F  |
) |' e) }: Q7 S/ e0 C
1,避免使用被阻止的字符,即不使用这些字符仍然达到攻击目的。
9 R3 a3 r7 _4 M8 g
7 j; D1 Q' [9 }4 {9 m. SA,如果注入一个数字数据字段,就不需要使用单引号。
- B1 T. \* F0 k9 j3 F! M1 u8 T" }" P5 r; U2 U* S# k
B,输入注释符号被阻止使用,我们可以设计注入的数据,既不破坏周围的查询语法。# S9 f1 r2 O. i' Y
' J2 s; C$ _  s/ ]9 _
比如, ?id=1′ 这里存在注入,过滤了注释符合,我们可以输入 ?id=1′ or ‘a’=’a7 A4 G- c: \+ e8 a% B

7 b1 D+ A8 K9 `1 ]目的其实很简单,就是把后面的单引号给闭合掉。
+ M/ R' E9 K7 g" P2 x% Q6 j: g5 w8 n$ t( r3 m$ w
C,在一个MSSQL注入中注入批量查询的时候,不必使用分号分隔符。
+ W. u# f5 h# J8 P3 \9 t! ^- f: _9 P9 E3 |; E, b4 g! h+ p' z2 G" u& x
只要纠正所有批量查询的语法,无论你是否使用分号,查询的解析器依然能正确的去解释它们的。9 s1 ]& `2 ~/ e) \3 ]; m

2 q/ x5 E4 f1 {4 H; {  y2,避免使用简单确认
  E2 l  N  j# }8 B, S. X+ S. T& K5 ~& T7 o; C" r  }2 j8 W! f
一些输入确认机制使用一个简单的黑名单,组织或删除任何出现在这个名单中的数据,比如防注入程序。
4 }6 X0 k3 d0 i" ~" j+ H+ x! B  g+ O/ r+ l+ v$ B
这一般要看这个机制是否做的足够的好了,黑名单是否足够能确保安全。如果只是简单的黑名单,那也有机会突破的。
5 |& S, C0 k5 W: V9 O
7 V9 H( z& o4 [- I" ]: dA,如果select关键词被阻止或删除2 l$ K$ c- {  {  u
! [! G+ C; N5 f7 e  a
我们可以输入:  T8 v' G) l8 v; {$ ~/ c; [

+ i+ b8 P$ o. K* h7 aSeLeCt       注意大小写( }) g0 p0 S7 N
& F: q4 J" C6 O0 R: G* x
selselectect    还记得ewebeditor是怎么过滤asp的么?
; ]  y# u0 \% z0 O( l! _' C1 d: }9 W. `; }0 w6 L/ i0 L
%53%45%4c%45%43%54                        URL编码% e) k1 X! ^8 \2 U
$ T0 D4 K* @7 x7 V& P$ i
%2553%2545%254c%2545%2543%2554    对上面的每个%后加了一个25/ K; U1 s- q8 A- }6 b

8 n- |( v% I  X1 ~7 R3,使用SQL注释符0 a& I6 J; y! {: \; j' j  W

+ C3 i, l. }. S( @3 M) h; M7 G2 KA,使用注释来冒充注入的数据中的空格。& L8 e# n+ Z3 o5 i% X

! F- T2 _% z2 T5 j" Dselect/*yesu*/username,password/*yesu*/from/*yesu*/admin7 ]( u! h8 D# E4 C! u
  x( a' U7 j/ ?( u- g1 U. w. `
/*yesu*/来冒充空格
0 P4 [& i' A; w+ l7 R4 `  J4 I5 H! w
B,使用注释来避开某些注入的确认过滤。
. N) s* H# r+ s7 D% J
" ^0 G# l* ^( Q7 |9 J, Y% Q5 n" FSEL/*yesu*/ECT username,password fr/*yesu*/om admin
8 P5 r- n  q0 d6 L8 U" B- ~; t- T- S# V) b: W6 k
4,处理被阻止的字符串
0 _% v$ A4 F, Z+ _# C' I7 g$ T! g- g4 O+ i
比如,程序阻止了admin,因为怕攻击者注入admin表单中的数据。
( y& ?* `# h/ n& D( |! K
' W8 j5 |. b) Y5 R- \我们可以这样3 e" k6 _( R3 l- `/ {  G- S
" i+ @6 S! Z, g; s
A,oracle数据库: ‘adm’||’in’
$ Y8 m" N7 A# r" r5 ]3 U% ?& ^0 I5 {2 E$ D& ]
B,MSSQL数据库: ‘adm’+’in’
, W% o! m# s6 e* n1 Q4 [; R
' B- F1 d) u2 W3 u: G- @0 c5 VC,MYSQL数据库: concat (‘adm’,’in’): X8 Q/ Y3 x0 u6 I

, _2 O% I; G, o5 b( ~& z4 ?D,oracle中如果单引号被阻止了,还可以用chr函数# x. @3 j9 [. b( `7 ~
9 [* w6 H, U) l) Z7 J% j! l
sleect password from admin where username = char(97) || chr(100) || chr(109) || chr(105) || chr(110)
/ x( ^+ u) P& Y, S1 u( s9 @: a3 D2 E4 \$ |. U+ \# ~
还有其他方法。正在收集中.6 g9 l6 S+ B0 R4 Z3 b' \

" G0 @( c' {1 S8 G+ ~6 M- f* g




欢迎光临 中国网络渗透测试联盟 (https://cobjon.com/) Powered by Discuz! X3.2