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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-13 09:50:58 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
SQL注入。有攻有防。知道进攻。才懂得防守.
1 a. o# E: z& i+ W! p2 ^9 S/ y  H' m
有的时候,很容易受到SQL注入攻击的程序,可能会进行输入过滤,用来防止攻击者无限制的利用其中存在的设计缺陷。4 j+ H/ T" x( B& F" C( p; f

. b8 A! [2 [5 U; {唱出会删除或者净化一些字符,或者阻止常用的sql关键词。( X2 E) w& W! q+ q9 @
: P& N" a. m. q* R- I
我们通常有以下几种技巧,去避开这些过滤。
# x* l* u0 [' F, B2 w6 b4 t9 ?) ^( `- b: y! |0 V. p5 z1 L- X
1,避免使用被阻止的字符,即不使用这些字符仍然达到攻击目的。3 O& Y3 a. W) x
; ?6 r8 S) a- q# M
A,如果注入一个数字数据字段,就不需要使用单引号。
. R8 I  o3 U& G4 \
2 Y0 |$ X3 t! d. [  R. X2 k$ bB,输入注释符号被阻止使用,我们可以设计注入的数据,既不破坏周围的查询语法。
, @5 `. x& E8 t- h
4 _5 z: y! [- W, U9 A比如, ?id=1′ 这里存在注入,过滤了注释符合,我们可以输入 ?id=1′ or ‘a’=’a
( H; V; z1 {+ A, n/ a' v
# ^; u. o# Z* v目的其实很简单,就是把后面的单引号给闭合掉。
/ p' f, N1 K; ^3 H4 F" y# w" U
$ B3 S  J1 @2 q2 D6 aC,在一个MSSQL注入中注入批量查询的时候,不必使用分号分隔符。
* K4 Z$ W3 [9 m" L% B% K
# T* ^0 Z3 M; |" B( O" J$ m  W只要纠正所有批量查询的语法,无论你是否使用分号,查询的解析器依然能正确的去解释它们的。
( I9 f- U- q: V$ C/ m1 G. c8 o/ N+ D7 w8 `( b
2,避免使用简单确认
7 H! H8 x9 S4 u0 O* I( C
1 j6 J6 Z/ F* I8 h  V4 g: L一些输入确认机制使用一个简单的黑名单,组织或删除任何出现在这个名单中的数据,比如防注入程序。& x; \# W9 P" E  m( R5 e$ ]

8 V/ g5 g, O2 J5 c这一般要看这个机制是否做的足够的好了,黑名单是否足够能确保安全。如果只是简单的黑名单,那也有机会突破的。
+ ^% S! b( u/ I  L
- D  `# Z0 l6 f: ~A,如果select关键词被阻止或删除3 u" R4 x0 r% o
# R5 d' K4 O9 {7 o3 U" X
我们可以输入:
: n2 A" Z! W0 E' L8 Q# @% r( H- k
SeLeCt       注意大小写  i& i- q  T4 i& E% i% U4 u

! ?1 {* X/ V* a& }/ Jselselectect    还记得ewebeditor是怎么过滤asp的么?' ]9 `. A- B6 g
( e" n: i. `/ D
%53%45%4c%45%43%54                        URL编码
5 i) N3 `9 i. g$ ~- n% w# N$ g
. W, ]% {. L% x$ ?& i%2553%2545%254c%2545%2543%2554    对上面的每个%后加了一个25
; ]0 [) ~/ x  M. v% E+ y! p, ?' }% r+ m# q
3,使用SQL注释符
# F2 ^! l/ _; o2 E. y
9 E- C5 w& R, BA,使用注释来冒充注入的数据中的空格。
4 ?  U7 i1 x* z: V: H" P) v% ^1 x& L- ]/ U; i4 J1 \
select/*yesu*/username,password/*yesu*/from/*yesu*/admin( l) K; K8 `+ C5 D- ?
: {' ?6 D" v/ m
/*yesu*/来冒充空格
. o3 Q+ s* O. S" a
5 f/ {$ K. z6 \$ V1 k) wB,使用注释来避开某些注入的确认过滤。
$ j! N: X& {# d# N
( J& ~! b2 n1 @+ L- C  hSEL/*yesu*/ECT username,password fr/*yesu*/om admin
) U: q. ^$ q: ?
6 S" m+ p5 Y* h) c4,处理被阻止的字符串6 T9 U0 \3 @4 |: y0 g, T

2 y2 k. o% C+ ^! s  c" C. T比如,程序阻止了admin,因为怕攻击者注入admin表单中的数据。
- Z& u7 T6 d( [! a0 D: j+ F: O; I: |" {3 V9 S# w
我们可以这样4 p! O9 y  s: b8 Z6 Q$ o/ t
: h# l$ g3 y/ {/ t3 B; F
A,oracle数据库: ‘adm’||’in’
: l7 H) T% i1 X) S1 S" T0 s
# Q2 [1 Z, |- S( X2 L6 J" V3 |B,MSSQL数据库: ‘adm’+’in’8 y7 j& t7 Z3 p; A
0 n' t0 m2 E) H
C,MYSQL数据库: concat (‘adm’,’in’)0 Z7 }: ?" J7 l- M5 L2 d

" r0 l  R; j: J1 Q" iD,oracle中如果单引号被阻止了,还可以用chr函数
7 ~6 u5 l3 |* E! d- r8 p, M. N1 C+ f  t, v, u
sleect password from admin where username = char(97) || chr(100) || chr(109) || chr(105) || chr(110)
8 M. q9 H# H6 \. v$ c. y, J- W" v2 d5 l$ F: }0 y5 X/ ?8 q. H
还有其他方法。正在收集中.- t* {6 R' g- `

& O9 b) n9 @/ m  P
回复

使用道具 举报

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

本版积分规则

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