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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-13 09:50:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
SQL注入。有攻有防。知道进攻。才懂得防守.
  v- g3 g) p# U" t+ a
  A* i$ x# k/ T0 W9 X# i7 ~有的时候,很容易受到SQL注入攻击的程序,可能会进行输入过滤,用来防止攻击者无限制的利用其中存在的设计缺陷。
" a  a: a5 J' ]6 S) F+ I( e& B7 {' k/ i4 _% A
唱出会删除或者净化一些字符,或者阻止常用的sql关键词。
- w. |" b& W- y9 |+ T' g, ^
! v5 k; E/ f& ?4 X6 T我们通常有以下几种技巧,去避开这些过滤。
& v) P; C4 C: f' I$ v3 e2 ^: X/ I  N
) d  e  {$ X! A$ ~% [5 o1,避免使用被阻止的字符,即不使用这些字符仍然达到攻击目的。
5 h+ f7 x" R, w7 [# K/ q/ j/ X- S
& U+ W) v: S& A% SA,如果注入一个数字数据字段,就不需要使用单引号。
( ^( q+ t' I. {& r
5 }; y9 j0 L1 |1 d/ ~' PB,输入注释符号被阻止使用,我们可以设计注入的数据,既不破坏周围的查询语法。5 t; k( }/ Q$ o

3 W: ?3 _) O+ v. O" g; ]比如, ?id=1′ 这里存在注入,过滤了注释符合,我们可以输入 ?id=1′ or ‘a’=’a
' N6 ^: b+ b5 k0 @9 u% s+ j4 |3 H$ x( Y3 x; o& j
目的其实很简单,就是把后面的单引号给闭合掉。
: E! T$ e9 Y8 m6 D3 {0 F6 G1 q: j. @+ O* Z
C,在一个MSSQL注入中注入批量查询的时候,不必使用分号分隔符。/ J( }' \5 t* K7 [2 D$ N2 U: |) h( m
$ Q! S6 l2 g1 S% Z" t
只要纠正所有批量查询的语法,无论你是否使用分号,查询的解析器依然能正确的去解释它们的。! `: ~4 ^1 u+ s& H# N- @

, |& D' q# t! M+ m5 O' X2,避免使用简单确认9 b4 C6 k, N8 u- E
! u4 J4 A2 M- P" G
一些输入确认机制使用一个简单的黑名单,组织或删除任何出现在这个名单中的数据,比如防注入程序。
: }) U7 Z+ I+ l# J1 X" i/ B; }# @
3 o4 G" F- G7 W" p, _  _8 f& |这一般要看这个机制是否做的足够的好了,黑名单是否足够能确保安全。如果只是简单的黑名单,那也有机会突破的。
  F2 Z7 ^3 M- @  M, i
5 r' E. X- |# I1 p* u8 q& d& i5 r* LA,如果select关键词被阻止或删除
8 y/ j; x8 c$ V3 O
& v5 O/ V2 n  U. I我们可以输入:; ^- ^$ O% y' ]; m8 j' @/ R
, Y2 z9 f' v" t
SeLeCt       注意大小写
3 W9 S# w5 H/ a# w$ e
; b7 L3 p3 ?" q  B6 ?, u0 G* ]selselectect    还记得ewebeditor是怎么过滤asp的么?
2 e; w. x: h( G4 L) N- e2 X) X: ]. E" [# N/ J  ^% B; {" j* Q
%53%45%4c%45%43%54                        URL编码
4 `7 y2 [8 w3 q  z' I
$ h- S5 O# F6 c0 L1 h%2553%2545%254c%2545%2543%2554    对上面的每个%后加了一个25
9 E  w/ o9 \' ?) U! s% F) E8 M; Y5 y( t! P5 U
3,使用SQL注释符0 h/ Y  l. t6 F

0 Q; m% _8 r4 d$ BA,使用注释来冒充注入的数据中的空格。7 e: c) k* S  k9 K' l
% X- _6 k  |2 M, x1 E3 y$ x
select/*yesu*/username,password/*yesu*/from/*yesu*/admin3 j9 ]* e0 ~$ {# a

9 _& z- z  P1 }5 y/ M/*yesu*/来冒充空格
. N0 V) L7 P' `0 O& i1 y+ d
% h* Z! v, ~: R* L( k, HB,使用注释来避开某些注入的确认过滤。0 n. z' X4 H7 f' M& [, N% ]/ U
& O5 I2 d: |* t9 \. f
SEL/*yesu*/ECT username,password fr/*yesu*/om admin
6 X5 u' \, y8 }2 ~9 X
1 E/ x  y- ~( u# M4,处理被阻止的字符串9 _( {1 @* b9 n

4 R( m% m- V# s6 G4 B8 Q比如,程序阻止了admin,因为怕攻击者注入admin表单中的数据。
* X+ p% P0 G; Q  r4 E5 ~- o( v  u7 G) [  \
我们可以这样# u/ o% n" p2 u) x% ~

) \% R' Q2 M* {0 M4 R- BA,oracle数据库: ‘adm’||’in’- q( I! \; W6 O* T: ?

2 W' o2 Z' N0 L, W, c) a1 x% mB,MSSQL数据库: ‘adm’+’in’& r7 c, A3 C3 D. B" W" b6 \8 e
4 P, I8 L$ O, E2 i) F* J: K/ S' J
C,MYSQL数据库: concat (‘adm’,’in’)
4 |- K9 [( [; w2 D- w7 ~; q+ ^  K3 [2 V: M  W: e' A/ \4 l
D,oracle中如果单引号被阻止了,还可以用chr函数. j% |+ \* E& M

8 U7 d- h- R+ r4 M8 Jsleect password from admin where username = char(97) || chr(100) || chr(109) || chr(105) || chr(110)
) \: j& x( |$ d, Q5 s+ g4 i( j
9 F9 \/ z; o3 e- u1 @还有其他方法。正在收集中.
" K4 W8 v: G$ t( A& [/ n6 c5 V- y% H  s& I
回复

使用道具 举报

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

本版积分规则

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