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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-13 09:50:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
SQL注入。有攻有防。知道进攻。才懂得防守.
' i: {; [& A# Y5 v" s$ P
1 G* y( s4 {& ]3 W有的时候,很容易受到SQL注入攻击的程序,可能会进行输入过滤,用来防止攻击者无限制的利用其中存在的设计缺陷。
, O* B' J$ h) ]! w  `( g$ \' F3 `$ o
唱出会删除或者净化一些字符,或者阻止常用的sql关键词。
' X1 j; Y) t# z. g! K9 Y9 D  h/ x1 F
我们通常有以下几种技巧,去避开这些过滤。
1 L* e1 \' z) S/ S( ~
& ^" V; b9 S$ u6 e) P1,避免使用被阻止的字符,即不使用这些字符仍然达到攻击目的。
* K3 {# k  h3 O$ q" L* `5 m- g4 r
# D0 Y3 I" Z) ^5 J/ n& j3 cA,如果注入一个数字数据字段,就不需要使用单引号。
2 R* ^5 G: C& ]; t2 `/ f; w" J2 V4 }% s6 l
B,输入注释符号被阻止使用,我们可以设计注入的数据,既不破坏周围的查询语法。
  d& \9 G0 e+ b7 p, M
. |3 |0 P( @$ \# C比如, ?id=1′ 这里存在注入,过滤了注释符合,我们可以输入 ?id=1′ or ‘a’=’a
- C6 h" c* s6 q: o- \# O" Q2 b' {& p( v8 C" b2 l) \) a/ p
目的其实很简单,就是把后面的单引号给闭合掉。$ b; ]$ H8 Y: x; O! f$ F: W0 n

2 u% O  m2 i' ]+ u/ w6 S1 X1 R5 JC,在一个MSSQL注入中注入批量查询的时候,不必使用分号分隔符。
- k0 D- Y& X+ w3 T. a; E$ `. p. i. n" E6 i6 |! }
只要纠正所有批量查询的语法,无论你是否使用分号,查询的解析器依然能正确的去解释它们的。/ j/ G/ F' M; V1 A2 Z) l" `* r
: [0 j5 g& l0 N7 r
2,避免使用简单确认
" d' t  t/ y! L8 h: b' x* A6 C7 Y2 n/ f& J" _. ]3 e$ `
一些输入确认机制使用一个简单的黑名单,组织或删除任何出现在这个名单中的数据,比如防注入程序。. c& u" }- v( T4 u% i6 j5 q3 ^
( d* d9 w, ]0 b+ V1 v9 b3 i, B5 X
这一般要看这个机制是否做的足够的好了,黑名单是否足够能确保安全。如果只是简单的黑名单,那也有机会突破的。! J+ O2 p1 D0 I- F

% `+ r2 ]+ h3 E& C- Z* j$ s0 FA,如果select关键词被阻止或删除
/ S7 [* N! A6 ]( W# A0 T8 @, W7 f* ?) S6 a: C$ ]' z
我们可以输入:. O3 `8 j7 |3 Z* S) O  @
4 m' \' u0 ^. X# Z) o0 v5 ~1 C- d% |% R
SeLeCt       注意大小写
# c% x" B* q+ y" ~
$ m& D& G* E; @, W$ Oselselectect    还记得ewebeditor是怎么过滤asp的么?
- r) P" k" l" {- G' O, ^; V5 {4 t( s6 E
%53%45%4c%45%43%54                        URL编码. V8 G# D* p# o( I/ M/ d
0 B) y5 f5 [- a9 p$ b' ?! ?/ u
%2553%2545%254c%2545%2543%2554    对上面的每个%后加了一个251 x+ {" B$ z7 M1 T) n4 C& R1 m/ n2 r! K

/ S- R8 r: j0 s. R; s* W8 a3,使用SQL注释符
' d+ E, V) N/ |: p% S$ v& k
/ ^* O9 |) k2 h! HA,使用注释来冒充注入的数据中的空格。8 h( M0 ^) f1 A; e4 h' R
% [9 O, C0 A# V
select/*yesu*/username,password/*yesu*/from/*yesu*/admin
( q, b  S; J: ^  b! n5 p  Z+ z' |: n' k) t" R" Z; N' [! N7 {
/*yesu*/来冒充空格
" R  N  ~: m% Y+ I  @
2 y: i: u# O, Q9 d; W  iB,使用注释来避开某些注入的确认过滤。
5 y  ?+ w, D7 B% M+ a3 n, M, W9 A% k
SEL/*yesu*/ECT username,password fr/*yesu*/om admin
$ a+ [/ L1 d' P3 A. r5 N; m4 n2 G) K  b5 H
4,处理被阻止的字符串
1 K' d' m% G. {* w0 P) ]. W5 q' [. T' }$ f6 p- i
比如,程序阻止了admin,因为怕攻击者注入admin表单中的数据。
# ^- g3 i& k/ X8 n2 N( f4 H/ f2 d& a3 X1 C% Q- c* S9 k
我们可以这样
' D! A; i7 A! q3 B% _7 V; J/ ^( m4 {  p+ |9 K, t$ n
A,oracle数据库: ‘adm’||’in’0 Z( S" ^4 U4 z0 o3 |# a

0 d: H' I' |- m8 z2 ]) W1 t! FB,MSSQL数据库: ‘adm’+’in’
& a0 e+ ^6 ~9 N  }
4 H% j6 L7 }! gC,MYSQL数据库: concat (‘adm’,’in’)
( a$ ~/ S4 e0 @- c* v6 @0 L+ D. I& V. \& G2 }0 r. s( W
D,oracle中如果单引号被阻止了,还可以用chr函数" }5 b, T* _$ t' v

- k7 f- ^+ Z  i# n/ I9 ]: H! |9 zsleect password from admin where username = char(97) || chr(100) || chr(109) || chr(105) || chr(110)
  h* b; |7 F$ {; ^8 C& T$ G- n+ H+ Z; {# ]0 Z, k
还有其他方法。正在收集中.
  e4 T2 O9 l+ L  u! F2 L5 o1 l* _  d3 ?2 B
回复

使用道具 举报

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

本版积分规则

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