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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-13 09:50:58 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
SQL注入。有攻有防。知道进攻。才懂得防守.
8 I. o7 D4 ~2 X# [& _$ G
1 a7 m6 F7 p' @3 x有的时候,很容易受到SQL注入攻击的程序,可能会进行输入过滤,用来防止攻击者无限制的利用其中存在的设计缺陷。
9 |. ^# e/ a# W2 v  B
' O3 a: _+ |) `, @1 }0 M唱出会删除或者净化一些字符,或者阻止常用的sql关键词。
' l/ }/ t! Z8 [$ j# W; k& h9 o- h& U& t! ^4 ~3 Q
我们通常有以下几种技巧,去避开这些过滤。
. e* [+ `  r% A) H( I9 r7 U: I- X. r! L2 L/ a3 Q; X+ E
1,避免使用被阻止的字符,即不使用这些字符仍然达到攻击目的。
# N- I0 D# }2 \7 M5 X9 J# @; N5 O9 E6 z3 ~4 h0 x0 \0 r; q/ M
A,如果注入一个数字数据字段,就不需要使用单引号。
7 Z9 o2 T8 u2 j* f8 I
/ L* |* Y% c: E6 `' I9 M% |/ d% PB,输入注释符号被阻止使用,我们可以设计注入的数据,既不破坏周围的查询语法。
0 f2 L' \" q0 E/ m/ e+ D( k
9 L- H+ t/ H) M6 Y! g8 n) s& O比如, ?id=1′ 这里存在注入,过滤了注释符合,我们可以输入 ?id=1′ or ‘a’=’a" h: |5 c- x- \

+ P1 A, n& ], W目的其实很简单,就是把后面的单引号给闭合掉。: d  t( n) w% _, C5 [

, }$ ~- |6 Y$ ~7 ~+ k2 IC,在一个MSSQL注入中注入批量查询的时候,不必使用分号分隔符。
. k8 U  u# X6 f# n
6 R. n% g) U! W4 R- C  N  h只要纠正所有批量查询的语法,无论你是否使用分号,查询的解析器依然能正确的去解释它们的。9 d3 ?5 ~' P, A) b+ W

9 n4 U5 [/ {6 Z& m, N2,避免使用简单确认8 {3 T3 c8 c( q) I% |1 W

  V9 i8 p2 }5 e一些输入确认机制使用一个简单的黑名单,组织或删除任何出现在这个名单中的数据,比如防注入程序。
. _, n# I$ ?1 `# {6 n: x) L
5 e3 C1 G4 {- R. |1 d% M这一般要看这个机制是否做的足够的好了,黑名单是否足够能确保安全。如果只是简单的黑名单,那也有机会突破的。
2 j% b2 Q  X$ A+ q- Q, b9 D
+ {1 u( ?4 e0 W& c8 mA,如果select关键词被阻止或删除5 d; P3 R2 A. d5 B) C5 h& Y. ~

# C; t* ?7 [8 b; U我们可以输入:
; L' m0 B- a$ a2 k+ x* B3 r) h2 X  l4 ?+ W: Y( V
SeLeCt       注意大小写) l3 c0 Y5 H) v: m' w$ N
% R+ ]* o9 w& z$ b/ R* m/ l+ u
selselectect    还记得ewebeditor是怎么过滤asp的么?
) w5 X% I2 E" _+ q$ g4 }# s5 A% t# b6 f) P8 H, Q; M
%53%45%4c%45%43%54                        URL编码
. |' A# ^, P4 E$ F! v! T/ Y
$ {! K% z- M  T; [$ @5 U7 \%2553%2545%254c%2545%2543%2554    对上面的每个%后加了一个25
6 R+ N! c: ~& `4 w2 K$ k" {9 j1 ]5 g7 x, J' Y" z9 N
3,使用SQL注释符8 ^7 P/ r# x, ?/ \1 v

# z* z- w) t% M+ J) [' J  _A,使用注释来冒充注入的数据中的空格。
& g, }9 D$ B. E0 m) @; ~5 Q2 @3 }7 e% M9 u) K& }9 _6 W
select/*yesu*/username,password/*yesu*/from/*yesu*/admin
( G7 |- v9 t- n7 ^+ l+ i4 ~5 W- t' H
/*yesu*/来冒充空格
: b  m8 y; M( N, a: K6 w& e/ O% J1 r% z' S) ?- v
B,使用注释来避开某些注入的确认过滤。
- r6 ?! l/ R0 T+ V0 M) K5 s  J5 v8 A  `
SEL/*yesu*/ECT username,password fr/*yesu*/om admin1 |1 D2 h* v# c0 v
8 q! q" \/ T2 ^
4,处理被阻止的字符串9 Y7 L. D: G9 q, [4 w3 S) N
# K+ H) E& w5 j
比如,程序阻止了admin,因为怕攻击者注入admin表单中的数据。
! b! {! [8 t0 q$ y( I. k" J9 {: p% ]
我们可以这样
; a- `" L, Y" A2 b' O$ k
# U8 s# b! r3 K2 a  B! E; jA,oracle数据库: ‘adm’||’in’
1 `9 ]) p; L; e0 {$ h
& C# k! v* H9 e( VB,MSSQL数据库: ‘adm’+’in’
* v( O$ J/ i. l2 ~% i+ Y; M' ]* L, _* b5 S6 @
C,MYSQL数据库: concat (‘adm’,’in’)) N8 T5 V, f& n3 W  |; N- t
0 r6 X& G6 v* L6 E. [) p
D,oracle中如果单引号被阻止了,还可以用chr函数
" t5 O8 R/ a$ ^3 K
7 g  h& {, P, U! wsleect password from admin where username = char(97) || chr(100) || chr(109) || chr(105) || chr(110)3 g% y. a& I9 q6 \+ e. v: S# }
2 ?7 N4 c, a3 M3 c- Q& q" f
还有其他方法。正在收集中.
8 S4 E$ C4 ^9 N7 ]2 V- g0 ]8 l- X2 h3 }& C7 l- T, u# e4 w3 p# y) t, M
回复

使用道具 举报

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

本版积分规则

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