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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-13 09:50:58 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
SQL注入。有攻有防。知道进攻。才懂得防守.6 \! [  @1 _4 A( G( }) z
2 G+ a; R' o( I! |. N- U
有的时候,很容易受到SQL注入攻击的程序,可能会进行输入过滤,用来防止攻击者无限制的利用其中存在的设计缺陷。3 F& g0 w3 b3 T
7 q  y2 }- Z- A4 z! V
唱出会删除或者净化一些字符,或者阻止常用的sql关键词。  j8 X+ Q- y1 V/ S( A" r' H

- y; x2 Y0 W. T0 Y+ `. d/ N1 g我们通常有以下几种技巧,去避开这些过滤。9 l% W3 k0 a+ o; ]# d
: P1 i2 b$ P: J7 D& e  @9 D
1,避免使用被阻止的字符,即不使用这些字符仍然达到攻击目的。) S* T5 A# z3 X
* ?$ j7 {: U; ~+ j2 `5 c4 m7 H7 n
A,如果注入一个数字数据字段,就不需要使用单引号。8 Z) }5 t$ s( b, `0 p5 n5 F' e
9 P% c) a/ I" P% }- E+ X
B,输入注释符号被阻止使用,我们可以设计注入的数据,既不破坏周围的查询语法。( Q6 f6 i& c( U6 @
! C1 M3 }, i, c6 y# l  l
比如, ?id=1′ 这里存在注入,过滤了注释符合,我们可以输入 ?id=1′ or ‘a’=’a
3 M; y" I' ~1 ~8 w8 z3 Q$ b4 E
* O5 ~: Q" A9 I9 z: X/ x, H, y5 A目的其实很简单,就是把后面的单引号给闭合掉。: N: V9 c9 v: z& Z/ I4 E

& [4 `6 K$ |8 b" yC,在一个MSSQL注入中注入批量查询的时候,不必使用分号分隔符。9 L6 N1 }- U: k7 u+ H6 x+ c
, d6 l0 t, o! K8 Y, G$ ^
只要纠正所有批量查询的语法,无论你是否使用分号,查询的解析器依然能正确的去解释它们的。
  U9 `6 b( W# W! @3 O" n7 r/ f6 k( k4 T
2,避免使用简单确认
- h0 n. n! [2 v! G" z# G+ o: u" P* z. l6 J
一些输入确认机制使用一个简单的黑名单,组织或删除任何出现在这个名单中的数据,比如防注入程序。
* {+ j9 @# [' K, m  r( l6 y3 Q- R
这一般要看这个机制是否做的足够的好了,黑名单是否足够能确保安全。如果只是简单的黑名单,那也有机会突破的。+ P" _' m; o- ^) Q5 p

3 J7 K( R  r+ r* CA,如果select关键词被阻止或删除
; o: w( e2 x  a1 c+ X# z) f8 j$ l( U$ s/ e' p
我们可以输入:
" x8 F" D$ ~7 N5 J
  W+ Y/ J) ^5 J, G# aSeLeCt       注意大小写, w1 p9 a4 Y6 T  ]# p6 L8 g
2 r! E. }1 ~7 |  |- I
selselectect    还记得ewebeditor是怎么过滤asp的么?
3 b" ^8 @. G9 e9 e3 ~! x
2 M. D! N% l' E5 W! I8 d%53%45%4c%45%43%54                        URL编码% m! f7 g5 A  @+ l* r

3 P# k, E: s& o1 F! p+ _' {%2553%2545%254c%2545%2543%2554    对上面的每个%后加了一个25+ D4 ^2 Z/ }  B3 r' ~" b! @' E
% A# L1 L) R) c. a$ Q% Z2 Y! J8 v' _
3,使用SQL注释符. H8 D. K: y/ G) u6 L1 R' p

/ c  b% `1 h" J3 R2 x% oA,使用注释来冒充注入的数据中的空格。# @( `6 n9 {0 o) Z

2 ~) o. k0 y: X9 a, _# Pselect/*yesu*/username,password/*yesu*/from/*yesu*/admin$ {5 ?, a( Z9 |* F6 O, |' h( o3 ?1 p

* m- H5 D" A4 K0 y* V/*yesu*/来冒充空格( q$ x$ N. y! O+ x6 w
+ b" E* v0 {0 Q
B,使用注释来避开某些注入的确认过滤。
9 w# b. e4 N5 u, k
' Y  T" q3 s9 TSEL/*yesu*/ECT username,password fr/*yesu*/om admin
  ?1 I2 C, x7 H3 W5 C! w' Z3 `* z; D3 e7 n7 Y. y% f8 c
4,处理被阻止的字符串
5 w: F6 h! I" _* h( K8 m# U: f/ x) q, @( Q( ]- h* i/ {7 p
比如,程序阻止了admin,因为怕攻击者注入admin表单中的数据。
6 u0 A4 p/ a; m1 @% j1 `: {) K& _6 u8 `7 r. E
我们可以这样
6 q* Q' M& E, H8 C+ _, r8 k5 E5 c* i# y' q
A,oracle数据库: ‘adm’||’in’# Z6 f. G6 b7 d* f" l) u6 ]
5 ~6 m+ @2 a+ [: }  [( t/ @
B,MSSQL数据库: ‘adm’+’in’6 ^1 Z" c& v  _; H2 F* d/ F8 L
- v% u9 w" y! |7 l- ]2 j
C,MYSQL数据库: concat (‘adm’,’in’)
) j* z. g* R* |; _
2 {" E3 \0 X% q) d2 H' |& nD,oracle中如果单引号被阻止了,还可以用chr函数2 v4 L/ C# f% f' T" l

, O4 i4 ~6 A7 }6 Ssleect password from admin where username = char(97) || chr(100) || chr(109) || chr(105) || chr(110)$ g/ P4 i# c. t/ [% e

" Y5 F$ ]: [9 [: u6 b, v" I  `还有其他方法。正在收集中.: o9 D0 s# J# {- P4 e* R7 O# u* X

( [0 i8 {$ c/ Y* I3 G
回复

使用道具 举报

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

本版积分规则

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