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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-13 09:50:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
SQL注入。有攻有防。知道进攻。才懂得防守.
2 G0 z8 b- y/ U9 f# z& k4 ]0 H1 ]  O7 \' V% {
有的时候,很容易受到SQL注入攻击的程序,可能会进行输入过滤,用来防止攻击者无限制的利用其中存在的设计缺陷。6 C" {3 Z  f1 H7 i! c- Y; L! C
/ s6 N+ R8 ^6 K. E5 ^, x. O% ^
唱出会删除或者净化一些字符,或者阻止常用的sql关键词。
5 p1 A* Y! n7 @% |. X
+ m7 D) P# e8 k- _) c* Z- w: r我们通常有以下几种技巧,去避开这些过滤。
" |7 ^& t/ S1 G6 [0 }7 w0 ~" S: l, l1 p9 z* @+ _- j
1,避免使用被阻止的字符,即不使用这些字符仍然达到攻击目的。1 z7 F. O# g* x

; Y; p1 _3 Y7 @A,如果注入一个数字数据字段,就不需要使用单引号。/ \, I2 }7 Q8 e7 g4 Z2 x' e

# c5 t8 P: ?. J5 g( J& p0 j7 T2 hB,输入注释符号被阻止使用,我们可以设计注入的数据,既不破坏周围的查询语法。
" p5 t  F9 j4 l, s  K; b' W% T8 z/ @! J
比如, ?id=1′ 这里存在注入,过滤了注释符合,我们可以输入 ?id=1′ or ‘a’=’a- O3 u/ c( u6 d
4 ]3 m. |0 ^! m2 B6 M
目的其实很简单,就是把后面的单引号给闭合掉。
; ~' }7 l7 ^. J8 _7 ^2 D' h+ _+ @, _, S5 v+ x
C,在一个MSSQL注入中注入批量查询的时候,不必使用分号分隔符。8 w7 |7 X& ]) C1 D1 f6 r5 L

; c6 Y; E# m& m/ j* [# e" U只要纠正所有批量查询的语法,无论你是否使用分号,查询的解析器依然能正确的去解释它们的。
6 I1 \. E+ ^3 a
8 ~: o7 u. @, G6 E' o) P2,避免使用简单确认4 D. [# _/ s' o5 @5 u
1 W; l  \& G7 Q$ U. p" B
一些输入确认机制使用一个简单的黑名单,组织或删除任何出现在这个名单中的数据,比如防注入程序。
- v5 _* a: G$ r* y7 H( g3 |' @4 F7 x! j- Q5 Y8 h. K9 q4 k8 R
这一般要看这个机制是否做的足够的好了,黑名单是否足够能确保安全。如果只是简单的黑名单,那也有机会突破的。
6 e* i8 Q7 d. H
$ `* C, @# r% W* J" }A,如果select关键词被阻止或删除# }1 d2 {. S# H  W" A9 N. e
& v0 f2 A$ ]7 S; \9 O3 C& ~
我们可以输入:! h  }& I9 R2 G. ]( ?
5 r; n3 ]7 u8 o. |3 O3 W/ o$ b- U
SeLeCt       注意大小写
; b1 U9 T5 T. [; J$ R7 x" l; h* {' q4 v; q
selselectect    还记得ewebeditor是怎么过滤asp的么?* s, k; y! g7 s) n

0 g* C7 i' k9 n# {; d%53%45%4c%45%43%54                        URL编码! L( H7 t9 s7 o

5 a, W! C- ^8 M%2553%2545%254c%2545%2543%2554    对上面的每个%后加了一个25
8 e  J! p; V+ z9 O: I. {) d$ U+ b1 G& e6 y# ?# s
3,使用SQL注释符5 D3 T. e9 J% J0 D

0 ]& \2 e0 R6 T8 v) E0 I9 nA,使用注释来冒充注入的数据中的空格。- e  i( _- D' G% K# h* I. @
9 g( G* J  \( f" I
select/*yesu*/username,password/*yesu*/from/*yesu*/admin
" z0 K4 w+ V8 K+ y
+ f& M7 }" j+ m* M, Y; f& }/*yesu*/来冒充空格
+ x) Y" W- _0 }, K- o; [. [2 w% a: |) ~! }/ `# p
B,使用注释来避开某些注入的确认过滤。' l1 f& K* j1 d. ~7 s

0 W- m5 y5 x: D1 {) k4 m' qSEL/*yesu*/ECT username,password fr/*yesu*/om admin, G7 g: p. K" q6 \3 |
3 ?/ U' A' l+ p9 m* E
4,处理被阻止的字符串% ^! V9 j; G* F: Q  q% Z

/ W$ a6 A3 x; a) E: b比如,程序阻止了admin,因为怕攻击者注入admin表单中的数据。
0 f$ ~  j0 R9 b' a; d3 ~+ m( ]4 B$ w3 v( E  U
我们可以这样
& C4 P. j, L- K% t/ P" J
7 ^  |/ L$ t0 I) ^  ]. }; L$ NA,oracle数据库: ‘adm’||’in’9 O  ~  _5 o% v& D

! v/ S8 g- D. }  I1 ZB,MSSQL数据库: ‘adm’+’in’2 W9 y( _- _9 E
+ ~6 H0 M' w- m8 s0 T) u
C,MYSQL数据库: concat (‘adm’,’in’)  F, b# B& s% S1 W6 C8 F# J) m

6 u, D) P/ F7 u! y) CD,oracle中如果单引号被阻止了,还可以用chr函数( ]% M# p  E, W5 X/ b

+ h7 n* v& Y& y: f4 i* Y9 h3 bsleect password from admin where username = char(97) || chr(100) || chr(109) || chr(105) || chr(110)
# U9 v2 V, r% M! p) i0 @  x6 {5 [7 l
还有其他方法。正在收集中.
; O& i& p' b$ f6 ?6 s
7 F8 j0 l6 b" u
回复

使用道具 举报

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

本版积分规则

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