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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-13 09:50:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
SQL注入。有攻有防。知道进攻。才懂得防守.
  a4 l, |& A! [" y3 F, z* t9 h& U8 u5 L1 m3 I- A1 U
有的时候,很容易受到SQL注入攻击的程序,可能会进行输入过滤,用来防止攻击者无限制的利用其中存在的设计缺陷。
+ `7 V8 U  `1 h1 v
. d4 N0 l5 z/ o' L. A/ L唱出会删除或者净化一些字符,或者阻止常用的sql关键词。. A8 K) W1 _/ V( Y- ~9 R. f
, B* {# j% y# M! R, l
我们通常有以下几种技巧,去避开这些过滤。2 s5 L5 y( P% S; B
+ H4 n7 W+ u* }# D& ?
1,避免使用被阻止的字符,即不使用这些字符仍然达到攻击目的。
, y. e6 O7 A4 m% v9 k4 g: b1 T  C  n& L% W# O% }7 n5 [# f" ~2 h
A,如果注入一个数字数据字段,就不需要使用单引号。
9 \% U% r' K% X- ~) B* }
. J- n  r0 \5 V# `6 D6 [9 J9 x  tB,输入注释符号被阻止使用,我们可以设计注入的数据,既不破坏周围的查询语法。3 `5 C( D8 S1 v- W' v% Q

6 P$ q$ m# k) R" K比如, ?id=1′ 这里存在注入,过滤了注释符合,我们可以输入 ?id=1′ or ‘a’=’a
, x! k2 c3 s- P; d
8 Z& k& M! ]) H0 h" x目的其实很简单,就是把后面的单引号给闭合掉。/ X1 N6 \9 d+ k: h

" f$ _" f0 J4 q1 R2 jC,在一个MSSQL注入中注入批量查询的时候,不必使用分号分隔符。0 R, Z. b- l3 W) I' ~

/ j5 N, e1 v( [, {/ w只要纠正所有批量查询的语法,无论你是否使用分号,查询的解析器依然能正确的去解释它们的。: Z9 T1 B: F1 ^" v* {

8 E% r6 f6 s6 t3 r, O$ @6 Z2,避免使用简单确认: p' {: V9 T, K3 P. _* Q0 _% K, j
0 [: c, I" J! Q+ N: b  L
一些输入确认机制使用一个简单的黑名单,组织或删除任何出现在这个名单中的数据,比如防注入程序。4 K0 W% S+ @" ~# _6 P

, x- j% V; a7 X: j这一般要看这个机制是否做的足够的好了,黑名单是否足够能确保安全。如果只是简单的黑名单,那也有机会突破的。
3 ^- i$ J& y. X  _0 Q8 R  @& {5 A) u! q  B0 k4 B8 R
A,如果select关键词被阻止或删除! e3 D  l3 |- v- e4 _

- N  Z. n* [& z  y+ ]8 n我们可以输入:
5 B# y& ]2 l& c9 L* c1 F5 Q; l5 q5 V$ _7 m) a0 D0 p, K! U) x
SeLeCt       注意大小写
* |+ i% \. d, L  U$ ?
% t) Q& I; s- C' oselselectect    还记得ewebeditor是怎么过滤asp的么?- {. c% X; I, t- a8 z

+ R1 s0 D; z8 P%53%45%4c%45%43%54                        URL编码& `- f( K5 f, F; h
: k, N: w2 b* w+ l# ?9 _/ g7 r
%2553%2545%254c%2545%2543%2554    对上面的每个%后加了一个25
+ C' A# _$ H* R- C
2 B; J3 K' y$ H5 M. _; Z2 d7 F3,使用SQL注释符4 z  c' J4 I0 ?  N2 K, x
) T0 N, H1 p& V" E/ q. n7 T
A,使用注释来冒充注入的数据中的空格。
( ~' m) {# R% `7 E( n# j! {2 [6 s, b" B% s# M% O
select/*yesu*/username,password/*yesu*/from/*yesu*/admin
0 t: o  H* V' z0 |" D' ^9 v8 s- e" w+ O2 r; ^9 P
/*yesu*/来冒充空格
# U  m! X' ?5 y' D! T' h' ^; }; ~; u
  k6 E1 x6 r! L  tB,使用注释来避开某些注入的确认过滤。
% w5 L2 ]% L% i; g  r1 ]" b9 u* P; r1 d$ G
SEL/*yesu*/ECT username,password fr/*yesu*/om admin8 w. w  n5 ~# f

2 I% x1 d0 E: Z! g! q4,处理被阻止的字符串1 X! A" I" t+ f8 {" p+ l' c/ h3 p

* Z1 D2 [& ~$ n5 d5 w! B( j$ W比如,程序阻止了admin,因为怕攻击者注入admin表单中的数据。6 T$ `  a. h6 b! n6 f* Q
! \; W: s; m3 I4 {, T+ P6 j7 _
我们可以这样
, Y5 L1 l  a0 ]) I2 y" k6 ~$ V# [. t2 T3 K  N  E2 u4 n0 h6 z
A,oracle数据库: ‘adm’||’in’
' [$ n" o: ^. s' W5 t0 g' z6 y9 A0 g% y) p3 H
B,MSSQL数据库: ‘adm’+’in’
- f& m. r  r4 O% \! H3 q+ E) g  k3 Y5 V: Z$ W/ }/ H
C,MYSQL数据库: concat (‘adm’,’in’); x9 b$ _- M) L% G
9 H& i0 s* M1 V/ ~2 F5 e
D,oracle中如果单引号被阻止了,还可以用chr函数
7 |' z; @; {# A
- V( P1 c! V1 Z2 T* [/ Esleect password from admin where username = char(97) || chr(100) || chr(109) || chr(105) || chr(110)
* U1 P, P0 _; }  E5 H' s3 g* h; K0 f5 K! s- z
还有其他方法。正在收集中.9 R8 k, j4 ?7 o/ E

, R" m5 ?5 P8 @  I0 z
回复

使用道具 举报

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

本版积分规则

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