中国网络渗透测试联盟

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

作者: admin    时间: 2013-1-13 09:50
标题: PHP中SQL注入,绕开过滤,照样注入
SQL注入。有攻有防。知道进攻。才懂得防守.
0 ]  f& K& `5 y# Y: i- Q/ n( _7 M5 X* R2 ?: j  K/ L, I$ p9 s0 O
有的时候,很容易受到SQL注入攻击的程序,可能会进行输入过滤,用来防止攻击者无限制的利用其中存在的设计缺陷。
4 r, D, ]( S: Q! s  J0 ?4 Y
+ T- }) `; V& |7 p0 w" O1 T唱出会删除或者净化一些字符,或者阻止常用的sql关键词。( e# b. e+ M" M# {

) {  N4 W* [9 n0 v/ z我们通常有以下几种技巧,去避开这些过滤。
' s" ^" f4 F5 |8 z
0 K9 [/ X3 y& U& ?; Z6 x# E1,避免使用被阻止的字符,即不使用这些字符仍然达到攻击目的。5 v/ S" a, R1 B. B+ L) ?7 }
# \& N% n% @& U
A,如果注入一个数字数据字段,就不需要使用单引号。- d# l& G; \% g  p1 a, Q( C6 v

1 G5 e6 ?. T, d) u: @5 hB,输入注释符号被阻止使用,我们可以设计注入的数据,既不破坏周围的查询语法。
9 R, |5 H# E3 J  J* e
* y0 p* V8 E. E; I" h6 E* j比如, ?id=1′ 这里存在注入,过滤了注释符合,我们可以输入 ?id=1′ or ‘a’=’a
, k7 y' e4 e3 f6 o( J/ f5 H
8 z" x! F5 K0 w; q目的其实很简单,就是把后面的单引号给闭合掉。/ n8 O/ R. Y. }  b& Z

4 e/ K( e" _0 n' w1 C# PC,在一个MSSQL注入中注入批量查询的时候,不必使用分号分隔符。* M: a( B6 J+ q8 e( z/ H0 Z: }
. v  \: c0 ?9 E6 t7 s, {! {% G
只要纠正所有批量查询的语法,无论你是否使用分号,查询的解析器依然能正确的去解释它们的。
+ L4 W- y. m' M% H3 W$ M0 X) h' l
8 f! L9 D2 [, F( z2 ~5 N; e  d, ?6 S2,避免使用简单确认3 V# r) F9 O1 i& I! w
0 Q5 K. K) w" `, T8 s) N* r: ]
一些输入确认机制使用一个简单的黑名单,组织或删除任何出现在这个名单中的数据,比如防注入程序。
) W; B" L( U1 P( [5 ^2 r  C
& Z" p3 A6 D7 k' y% q% t这一般要看这个机制是否做的足够的好了,黑名单是否足够能确保安全。如果只是简单的黑名单,那也有机会突破的。) v* E. w7 b& `
6 T: i4 s) s2 d' ~# x; U/ |; C
A,如果select关键词被阻止或删除
' V1 Q+ y; M( z- I) g
- `9 r, k  E% W我们可以输入:; E* Q' m- B: J1 C; v( t7 l
. u- F  k7 k" M/ N& y
SeLeCt       注意大小写
- k; Z# H) w3 J. U
( O8 H) n  U8 I, l* Hselselectect    还记得ewebeditor是怎么过滤asp的么?
) c7 C! S3 ^( x  V$ H! J
3 ~' p2 [' ^% x! z& f5 T# D%53%45%4c%45%43%54                        URL编码
# e8 X5 Q" x' Q. u& F" ?3 w$ o6 ]' x& o. I( E
%2553%2545%254c%2545%2543%2554    对上面的每个%后加了一个25
9 j( }0 k0 B1 S: m! T) W; c* \2 _
6 X( C9 e! T& D5 M, m. z5 d3 x3,使用SQL注释符5 P7 e% x+ O' ?9 @$ t( Q
; ~6 L' T0 R. J
A,使用注释来冒充注入的数据中的空格。
* y, h# W3 J, i5 N
( w- j9 F7 w& X3 e. r- r7 lselect/*yesu*/username,password/*yesu*/from/*yesu*/admin# @& p2 \- ]" M% q9 C0 E

* t$ g. O* x' `& ?( [* D/*yesu*/来冒充空格
2 c6 v9 j6 b5 Z2 F6 h/ f# }/ w7 p+ y$ F: Q) j
B,使用注释来避开某些注入的确认过滤。+ c" U# z( |4 L2 @2 V- |
, |, p5 y* |, i& e. {. d2 Z
SEL/*yesu*/ECT username,password fr/*yesu*/om admin
: s" `8 u- W* L6 a- h7 D$ t" H! m" j: V; k# Q' K( w+ o/ I
4,处理被阻止的字符串0 E5 E4 m! [6 u; F. l/ f: }
) \! y, {9 C/ r( J0 C2 ~
比如,程序阻止了admin,因为怕攻击者注入admin表单中的数据。  X/ ^9 {- m. Y6 i- v

2 B* o' {# X0 J8 u我们可以这样7 g  a. h7 o) P/ d7 r

$ U; E" z' C$ X& o9 uA,oracle数据库: ‘adm’||’in’
. K; O. }3 j8 h& G5 J. [/ K5 ?) M( v+ U
B,MSSQL数据库: ‘adm’+’in’
9 X1 @6 ^8 ~+ V5 V# F3 Z
% }( W' [' ~& ^, {/ OC,MYSQL数据库: concat (‘adm’,’in’)
8 _/ E% k$ [! O& l' O7 i8 L, Z9 K5 Q4 l% f0 j, i
D,oracle中如果单引号被阻止了,还可以用chr函数3 l, `* O$ Q: X
, l1 g3 c1 T+ n' s1 y' L  u
sleect password from admin where username = char(97) || chr(100) || chr(109) || chr(105) || chr(110)
) X" A. U( D) v9 ]& P1 X( c  @& Q3 R# ~
还有其他方法。正在收集中.5 _4 B6 ~/ @# t+ @1 m* e5 S/ e- C* |7 G
! k5 H1 C3 o4 X. M9 o) g





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