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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-13 09:50:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
SQL注入。有攻有防。知道进攻。才懂得防守.
7 ^. R2 r0 Z/ Y, o# C" f4 T! D/ F* A! p9 T# h
有的时候,很容易受到SQL注入攻击的程序,可能会进行输入过滤,用来防止攻击者无限制的利用其中存在的设计缺陷。
/ i$ y8 k/ D+ U5 q! y, X
# e! |* J1 @& J( d唱出会删除或者净化一些字符,或者阻止常用的sql关键词。
# o1 P+ Z7 h0 R6 t; ~; r- ^& }( }
我们通常有以下几种技巧,去避开这些过滤。1 r' A3 E9 y, Q2 h9 b) i
& A; V& o( m9 l$ p1 H; o
1,避免使用被阻止的字符,即不使用这些字符仍然达到攻击目的。; P( G8 |' a! ]( ]+ ^

# N* w9 e$ n+ f2 I: A6 K9 zA,如果注入一个数字数据字段,就不需要使用单引号。* l/ l) Z  A  o4 [* {

" \, J% Z6 r$ J/ X) K" F5 {B,输入注释符号被阻止使用,我们可以设计注入的数据,既不破坏周围的查询语法。7 y! h  q. t4 K6 F% `$ Q. W3 n

) @) W6 r: {, l6 ]+ y9 b比如, ?id=1′ 这里存在注入,过滤了注释符合,我们可以输入 ?id=1′ or ‘a’=’a8 h( ]% @/ k  T

$ h$ p' d$ Z5 O* E" D# K& A目的其实很简单,就是把后面的单引号给闭合掉。
; j+ d4 Y7 o* J
0 w9 H( L+ u2 v* d+ K1 G1 ?C,在一个MSSQL注入中注入批量查询的时候,不必使用分号分隔符。- P6 N( A4 X* A
  M7 T$ p7 c: V2 T' Y2 Q3 U6 q
只要纠正所有批量查询的语法,无论你是否使用分号,查询的解析器依然能正确的去解释它们的。
' e- A; ~3 y* K) }9 T' G( {! [+ K# R8 A* s* {1 `+ y
2,避免使用简单确认# c/ [$ K) u3 [% ?  U
# j+ c+ q* E  \/ L( T) s. w
一些输入确认机制使用一个简单的黑名单,组织或删除任何出现在这个名单中的数据,比如防注入程序。. I7 M. d. i/ M8 f# H6 K0 d( f! v& p- n

5 k7 @) ?. N! R3 p" c' d+ C这一般要看这个机制是否做的足够的好了,黑名单是否足够能确保安全。如果只是简单的黑名单,那也有机会突破的。0 j) k9 ^) K# D/ j7 R
$ }! u( c- B* e1 u1 G/ r
A,如果select关键词被阻止或删除/ k6 `: @  F) h7 i7 ?

+ {* `( H8 W. d/ G; o我们可以输入:1 U- F5 S! T# \% w, g" k

; K$ a: H, U0 ASeLeCt       注意大小写
  \7 X8 A5 Y  U0 {9 v% z# |4 ?; v5 s3 Q3 n! V7 H, }: H
selselectect    还记得ewebeditor是怎么过滤asp的么?8 k- j* J% A4 ^

3 P9 ~0 v# |% V. b- [%53%45%4c%45%43%54                        URL编码9 E. X$ v8 y. Y8 ]# K, i

3 L0 f7 T! H* P, i) N( _1 l( d%2553%2545%254c%2545%2543%2554    对上面的每个%后加了一个25
7 I# q8 N" p( a( K6 K' h& s: h6 b1 w/ ^' V
3,使用SQL注释符9 u1 f  ?3 H1 [0 c6 E9 w4 t
0 J; T/ @9 u# j; s
A,使用注释来冒充注入的数据中的空格。2 q. y; u1 }8 Z

$ P5 `; R9 ]" g8 `$ {; D  uselect/*yesu*/username,password/*yesu*/from/*yesu*/admin
1 }5 v2 b% I+ v2 n1 b- W3 {$ D
6 t/ m; i0 h+ m) u# p$ A0 D" q7 j/ }' e! w/*yesu*/来冒充空格
! Y: A( W- l0 y: n5 V2 \1 ?
* g1 ]8 D$ K* v, Z5 XB,使用注释来避开某些注入的确认过滤。
( @& F3 v' L, _2 O" [5 g1 R; N0 U
$ v; s& L9 d. R: N& T. u2 c& K$ Q$ x/ aSEL/*yesu*/ECT username,password fr/*yesu*/om admin
; \: I& E: k7 B7 I  j
* R/ l  S5 _1 C4,处理被阻止的字符串
, A% Q: E: T% y& T; Z/ P- p( Q% F8 A- ?
比如,程序阻止了admin,因为怕攻击者注入admin表单中的数据。4 ?, \, v, @7 B
" z* \. s  h. t! Z: x, z
我们可以这样
, ^0 _+ G: \: M9 I% W0 j4 t& S
4 F* \  a# u) U2 c5 bA,oracle数据库: ‘adm’||’in’
1 `; _& ?- ]+ O) }$ U" t2 |+ Z' Q# Q9 E3 f! U: F
B,MSSQL数据库: ‘adm’+’in’
/ d, ^3 u# T/ Z4 G/ i4 P, k9 e
7 x# a3 f1 p) A! yC,MYSQL数据库: concat (‘adm’,’in’)
5 v4 M/ F  x2 m+ }. X, |0 g# v, v
D,oracle中如果单引号被阻止了,还可以用chr函数6 r, l5 ^: z" b" G9 n. s
9 Q9 j4 f- [' t2 I' S' p, \
sleect password from admin where username = char(97) || chr(100) || chr(109) || chr(105) || chr(110)
, {5 ]& A# ?  J" M' F7 C6 ]
& o3 T. t* j" d还有其他方法。正在收集中.
# ^. l6 P* T3 }& Y8 n6 S1 g2 i  W4 }1 ?  s
回复

使用道具 举报

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

本版积分规则

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