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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-13 09:50:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
SQL注入。有攻有防。知道进攻。才懂得防守.% y8 `  z* [3 V/ s/ P- R( m. U% }

8 D2 Y3 E! f& l有的时候,很容易受到SQL注入攻击的程序,可能会进行输入过滤,用来防止攻击者无限制的利用其中存在的设计缺陷。; M$ t8 C" ]/ _* B' {1 r
% T2 u' M* S. X- w0 v0 j- C
唱出会删除或者净化一些字符,或者阻止常用的sql关键词。5 G+ R- w) o- j0 l% u) W! F
- M5 w+ O9 x+ O% v1 Z
我们通常有以下几种技巧,去避开这些过滤。% r9 ^, V5 M0 H1 z

- `  g. Z$ a4 w  {( r' r2 c1,避免使用被阻止的字符,即不使用这些字符仍然达到攻击目的。4 K$ v  d( K& q: s

" w3 _: K8 R7 _1 KA,如果注入一个数字数据字段,就不需要使用单引号。7 l; ~2 e! X$ ?6 H5 H* _- T3 k

/ _9 f/ _$ l: ]% k6 B- JB,输入注释符号被阻止使用,我们可以设计注入的数据,既不破坏周围的查询语法。
: L! t& ^( o6 q7 |% R2 J
$ H; d7 l  g9 H+ G; A8 E! z' {! s比如, ?id=1′ 这里存在注入,过滤了注释符合,我们可以输入 ?id=1′ or ‘a’=’a; F; c2 w! z* W% i& p2 [6 F

* b+ M5 D. g$ U: Z2 U目的其实很简单,就是把后面的单引号给闭合掉。
, K, V8 f1 \+ m+ b0 ~
& p5 L1 h8 u) y7 }C,在一个MSSQL注入中注入批量查询的时候,不必使用分号分隔符。
% K5 Z' U0 y. Z) [' A2 n  I& F- b3 h; ~
只要纠正所有批量查询的语法,无论你是否使用分号,查询的解析器依然能正确的去解释它们的。$ G3 R1 F" ]6 g3 }7 C
3 Z) s7 D8 k* l. T. x: Q+ W0 C
2,避免使用简单确认, \2 C" A; H+ C; T

# r0 T, u5 p( L; ?$ E4 Y6 B一些输入确认机制使用一个简单的黑名单,组织或删除任何出现在这个名单中的数据,比如防注入程序。
4 l- @9 t$ j& k' T6 ?5 W) V4 _  ?0 B/ @
这一般要看这个机制是否做的足够的好了,黑名单是否足够能确保安全。如果只是简单的黑名单,那也有机会突破的。1 Z, \. N! t$ G0 ]

9 _% ^" a$ s7 o4 V3 _$ O; C" hA,如果select关键词被阻止或删除
5 h0 e- s- j# U% S
( T& S) {# A0 M( Z6 K  w; K; ?' f5 F  y我们可以输入:
+ E/ k# F, j( [* [% Q( l3 c" m
% a) }! o' V5 T) h- sSeLeCt       注意大小写
! S# o% ~% P) `5 A, F) k( y9 G4 i) n
selselectect    还记得ewebeditor是怎么过滤asp的么?
8 q0 j( N$ k9 J$ j9 ]$ x; |
' N9 w0 K3 q5 C4 F5 {%53%45%4c%45%43%54                        URL编码
1 _3 I/ E7 s" y/ {5 I6 J  B  y% v/ f; ~
%2553%2545%254c%2545%2543%2554    对上面的每个%后加了一个25: P, O' [8 K- t2 \
/ ^/ Y; E* e8 n- T
3,使用SQL注释符
' R4 P$ T1 t( S% L6 f! s* F
& u2 V/ P3 O6 w7 B4 i5 hA,使用注释来冒充注入的数据中的空格。& Z1 ^; Y' o( u/ ]7 x

$ u: D( a0 i0 Nselect/*yesu*/username,password/*yesu*/from/*yesu*/admin8 h1 q0 ]+ y$ U" H& `+ K# }
' e" T3 X9 b9 u% c7 C, T
/*yesu*/来冒充空格
# z. r0 v6 M, @& U7 Q( n2 n3 |; ~/ D
B,使用注释来避开某些注入的确认过滤。
  R; p! o6 l, P8 I: N1 w; @8 s, x5 [' c  K. k& ^
SEL/*yesu*/ECT username,password fr/*yesu*/om admin
  D! V, D+ O, Y( L
/ w6 D. j9 V# Q/ l& R4,处理被阻止的字符串" ?2 U  @8 a0 l% Z; i
, [5 n1 G; q" e8 p; g
比如,程序阻止了admin,因为怕攻击者注入admin表单中的数据。
8 |; X0 M( _" K( H( N- B( b! ]8 k; S$ o4 @
我们可以这样) e6 |# b" _7 G& H* z+ M8 G" d
+ {& P! U5 G5 [( I% c) l" M
A,oracle数据库: ‘adm’||’in’
7 i  ]" j) k1 Z/ [" d; p5 y' L5 Z/ _3 ~" k& p; e- S9 I
B,MSSQL数据库: ‘adm’+’in’6 r6 F: Y9 L( Y  o& p0 `* `- D

: F4 t) M+ N9 q3 b1 @% aC,MYSQL数据库: concat (‘adm’,’in’)+ x0 z$ h! m2 _+ S4 _7 m9 ^7 f; d
# b; F1 @0 T( i
D,oracle中如果单引号被阻止了,还可以用chr函数
0 H# W' Z6 l% k, j* F1 @3 g2 w
sleect password from admin where username = char(97) || chr(100) || chr(109) || chr(105) || chr(110)
' L0 O6 c% L0 Y/ k. L
& g2 @9 _! v, w4 @; [0 S# m还有其他方法。正在收集中.
5 `8 b7 [1 R8 v" j( v" e# i! `1 Z7 t) ^3 y. N
回复

使用道具 举报

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

本版积分规则

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