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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-13 09:50:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
SQL注入。有攻有防。知道进攻。才懂得防守.
- T* h$ V8 U) i8 }
' Q# n2 r0 P. W( O有的时候,很容易受到SQL注入攻击的程序,可能会进行输入过滤,用来防止攻击者无限制的利用其中存在的设计缺陷。
; C" l& e( ~- x, H9 r0 \3 g' E4 U6 H
唱出会删除或者净化一些字符,或者阻止常用的sql关键词。
  N9 X# c. }- [) E! w
! E- Y& o. _+ _- Z' e" K( A我们通常有以下几种技巧,去避开这些过滤。5 r, C( D# D. `# t+ Z8 E
2 _' o. ^: @, _% Z& Q
1,避免使用被阻止的字符,即不使用这些字符仍然达到攻击目的。9 @2 v5 o' i8 M3 y) {3 O
, b: _" P- y2 v. \0 j+ f5 ]0 h1 n
A,如果注入一个数字数据字段,就不需要使用单引号。
+ x$ }9 e9 f9 s2 d
: S4 [$ Q4 L9 ]$ NB,输入注释符号被阻止使用,我们可以设计注入的数据,既不破坏周围的查询语法。) o9 V* [! b) c' A* R& X5 J0 {

# \, D1 b; {  A7 X2 X  o比如, ?id=1′ 这里存在注入,过滤了注释符合,我们可以输入 ?id=1′ or ‘a’=’a4 L) B. d5 I/ C

$ Q5 v0 f+ p" d目的其实很简单,就是把后面的单引号给闭合掉。, j5 Y& z% i6 |& ^

( l, j  j/ y- t" P! Y9 u( RC,在一个MSSQL注入中注入批量查询的时候,不必使用分号分隔符。
4 h! ?3 u! K5 D2 N! M/ z+ t0 k. J
; V; i$ W! Q% S只要纠正所有批量查询的语法,无论你是否使用分号,查询的解析器依然能正确的去解释它们的。
' f' O  T9 j4 `+ v/ B
1 f. r" M2 p1 ]2,避免使用简单确认1 u% `8 k2 I. g7 L- P5 _3 w  B
  X5 O2 }3 |8 X/ A1 K* y9 @
一些输入确认机制使用一个简单的黑名单,组织或删除任何出现在这个名单中的数据,比如防注入程序。
2 P) J6 K3 H' E; ^( E+ i2 D! G6 R- i
这一般要看这个机制是否做的足够的好了,黑名单是否足够能确保安全。如果只是简单的黑名单,那也有机会突破的。" q! V0 J5 s; d+ c5 H3 V3 P
1 C! T8 q0 I' N' Y
A,如果select关键词被阻止或删除
9 F2 n# ]( R7 ]- P* M! e; U% n- @7 {( t9 r, W7 P* n  M4 _* |, r
我们可以输入:, M  f/ ^1 v' ]: q, W' |1 g$ G

' E2 F+ b3 X) {3 P' }SeLeCt       注意大小写
% I2 \* M3 {: t. I9 }* w
' z6 n* P& T4 e; cselselectect    还记得ewebeditor是怎么过滤asp的么?4 T0 N( ?; b$ G+ f, M* f/ G' ^+ H

9 |3 w" L3 P. x+ x8 @* A. x6 Z%53%45%4c%45%43%54                        URL编码( Q; a5 e  T8 @1 I; F# R9 ]# a

+ G2 n) K; l* M" V9 ~: o+ F%2553%2545%254c%2545%2543%2554    对上面的每个%后加了一个252 D) h9 L( ]. J

. K1 ^8 @/ q. k* t( N  d* @" M$ X3,使用SQL注释符
3 `8 C1 G( ]& h0 u2 U% a' g0 L0 ]: L8 s: t1 ?) Y
A,使用注释来冒充注入的数据中的空格。
- y* V* K4 C" \; ?  A( H5 i6 u' Z, E9 c  _
select/*yesu*/username,password/*yesu*/from/*yesu*/admin
) Y7 H8 }; K* a: w1 ~" m0 t5 F
$ f8 q2 J! T6 V$ _0 R8 x  z; T/*yesu*/来冒充空格
) }( X2 Y+ J# t8 B9 W* E+ w7 Q8 Q5 q% |* r
B,使用注释来避开某些注入的确认过滤。
5 q  P) D0 z1 V# ?6 E& Y/ Q4 g6 x6 U" ^5 g
SEL/*yesu*/ECT username,password fr/*yesu*/om admin  g7 B* |, [8 i7 X, C3 q9 F) h. T

5 h1 _# j6 t/ I! m4,处理被阻止的字符串! u+ R0 y# I) O! t3 v
! s7 t, R$ I& P" g! S: y- B
比如,程序阻止了admin,因为怕攻击者注入admin表单中的数据。
+ a6 k$ U+ a8 z7 K
+ f& }) O' e+ Q; B" [+ `我们可以这样. x1 ^$ Q2 M  c9 |- h- k0 d5 d% K
0 e5 ^. C- y. ?. s
A,oracle数据库: ‘adm’||’in’
! k  H' P/ N! N6 T& z$ Z6 h% o
' c' l4 Z) [$ W( _B,MSSQL数据库: ‘adm’+’in’
; ]0 b! m0 L( p) {6 h8 D+ t$ A' h; g+ k8 @. }, ^
C,MYSQL数据库: concat (‘adm’,’in’)
# k0 T7 s0 w$ W* n4 `6 `5 j
( K! l# J; E0 Q" ^0 q- f8 _* z8 AD,oracle中如果单引号被阻止了,还可以用chr函数. o8 i1 Q% J! E  H

2 H: V3 \1 _( w  J& fsleect password from admin where username = char(97) || chr(100) || chr(109) || chr(105) || chr(110)
- U( R: \" ~& m) e  d4 `# c7 |9 A. E" f  G! f6 t$ S
还有其他方法。正在收集中.
; _! Y0 G$ p1 N" e( J3 m# U
1 u4 R0 J) S- m7 Z: c# j4 b, D$ b
回复

使用道具 举报

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

本版积分规则

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