找回密码
 立即注册
查看: 2903|回复: 0
打印 上一主题 下一主题

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-13 09:50:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
SQL注入。有攻有防。知道进攻。才懂得防守.
/ @% I& f" K' N+ B: L
8 N4 K' E& _7 G$ E有的时候,很容易受到SQL注入攻击的程序,可能会进行输入过滤,用来防止攻击者无限制的利用其中存在的设计缺陷。
* u. m, j7 ]# Z$ S
# K# v, m; B" W, ]; w' C" K唱出会删除或者净化一些字符,或者阻止常用的sql关键词。, H- A. F; x/ l% _5 Z
/ Q/ c; V- C( y  l8 r
我们通常有以下几种技巧,去避开这些过滤。
3 Y& k# ?; M3 O. I! D# f- [2 ?/ e. F0 w  P3 d+ C
1,避免使用被阻止的字符,即不使用这些字符仍然达到攻击目的。
* I  r% J$ F6 j: x
( Q  g; k! ?9 ~$ h# h  SA,如果注入一个数字数据字段,就不需要使用单引号。& d+ d( f6 R! @7 o  Z% O8 z

9 d9 g' K5 E6 D  {  U) E% R6 hB,输入注释符号被阻止使用,我们可以设计注入的数据,既不破坏周围的查询语法。
- B9 m# N2 ~- H7 l0 Y; {6 K  \# ?4 B3 m0 O& h1 j; l
比如, ?id=1′ 这里存在注入,过滤了注释符合,我们可以输入 ?id=1′ or ‘a’=’a
9 Q4 u8 N& Z$ n. j5 p& ~; e! G" o2 [* C% b+ E6 l* |7 e
目的其实很简单,就是把后面的单引号给闭合掉。: z& }( j4 A' E2 J: F1 j

( G6 R) Q' z% z6 f2 |) a2 RC,在一个MSSQL注入中注入批量查询的时候,不必使用分号分隔符。
" v# I7 A4 F) U+ \+ W
1 S, x6 A/ I( m只要纠正所有批量查询的语法,无论你是否使用分号,查询的解析器依然能正确的去解释它们的。
0 b* B( Z6 Y; Q, [* D' ?/ L2 ]# u; w. e8 q/ s4 m  B4 I2 ?
2,避免使用简单确认, |$ W5 ^8 J9 U& W
* z5 s* _/ Z9 \4 G
一些输入确认机制使用一个简单的黑名单,组织或删除任何出现在这个名单中的数据,比如防注入程序。
$ |: o, u' m* K' K2 B8 m7 Y! {8 i  `- F) s4 e* T# H
这一般要看这个机制是否做的足够的好了,黑名单是否足够能确保安全。如果只是简单的黑名单,那也有机会突破的。
$ P3 m0 B, M& }& [* h  |1 p' r( a0 |) W9 i7 A9 t, |  [
A,如果select关键词被阻止或删除; ]% Y6 ^9 h$ g& S$ ^. I
. O, }: t+ K8 Z; n4 c
我们可以输入:
; O& i. c1 c* D! g) m: b* j' A2 X! R( U' A$ l
SeLeCt       注意大小写
( n- N" H# H! j# r% }5 y! t
/ o9 B/ I' {7 v& D( dselselectect    还记得ewebeditor是怎么过滤asp的么?  {/ T2 t; [9 q

4 o7 o2 M3 ]- x9 i: f%53%45%4c%45%43%54                        URL编码- D& Z0 I" ~6 {, w' }; _- [
; J: R+ j& k/ O% _" S( F! r4 n
%2553%2545%254c%2545%2543%2554    对上面的每个%后加了一个25: M) T- @+ r7 f# W0 M* U, u7 O% |
5 N. ?1 S% m3 U0 F, ]
3,使用SQL注释符
7 v7 `# P/ t% h% @: U! m6 U" s1 {6 l# ^$ `5 |0 m
A,使用注释来冒充注入的数据中的空格。! E" l5 H6 I# @- m( O- i( F/ s

6 `! z; ~. H4 z3 S( `* iselect/*yesu*/username,password/*yesu*/from/*yesu*/admin6 Y, D. B: W, @$ P9 j, J7 A' O: J3 y( w
' P, W! B: i9 G( y' ]* {) p
/*yesu*/来冒充空格
/ w2 i8 M( ]+ i
( h7 x, Y3 E3 ZB,使用注释来避开某些注入的确认过滤。
  o! A/ z" Y! a7 u. ^) C' A4 Y
1 ?7 H' V+ G  PSEL/*yesu*/ECT username,password fr/*yesu*/om admin9 K2 B6 f/ C& M

" T+ b% T" S: d- _8 ]6 r4,处理被阻止的字符串8 b5 R7 n- ^0 I+ q* G* @
. ^; s( t7 H  Q/ g5 z& `
比如,程序阻止了admin,因为怕攻击者注入admin表单中的数据。; y/ q8 _) r/ |7 ?' X

- `* o8 x( F+ ?! N" R我们可以这样: P! U$ s1 ?- [6 Q* z- ]
8 |7 M+ X! @- W6 A$ ~6 m
A,oracle数据库: ‘adm’||’in’
2 W9 _3 ~1 t: g( t# q. I* K. N; `/ W) O$ Z6 \" H
B,MSSQL数据库: ‘adm’+’in’
* R- f9 T; f" d$ E- q6 q2 v& Q/ j1 S7 b: B
C,MYSQL数据库: concat (‘adm’,’in’)
, u8 S. p; Z5 E5 [4 w  B
" [* X# C4 t5 U: ?0 Q% z; B* m. jD,oracle中如果单引号被阻止了,还可以用chr函数* x2 H0 F; [9 f# X* t

# z" D$ `( P& {# D; F0 e. W( K9 Fsleect password from admin where username = char(97) || chr(100) || chr(109) || chr(105) || chr(110)) g* i3 r3 G/ F; ~

+ t" I0 U$ ^6 f4 i还有其他方法。正在收集中.
0 `" [- ?, v8 N, O5 x) M/ |4 J+ M
/ d* j6 @) Q, {; _; R7 B! k
回复

使用道具 举报

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

本版积分规则

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