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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-13 09:50:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
SQL注入。有攻有防。知道进攻。才懂得防守.+ T3 c; M1 m& Y' ]1 I# d( K

/ E: S- B. T) E9 N有的时候,很容易受到SQL注入攻击的程序,可能会进行输入过滤,用来防止攻击者无限制的利用其中存在的设计缺陷。  _0 i+ C5 ~- f1 {' t- z

3 M- E! @, {  p5 {唱出会删除或者净化一些字符,或者阻止常用的sql关键词。$ l0 ~$ c% ~9 l6 _

  g2 b8 I" w  l) Z! x我们通常有以下几种技巧,去避开这些过滤。
$ {. G' e0 `  s- p
& L: G' M3 d) E9 J$ Y! @1,避免使用被阻止的字符,即不使用这些字符仍然达到攻击目的。# t# f8 a' L9 p) h8 L4 ~! \

& m  Y- B3 Y. p, AA,如果注入一个数字数据字段,就不需要使用单引号。
$ P' \: a7 n; r; F( d0 t* U1 D
& d5 M1 y7 F' g  ^! N$ x7 WB,输入注释符号被阻止使用,我们可以设计注入的数据,既不破坏周围的查询语法。
& s/ w( k; s. Q7 P$ L9 ~# e( h0 |; l9 H
比如, ?id=1′ 这里存在注入,过滤了注释符合,我们可以输入 ?id=1′ or ‘a’=’a- R3 b* v+ b8 z  R. v
! j9 e- N3 x2 T: i  }. r% [, O
目的其实很简单,就是把后面的单引号给闭合掉。
% [7 D0 i. I/ x' \4 ~" r% g, n: j) [* V) J
C,在一个MSSQL注入中注入批量查询的时候,不必使用分号分隔符。
( Z9 a! g* i8 ~( R# a- j2 U1 {8 P% Y2 }% J' z
只要纠正所有批量查询的语法,无论你是否使用分号,查询的解析器依然能正确的去解释它们的。# }# H1 o5 S' x& {3 C$ S

/ e5 z; n1 E2 A+ k3 a2,避免使用简单确认- \  J8 D& l: r
0 c6 S5 p! S, o" V1 ^# C
一些输入确认机制使用一个简单的黑名单,组织或删除任何出现在这个名单中的数据,比如防注入程序。8 W2 K4 w2 j; O6 ]  a

' b3 _- E) o( s0 |6 {这一般要看这个机制是否做的足够的好了,黑名单是否足够能确保安全。如果只是简单的黑名单,那也有机会突破的。1 L# D' j% A1 d/ v: m! V! _" c) @

; I- @6 _, u: P5 \A,如果select关键词被阻止或删除/ k& a% n, H. D* ?4 o6 I/ H- X
8 _$ d$ G7 g: \- V/ p
我们可以输入:; }( z' a1 Y' N" o7 a6 v
& B0 ]3 \( Z* M" J6 X3 I
SeLeCt       注意大小写
; _7 o% B: U% I4 p0 z7 x! @2 y9 a1 r! s. P
selselectect    还记得ewebeditor是怎么过滤asp的么?( r  n  r$ _9 F; e3 H! P) v6 ^
7 ?2 t: y% X& R! G4 b$ \7 Q
%53%45%4c%45%43%54                        URL编码
1 @! r2 W) p9 U9 w+ |# g7 D# V" x! Q+ g9 C7 O! }6 S
%2553%2545%254c%2545%2543%2554    对上面的每个%后加了一个25
. Y* x- Z/ n& i. ?  H( c& W+ v' b0 K
- z' w4 B" u, m1 z3,使用SQL注释符
3 O% I# H& x$ v( C- Z3 w/ ?1 Q4 T
A,使用注释来冒充注入的数据中的空格。6 `& s. N! G  H% {
! n, d8 O6 b- L& c4 a. @+ q
select/*yesu*/username,password/*yesu*/from/*yesu*/admin6 Q6 W- E2 ]3 O& i- f8 d

. O+ |/ z: y6 o2 w/*yesu*/来冒充空格
' F8 r. j+ U5 D$ A& y8 L6 T/ d" R: U2 H6 N
B,使用注释来避开某些注入的确认过滤。$ C7 a# C  B  |& X2 Z  O5 @9 Y
: {, U7 O, r5 n1 S6 d# c
SEL/*yesu*/ECT username,password fr/*yesu*/om admin1 ^0 r0 ~( n* L# x2 e6 R4 f

( p, ?* i+ L2 N( {% @5 T4,处理被阻止的字符串
9 }: P, |7 J6 E$ E4 i  w4 a* \9 _; {+ i: Y
比如,程序阻止了admin,因为怕攻击者注入admin表单中的数据。
( p& ]/ [- b% A7 v' }8 ~# M( z
3 ]8 Q! P( b0 c5 u" s/ |我们可以这样
# e0 P- Q# t6 x5 f  k8 R* b" m  d4 P; s( g% ~- Q
A,oracle数据库: ‘adm’||’in’
8 N7 `% O, p. u0 u$ n2 g, q1 a& A% e! d4 P' O" _0 |- `$ f
B,MSSQL数据库: ‘adm’+’in’5 i8 q. ?8 k* a' f- G

. o; r- @! B+ E" y0 Y1 X! h* AC,MYSQL数据库: concat (‘adm’,’in’)
5 q( c! G5 t/ m. U( o
. ~$ ^' e8 V% A( o* w. o% q% HD,oracle中如果单引号被阻止了,还可以用chr函数& G; u1 {; }2 N/ ^2 }! [

- a/ U. o9 p6 q, Lsleect password from admin where username = char(97) || chr(100) || chr(109) || chr(105) || chr(110)
, K! z* e0 F; R9 y$ Q9 L+ K& ]1 L4 v: J6 ~3 C' V5 P8 u
还有其他方法。正在收集中.6 P. `7 P/ A" K/ C/ d: H

: U! Y# k2 W% E, P+ l% n$ g
回复

使用道具 举报

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

本版积分规则

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