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

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

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

' j0 @4 |+ ^1 k有的时候,很容易受到SQL注入攻击的程序,可能会进行输入过滤,用来防止攻击者无限制的利用其中存在的设计缺陷。
3 ]5 @* Y. B% `! ]: V3 v& G1 f" l4 P+ N; c
唱出会删除或者净化一些字符,或者阻止常用的sql关键词。
% H: G/ i5 x5 h$ Z  R" {' W1 q" ?& n
( A" X7 O  G8 @% G% `! o; q我们通常有以下几种技巧,去避开这些过滤。
2 Q- H1 L; W/ r' q' v
4 e2 c# S% `8 w: B* `' d6 k. H, n1,避免使用被阻止的字符,即不使用这些字符仍然达到攻击目的。6 T9 w4 I8 w$ K; f! \# v% o

8 Q* U' O; L" b. M/ u, LA,如果注入一个数字数据字段,就不需要使用单引号。! _  h& O2 C, h/ h) r* s% \

7 Q8 x1 P+ l! S0 b: ?. f- CB,输入注释符号被阻止使用,我们可以设计注入的数据,既不破坏周围的查询语法。
# f# D' W- h' X1 s% |) Z8 P: x: Q. O: W( k! T
比如, ?id=1′ 这里存在注入,过滤了注释符合,我们可以输入 ?id=1′ or ‘a’=’a+ `$ p- }& E' `

: {, H' F7 X! d- I: v目的其实很简单,就是把后面的单引号给闭合掉。9 k1 K$ }2 U, j2 r1 Y1 C. `
8 O7 V- {2 r2 C9 w% l( {6 e" E/ W
C,在一个MSSQL注入中注入批量查询的时候,不必使用分号分隔符。( d7 W$ @: t% J  {& |

# E% M0 k/ a5 r, f  Z只要纠正所有批量查询的语法,无论你是否使用分号,查询的解析器依然能正确的去解释它们的。% d4 J! S2 Q. k9 x

0 N% j: I  ~2 Q: v  s5 T2,避免使用简单确认* t1 x$ _8 C# N$ p9 y8 I; [% d0 Q: E" m

6 a0 f$ v, c: K1 o0 O一些输入确认机制使用一个简单的黑名单,组织或删除任何出现在这个名单中的数据,比如防注入程序。
& _' j1 V/ v. s9 l/ r! h  ], |' k
. {. D( [6 ^# v3 D5 G% m7 d这一般要看这个机制是否做的足够的好了,黑名单是否足够能确保安全。如果只是简单的黑名单,那也有机会突破的。
, O8 q! ~' ]* G8 j; e# B/ @5 |1 A8 q" |: j4 B+ O; `
A,如果select关键词被阻止或删除' V; Y! I8 S1 s9 N& z) R; e
8 o3 |$ V- P  h4 P9 M
我们可以输入:
2 L2 Y! U3 ^8 T
$ j0 S* D( K. E0 E" ]7 m- E/ sSeLeCt       注意大小写9 G4 I* C. p! T3 X8 t; N6 G) [
+ j  L/ X, a( ^& \5 Z! Y: f6 v1 a
selselectect    还记得ewebeditor是怎么过滤asp的么?$ r! i; O3 `6 h! ^$ y( A7 l

5 w" @4 ~$ n  }* t5 {%53%45%4c%45%43%54                        URL编码
4 m% R  A3 A5 Z: E3 T) a5 Q0 L: ~! P, s0 v2 Q/ j( G
%2553%2545%254c%2545%2543%2554    对上面的每个%后加了一个25
, }) A  l7 B+ N0 U! g) @; l. V, ]
! Z/ F1 a7 |0 b+ X3,使用SQL注释符! x: s" x) Y" T

1 m4 ?& i% O5 gA,使用注释来冒充注入的数据中的空格。
4 _1 ^& U9 O( @7 r# T8 \( z9 _
8 Z: X8 m* v/ I( k' nselect/*yesu*/username,password/*yesu*/from/*yesu*/admin* h2 q. O4 B: ~

. U: I1 H: V6 V2 h/*yesu*/来冒充空格
6 |, S& r9 `# h' R; o% {0 N' g6 Z5 W1 E1 q, a4 `  Z
B,使用注释来避开某些注入的确认过滤。2 b$ V4 X$ j6 c5 ?

. W/ n3 N# d" }. fSEL/*yesu*/ECT username,password fr/*yesu*/om admin9 u7 Q8 t  z- l; B! N6 P0 F

0 H5 r& m: B1 k9 v6 I- G; M4,处理被阻止的字符串2 g7 d. c/ E$ }! n) |; ^- |& {

5 s  U) ?1 G: J. h5 M7 T比如,程序阻止了admin,因为怕攻击者注入admin表单中的数据。( D2 P1 j8 H$ E% Y: O. M
& Q) x2 T; p8 W- a7 Q* d; L
我们可以这样1 g4 E7 Y; u& G" G: y  C

" |1 i% C+ n" eA,oracle数据库: ‘adm’||’in’
* @* B7 e2 e0 U# u) L5 i7 J6 L; i
B,MSSQL数据库: ‘adm’+’in’9 E) f/ _* I" Z$ r

6 ?  [6 H) Z- Q/ l  cC,MYSQL数据库: concat (‘adm’,’in’)
- Q! d+ w  L" [7 k' h- [  h) L6 K5 K4 Q6 u
D,oracle中如果单引号被阻止了,还可以用chr函数. F0 H  z. O2 O, {* I7 Y
6 v; `, n0 Z& x7 R; v
sleect password from admin where username = char(97) || chr(100) || chr(109) || chr(105) || chr(110). J6 l2 E4 ]6 @9 L4 Q; U

/ s# c: t+ i2 D7 a, E还有其他方法。正在收集中.7 h; i  J5 }: J9 q) U9 H
2 x4 j! G) U. D: B7 v! i
回复

使用道具 举报

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

本版积分规则

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