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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-13 09:50:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
SQL注入。有攻有防。知道进攻。才懂得防守.% Z; _6 E7 y' @  v& K
) A$ e+ w5 U2 ~/ l+ t
有的时候,很容易受到SQL注入攻击的程序,可能会进行输入过滤,用来防止攻击者无限制的利用其中存在的设计缺陷。# H5 j" _0 x; v6 P
6 K" c  A/ U# ?7 v8 ~$ T9 H
唱出会删除或者净化一些字符,或者阻止常用的sql关键词。% Q7 ~9 m- o0 v# H( G. [# \' S% }
; H- U. r2 e2 b: M
我们通常有以下几种技巧,去避开这些过滤。, @+ n  O8 c# \# i6 j0 E
( n# y& a2 u4 W. E0 O/ P, S, ~
1,避免使用被阻止的字符,即不使用这些字符仍然达到攻击目的。) p2 g; W. O+ Z

, s/ W/ M0 }. U. K' DA,如果注入一个数字数据字段,就不需要使用单引号。
5 m8 R. S( x/ u+ U, \: ~
# N! t1 t7 q1 s. tB,输入注释符号被阻止使用,我们可以设计注入的数据,既不破坏周围的查询语法。% P% u% a3 U  h8 Y

3 e2 }% c" m! z. `  b5 ]0 |/ c4 m比如, ?id=1′ 这里存在注入,过滤了注释符合,我们可以输入 ?id=1′ or ‘a’=’a7 l6 e9 i% {7 d

) d: R. V$ S1 P' d$ {& B4 m- U+ m目的其实很简单,就是把后面的单引号给闭合掉。4 d1 `% ~! N: M
/ m% O5 d5 H- A. D2 j
C,在一个MSSQL注入中注入批量查询的时候,不必使用分号分隔符。6 T3 o3 p3 j. _5 i

! E# D% w7 O. U7 h) p( _: ]: _只要纠正所有批量查询的语法,无论你是否使用分号,查询的解析器依然能正确的去解释它们的。# \0 |, E2 S4 j! ^2 V5 W
. a$ q4 d  q$ }9 o* y9 k) t
2,避免使用简单确认0 T" m' i- g0 [# _6 T

% M% s$ @" H' D4 k$ p" M一些输入确认机制使用一个简单的黑名单,组织或删除任何出现在这个名单中的数据,比如防注入程序。0 A- K2 T2 R( K2 b  w2 {  f

0 ?* a6 A  J$ M1 D9 S" }这一般要看这个机制是否做的足够的好了,黑名单是否足够能确保安全。如果只是简单的黑名单,那也有机会突破的。8 {' X" k9 F! S
6 A; G, X. U4 ^  T+ J0 n$ g1 B) r
A,如果select关键词被阻止或删除  ~" [( r0 p. K+ {7 Z; S! C

4 K& }; |% `+ m: c/ G) }- d4 ?我们可以输入:
/ R% J* }. {1 a4 H+ ~; I7 N) A) q: Q( w. Y! m  ?
SeLeCt       注意大小写
$ u. u1 O1 P" F0 |8 T4 P+ l# @/ M0 M3 m# N& m- @5 h: M5 a! |
selselectect    还记得ewebeditor是怎么过滤asp的么?
4 t; b, @- c- W6 I; V8 R% @6 T7 |7 s* h2 m/ R! Y
%53%45%4c%45%43%54                        URL编码
  S' X" c: O& x* N# O' s7 ]. ]. y: R
%2553%2545%254c%2545%2543%2554    对上面的每个%后加了一个25
# _9 O- I) o9 G: a- @1 }
. w7 M' t% ~* e; F8 A3,使用SQL注释符' v  }4 Z3 r: Q  z0 r, I  T

' H7 A, U) ?9 H( ]2 cA,使用注释来冒充注入的数据中的空格。
4 l+ J* B' |/ e+ U2 X/ H5 ^2 o  z. Z' @
select/*yesu*/username,password/*yesu*/from/*yesu*/admin
2 a9 |& j; V9 e3 @  ~# W' ?, f+ o1 c$ y5 ]2 Y- N) h. N1 j
/*yesu*/来冒充空格
; E9 b2 s( \/ y: y  W( U6 Z* H
1 J; b8 x) U. K- m+ [1 d4 s8 WB,使用注释来避开某些注入的确认过滤。
6 q- D: j- G, b5 B; t  w. T3 M4 D: u
SEL/*yesu*/ECT username,password fr/*yesu*/om admin
$ c0 |8 P' K) p/ i1 I- P
7 d1 n  u. ?- ^( h& q4,处理被阻止的字符串) D* ?9 d/ I1 ^

' g0 n, L! j2 `比如,程序阻止了admin,因为怕攻击者注入admin表单中的数据。1 w! d& [; r! x
) I* Y( g0 t0 Y+ b' N2 x' ?
我们可以这样
  m9 W, B7 l0 w8 r) K
1 I% e' i/ @4 I& _: \/ M6 {A,oracle数据库: ‘adm’||’in’0 f0 x, n4 q) s) K+ f: ~

  H/ \; Q3 T" q" c! p7 oB,MSSQL数据库: ‘adm’+’in’$ T, {" i: S3 Y  P5 h* c$ T

8 j, @1 \; v" j, |C,MYSQL数据库: concat (‘adm’,’in’)( U! L. w3 M6 v) l1 x/ j: h

7 N% c1 @6 q9 [5 c+ H9 s$ V$ h" s; X7 sD,oracle中如果单引号被阻止了,还可以用chr函数
+ s) A0 K" R/ ~8 p+ U
, p! j4 h9 C7 U% w( usleect password from admin where username = char(97) || chr(100) || chr(109) || chr(105) || chr(110)4 @# W$ B' D9 W

( t. i1 P( I( T( T# y- M' w还有其他方法。正在收集中.% o/ e$ _1 O/ S3 W3 t* ~
- q% S1 [- V4 t. m% M, S3 Z, r6 R
回复

使用道具 举报

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

本版积分规则

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