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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-13 09:50:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
SQL注入。有攻有防。知道进攻。才懂得防守.8 J( z7 p6 O9 n6 Z
1 h+ }. M; ~0 y. Y! d, \
有的时候,很容易受到SQL注入攻击的程序,可能会进行输入过滤,用来防止攻击者无限制的利用其中存在的设计缺陷。
7 n) |5 H- @& \& E
% O2 B- B1 j4 Y" N2 o7 v唱出会删除或者净化一些字符,或者阻止常用的sql关键词。! S; n7 Z; i& w: S7 J8 p

' W# }, S2 M7 a$ }我们通常有以下几种技巧,去避开这些过滤。* R# E" b; O8 I2 c7 `- T. c& R
& ]; s* H% J" c5 V/ H
1,避免使用被阻止的字符,即不使用这些字符仍然达到攻击目的。( R+ Q9 o( f. r7 C, z
2 a6 c( v4 Y5 L( `" G4 B
A,如果注入一个数字数据字段,就不需要使用单引号。2 z& r$ C+ K3 F+ b0 G7 f- `7 C
9 x+ Y. u( n4 p' ?
B,输入注释符号被阻止使用,我们可以设计注入的数据,既不破坏周围的查询语法。
- e# v5 H- C! @( X% N) g
; Z. f1 S) K! U( s/ h! Z比如, ?id=1′ 这里存在注入,过滤了注释符合,我们可以输入 ?id=1′ or ‘a’=’a
* f, A4 u+ M" Y) }/ ^8 G% f' G6 E, C4 z7 z; E  x3 h4 t; W' u& {0 p  _6 ?
目的其实很简单,就是把后面的单引号给闭合掉。+ q1 l  M/ r  Z

& g& G$ Y# b3 w. l: HC,在一个MSSQL注入中注入批量查询的时候,不必使用分号分隔符。
6 s8 ^1 R9 y' @% E0 V* Z9 i0 g; B  f& t# v
只要纠正所有批量查询的语法,无论你是否使用分号,查询的解析器依然能正确的去解释它们的。6 P* k" e6 x9 Y# x2 d) |; Q
) w/ d' [$ s8 L6 {  W. C
2,避免使用简单确认
1 U1 Q9 o7 o) c( t8 i
, h' @0 v5 `  {# _7 q' J; g  p一些输入确认机制使用一个简单的黑名单,组织或删除任何出现在这个名单中的数据,比如防注入程序。5 N# R; U5 _* a# }  t9 G2 M. l* L9 i

; b8 X, n2 b' A8 ^( U$ q  h这一般要看这个机制是否做的足够的好了,黑名单是否足够能确保安全。如果只是简单的黑名单,那也有机会突破的。( l% x* l" c' D
' T& x: u3 F, C# I
A,如果select关键词被阻止或删除
3 s2 z! I  \7 x# y6 X
5 c1 [' r4 F8 X7 y% q9 ?, V我们可以输入:
' V( x% R/ N" j9 a% I+ C, C% {9 e$ a% [1 G/ Q: {  \. |
SeLeCt       注意大小写3 `  y( Y; e! }( E

* |2 K$ G. w8 m* t* W4 H, tselselectect    还记得ewebeditor是怎么过滤asp的么?- }, ]$ i- F# b" w9 E

' @( v0 c6 @9 K; Q%53%45%4c%45%43%54                        URL编码- M4 o# o. P# `4 |( k

8 h) ~$ N$ e; S3 _& h: b" @%2553%2545%254c%2545%2543%2554    对上面的每个%后加了一个25
4 z# b) L/ O7 p! i, X, q& Q# ]! J/ u- x
3,使用SQL注释符
1 d6 ]  p. c4 Z9 w% T/ N
! ?4 p8 i/ V) g- H9 W  yA,使用注释来冒充注入的数据中的空格。. Y& A8 f# `1 J8 x3 P* z2 b

" S4 q0 f  k8 ^& U7 Lselect/*yesu*/username,password/*yesu*/from/*yesu*/admin
& _7 b, @" Z* C/ L  b' w3 C" @9 U  _7 ?: q
/*yesu*/来冒充空格  @! D0 e( W3 ?$ g  b
. Y* w# P+ K  _% U% I
B,使用注释来避开某些注入的确认过滤。7 t* Z+ d1 i+ t. h9 j$ U6 d( ^- }
9 f1 Q) U9 j! O4 d
SEL/*yesu*/ECT username,password fr/*yesu*/om admin
$ @% I1 Z7 x  ?( e
8 S, k( ]! y0 n" B* |7 B4,处理被阻止的字符串! S$ S2 B+ m6 I

, ^  d, o, r  v# F8 T/ W! G" Y比如,程序阻止了admin,因为怕攻击者注入admin表单中的数据。6 g, D- y- v/ g8 d0 ~

  s3 F* k! ~# c( o( Z* d$ k$ i我们可以这样3 I+ j' B9 y. i: p& h

+ f" E3 o0 i( ?A,oracle数据库: ‘adm’||’in’, f$ D! Q9 B+ _- B, z# s$ T$ t0 t
6 H$ H+ l! r* u
B,MSSQL数据库: ‘adm’+’in’
7 v, i6 M) a5 y# _7 _9 O. c# R$ H
+ u' |3 V/ Y# CC,MYSQL数据库: concat (‘adm’,’in’)  C. j, l# b6 u* w0 g; ~

* H' U# D/ X" r8 QD,oracle中如果单引号被阻止了,还可以用chr函数
- _( Z  ^" v! X  n5 d. j: K4 q8 x: P, n0 R
sleect password from admin where username = char(97) || chr(100) || chr(109) || chr(105) || chr(110)" J( q2 m1 u' J9 \6 A, C
$ o# f6 M5 P. A) ~
还有其他方法。正在收集中.
; [$ C, i% ]) K+ G; `
3 N. n& k+ R5 I7 X
回复

使用道具 举报

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

本版积分规则

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