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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-13 09:50:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
SQL注入。有攻有防。知道进攻。才懂得防守.: S- T" i7 {3 \/ w5 P" p

* U! R2 \0 Z, g1 U; ~( O" m有的时候,很容易受到SQL注入攻击的程序,可能会进行输入过滤,用来防止攻击者无限制的利用其中存在的设计缺陷。6 W$ x3 t7 x- |0 \8 l$ I1 i/ T2 v
) ~! A* A, }3 M$ ?3 X3 A6 ^( T
唱出会删除或者净化一些字符,或者阻止常用的sql关键词。
; S7 D, a6 \0 A* X" V$ H) [# B" V( O3 B0 P% d
我们通常有以下几种技巧,去避开这些过滤。
3 Z, ?0 W- N+ g( ^( J
3 |3 X2 M$ b, B: ~% i2 q: f1,避免使用被阻止的字符,即不使用这些字符仍然达到攻击目的。1 K$ x( l. o$ M' v, `
0 j) D; m" y+ Z0 ]
A,如果注入一个数字数据字段,就不需要使用单引号。
# ~9 m) {' L! e4 [4 p1 }7 a, b- I
: K9 w4 n% W) E2 T: CB,输入注释符号被阻止使用,我们可以设计注入的数据,既不破坏周围的查询语法。
/ o" Q- _; l. J" L- P# o* V8 y( H$ j3 [' P8 R. J0 n' B& d
比如, ?id=1′ 这里存在注入,过滤了注释符合,我们可以输入 ?id=1′ or ‘a’=’a
$ t; ]. e5 V5 U' y5 _3 W- r. @8 k) h2 L" Z6 R. E/ \3 L
目的其实很简单,就是把后面的单引号给闭合掉。
% x- s0 p2 }; N% s# K* [
' \  t+ _! Z& q& WC,在一个MSSQL注入中注入批量查询的时候,不必使用分号分隔符。; O7 F, a7 W( q$ p; X

" e9 d5 ~5 ^0 M9 s4 V; c只要纠正所有批量查询的语法,无论你是否使用分号,查询的解析器依然能正确的去解释它们的。" O( C9 r3 W3 W" q

7 p7 I1 h3 C1 K5 F2,避免使用简单确认
1 g# b7 A& P- V  B% J9 [& G/ L' `; R( H: k! v
一些输入确认机制使用一个简单的黑名单,组织或删除任何出现在这个名单中的数据,比如防注入程序。
9 h5 f# D" i4 R4 s% L* D% O
$ Y; z; l. y% x  Y7 i这一般要看这个机制是否做的足够的好了,黑名单是否足够能确保安全。如果只是简单的黑名单,那也有机会突破的。/ B% w# x# @% d) `
* ^- ?3 \$ N& \7 [" L
A,如果select关键词被阻止或删除
: D6 O# ~, c# m1 o* K; \) y: z% U2 m6 J6 }. z( M
我们可以输入:
* v5 X7 }2 X& u8 z8 D8 |! z! j; _, Z4 ^
SeLeCt       注意大小写4 P3 A& j9 Z: |

, ?! C7 o  h& Z2 l8 oselselectect    还记得ewebeditor是怎么过滤asp的么?
( K$ `9 \) S  Z/ E7 N& m3 F5 f# N: ]/ b5 j: `' p1 ^& c7 z) D: P
%53%45%4c%45%43%54                        URL编码; J; ^! G' {# p  B# f( t

% v6 Z# `* I, ?$ J4 A4 w%2553%2545%254c%2545%2543%2554    对上面的每个%后加了一个250 V2 H- z3 b9 ?( O  v# i
3 D8 R4 @8 ~) Z9 w- |
3,使用SQL注释符
, ^! M- N- f! j* |% y/ p" X, p
! P0 V3 n# f/ S* X1 n' ~2 B4 EA,使用注释来冒充注入的数据中的空格。& J' c" D/ n" A" ~+ `! D

# G! l, o5 @: M+ V( l, G# dselect/*yesu*/username,password/*yesu*/from/*yesu*/admin* z7 X$ K) c+ Y% i

* h3 K( G' ?) i# H* X/ J+ ?6 S/*yesu*/来冒充空格
$ W: V+ f5 x& M7 z: \% P& w: V6 |! r2 J5 U' F% s% e
B,使用注释来避开某些注入的确认过滤。
* `" u7 L" L% T4 Z. i) g2 n4 L* f9 l! j1 f
SEL/*yesu*/ECT username,password fr/*yesu*/om admin
, q' E; W+ N; [4 e# Y$ @3 ]& A3 t. b+ P; V2 ]# a2 Q) F9 t
4,处理被阻止的字符串
4 J1 y# ~; `7 N  y
. J1 x3 p9 z; v$ r比如,程序阻止了admin,因为怕攻击者注入admin表单中的数据。
2 N) O6 @! m; a+ ?
' r6 l' h! W% r, r! Q我们可以这样
. c6 A/ Q5 b  N9 ]) r6 w8 ~4 s& X' t6 X
A,oracle数据库: ‘adm’||’in’
* o# {; \) w$ z% Y, a2 ~9 [; l4 N. i' W  ^. N5 G% x9 I1 |
B,MSSQL数据库: ‘adm’+’in’
# H+ h% \3 z1 |6 I0 \
' s& R, ^! H' vC,MYSQL数据库: concat (‘adm’,’in’)
! e; B" t8 t% W( r  x& [0 O4 s5 h4 J- Q5 u. i
D,oracle中如果单引号被阻止了,还可以用chr函数+ x$ x! `' A3 L& J; v' N* N7 a4 X

, P1 J7 y  x9 Q* n# qsleect password from admin where username = char(97) || chr(100) || chr(109) || chr(105) || chr(110)
/ f2 c, v" f' l7 S2 W7 _) d# x! f3 E; J4 }: P; Z% M! E; X0 G" t
还有其他方法。正在收集中.$ d0 D0 a  {/ C) o

9 K9 K; {1 n+ v3 a% ^$ t
回复

使用道具 举报

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

本版积分规则

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