找回密码
 立即注册
查看: 2914|回复: 0
打印 上一主题 下一主题

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-13 09:50:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
SQL注入。有攻有防。知道进攻。才懂得防守.# F& Q$ _& }0 w# N$ _* I; r
* C1 y6 k+ c' m) ~, |
有的时候,很容易受到SQL注入攻击的程序,可能会进行输入过滤,用来防止攻击者无限制的利用其中存在的设计缺陷。% S( C% S9 X' c" C/ j" N' E7 _" y

/ [$ U% w+ @8 r, J9 {唱出会删除或者净化一些字符,或者阻止常用的sql关键词。  n& n% O: R7 ?; H1 `- a

* p6 o9 z& j% h! ]- `. n, ]我们通常有以下几种技巧,去避开这些过滤。9 r3 x+ j" g0 w' r$ I- V1 Z

( U4 s0 Y+ V9 G+ ^1,避免使用被阻止的字符,即不使用这些字符仍然达到攻击目的。
- `+ `# L3 W( T) t+ A
7 O" D- @+ k  w1 NA,如果注入一个数字数据字段,就不需要使用单引号。
, {1 c. [$ {! G: I# t8 {* F
1 }5 F& a% V! ZB,输入注释符号被阻止使用,我们可以设计注入的数据,既不破坏周围的查询语法。
4 ?1 V* ^3 f2 I. a% m0 q( A# B6 l
比如, ?id=1′ 这里存在注入,过滤了注释符合,我们可以输入 ?id=1′ or ‘a’=’a
; g2 j  q8 w& k$ x- y. t! p  e9 z  i: [
目的其实很简单,就是把后面的单引号给闭合掉。
$ L- N3 e1 C0 a. ?9 ^4 L8 l8 E9 ]% t; X7 j; R
C,在一个MSSQL注入中注入批量查询的时候,不必使用分号分隔符。
& {- v6 c" \9 ?! U6 H( G! ?' w* N( u2 M, y. \; K, u% m
只要纠正所有批量查询的语法,无论你是否使用分号,查询的解析器依然能正确的去解释它们的。
6 h( g# |2 o, W2 N! x, ^3 c0 O; J. j* H2 Y
2,避免使用简单确认2 K; h0 f% M2 j% ~0 r2 C' [' T

" P4 c8 f8 p! `: w' ?1 L一些输入确认机制使用一个简单的黑名单,组织或删除任何出现在这个名单中的数据,比如防注入程序。) X9 q7 @4 ^5 N3 s- n& J
0 ?" a7 [6 g( }$ r/ [/ F  h7 V7 N
这一般要看这个机制是否做的足够的好了,黑名单是否足够能确保安全。如果只是简单的黑名单,那也有机会突破的。% u! B( h' G1 P7 z( j& N" s# J

. k2 R' l, S+ e. y) G: N) g$ TA,如果select关键词被阻止或删除
. U1 L9 g& K$ ^* [  Q2 p0 h  h3 Y( k7 t: N" t6 ?( q
我们可以输入:( ^6 ?: Y8 x# E/ Z/ V) o

! ?$ t2 x3 ]7 q! g% q6 V6 T# ]4 OSeLeCt       注意大小写
! \0 l/ r& Y4 z, f' ]# n
# }+ {. _  d: e9 qselselectect    还记得ewebeditor是怎么过滤asp的么?' [0 H" C2 i" ?1 @
: Z  m0 b  r+ b+ q: J
%53%45%4c%45%43%54                        URL编码
" b4 k/ E' R6 @4 S7 [- ?
4 _, ^1 I$ Q5 J9 A%2553%2545%254c%2545%2543%2554    对上面的每个%后加了一个258 }2 [" ?4 ]  c' c( s  @8 x# ]/ Q
7 k- J/ k% |: e& v6 C; N" Z2 b
3,使用SQL注释符4 T, S: J$ f$ H9 G& l) y( V
2 S. ~* G0 {2 R. S/ z
A,使用注释来冒充注入的数据中的空格。" B4 ~0 w' o- ]3 P7 D9 i

# Y9 f# n: r( x9 P$ wselect/*yesu*/username,password/*yesu*/from/*yesu*/admin
4 |, K) f% |% ~' M" `6 S4 g0 `. M/ e" v
/*yesu*/来冒充空格( {2 s) w( f3 ?* j
2 m) `) E% V% e( ^; u
B,使用注释来避开某些注入的确认过滤。  R. M1 \7 ?' m' @. H3 N/ w+ A, q

5 G: w# K/ w3 ^$ O9 a. w  nSEL/*yesu*/ECT username,password fr/*yesu*/om admin
9 o# s# E6 s9 U2 X8 l, Y
2 j  w, `! m% B  e4,处理被阻止的字符串) ~& e4 |, y( ]& L$ J

6 ~* q8 ]( h2 ]* e. X. u比如,程序阻止了admin,因为怕攻击者注入admin表单中的数据。! [2 `* h) H9 C( B  Y* V" J" J

  H9 j7 I& T& }; I7 R. I8 U% l我们可以这样% Y7 w7 y! c: x
! f1 F7 I$ p1 ~7 ]. p
A,oracle数据库: ‘adm’||’in’
( |* `% j/ ]8 H8 H7 M' ~$ E8 o1 }  g+ m1 y% f* Z/ n+ q' w8 B9 y
B,MSSQL数据库: ‘adm’+’in’
* h0 L1 T$ \* L0 _. b9 f4 N- R
, m6 C! @0 r. ^' FC,MYSQL数据库: concat (‘adm’,’in’)
/ z8 Y# G" E& |+ F9 D% u- `3 N; M, {  w: Y9 n! D, d1 ~
D,oracle中如果单引号被阻止了,还可以用chr函数
9 W6 Y8 T5 I, d( @4 D! L) @! u* @/ {6 t3 b" S5 A
sleect password from admin where username = char(97) || chr(100) || chr(109) || chr(105) || chr(110)5 ?6 g+ L2 o+ x2 d) ]
# K8 u% J0 I% e! t$ v- i% X  @, j5 W
还有其他方法。正在收集中.. B, d4 M3 E+ ]
4 L- Y$ R, @% u( }
回复

使用道具 举报

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

本版积分规则

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