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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-13 09:50:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
SQL注入。有攻有防。知道进攻。才懂得防守.
8 X2 e7 j4 K. \0 C1 j( @0 [& B! i/ F" Y9 t, Z: Z( f
有的时候,很容易受到SQL注入攻击的程序,可能会进行输入过滤,用来防止攻击者无限制的利用其中存在的设计缺陷。! C! c' k8 {  T* B* E) ~% |: G

- H# f, L& l- P7 y唱出会删除或者净化一些字符,或者阻止常用的sql关键词。7 M3 ?$ K( Z5 m$ k( w' R

& I9 N4 f" ~3 j6 e9 q! l我们通常有以下几种技巧,去避开这些过滤。- o7 ?' ~) B2 d1 \; ?5 T, L

  i) J- Q9 A! E; g0 P1,避免使用被阻止的字符,即不使用这些字符仍然达到攻击目的。
6 w! G9 f: i  d% B
" U8 P% O. X3 |0 o* W( w* K: {% |" KA,如果注入一个数字数据字段,就不需要使用单引号。  V0 I; y2 ?5 Y: H

4 n7 S7 {6 O( t1 QB,输入注释符号被阻止使用,我们可以设计注入的数据,既不破坏周围的查询语法。
+ e. P. @0 i: @, u- I1 g1 X. j9 P; S& e$ |: H5 M. C
比如, ?id=1′ 这里存在注入,过滤了注释符合,我们可以输入 ?id=1′ or ‘a’=’a
. `2 L& C: K: v0 `$ R  L& K5 r9 r8 \0 @. ^) L! V
目的其实很简单,就是把后面的单引号给闭合掉。" b9 n8 ?3 _: r9 n& d

+ G  l: ~" y. Y& E' N5 v9 j, f2 tC,在一个MSSQL注入中注入批量查询的时候,不必使用分号分隔符。
  F( L' A8 i4 y( n6 r
- |* o9 e- a- g+ z# ^. m只要纠正所有批量查询的语法,无论你是否使用分号,查询的解析器依然能正确的去解释它们的。
0 R! I, [' _/ m/ {+ H
* ~: Y! K, y0 t% I# ^2,避免使用简单确认
  D3 b2 K: W  U8 h  H# E8 V* O
9 g, j& v9 _3 I& N一些输入确认机制使用一个简单的黑名单,组织或删除任何出现在这个名单中的数据,比如防注入程序。
: P; E8 {+ v, v9 }, e8 T# F1 G% P! v4 D2 x/ j2 s- s: b# `( o
这一般要看这个机制是否做的足够的好了,黑名单是否足够能确保安全。如果只是简单的黑名单,那也有机会突破的。
) P5 H1 w, x9 N2 J, m
$ ^8 A) b3 V$ q, \, LA,如果select关键词被阻止或删除. U! q. ]: C- F7 O7 {

( V, R/ q' \7 [/ g% c( y. m我们可以输入:* O, R# y9 v; y0 A

0 b; E& x  n' a) u$ h5 GSeLeCt       注意大小写
: ~, V* ^5 e+ X
; [8 N$ m+ c8 xselselectect    还记得ewebeditor是怎么过滤asp的么?
# |4 u: d( L( O$ \2 v( W- R
) L% V, v2 {3 }: m: {' z%53%45%4c%45%43%54                        URL编码; Q5 F$ b  |# `2 J
% j; |. i( K" _0 E* d, [+ ^+ C- N
%2553%2545%254c%2545%2543%2554    对上面的每个%后加了一个25) s3 Z" U( F0 u5 q
; W9 O. |# e7 ~# c; u
3,使用SQL注释符
4 A8 l% G: ]8 u- X' e, I6 s  ^6 k, D$ q: x
A,使用注释来冒充注入的数据中的空格。
. d5 e0 ]' X" b7 S) P3 A% \
+ j# l! s) p$ e! u- Iselect/*yesu*/username,password/*yesu*/from/*yesu*/admin
  |; ?' }. h2 D/ |4 F
2 c$ Y: U2 Y( x! O- W/*yesu*/来冒充空格* V7 Z. |" N( W( S2 J7 B) H

$ C  i6 w, p; c' g$ wB,使用注释来避开某些注入的确认过滤。6 U  s% _* T0 z( f
, x' |. p$ g/ g9 Z. C0 Q' B5 Z  f- _) L
SEL/*yesu*/ECT username,password fr/*yesu*/om admin1 D% t/ J( s; _5 y& B# R$ z

2 s& l' `- O( a$ h! ]( k. S# X4,处理被阻止的字符串0 _0 V$ z( H4 S! d0 U/ n. ^
% z6 I5 y5 O; R/ x! X! ~
比如,程序阻止了admin,因为怕攻击者注入admin表单中的数据。  B: [0 ]; l. k3 \) R  [" x

3 \1 `5 T# Z# E) _. y0 Z我们可以这样, c' U& n2 i5 |5 Z* y3 x
% r3 _' X" w$ r2 w
A,oracle数据库: ‘adm’||’in’4 k: e  |4 S7 p4 R) ]* Q9 X, G

3 d! l  _' `1 O. KB,MSSQL数据库: ‘adm’+’in’0 h& S- K; W% P7 o
2 \* j7 @2 q7 E3 g
C,MYSQL数据库: concat (‘adm’,’in’)
& ]2 K& P: [' j" g3 r: b9 y7 f0 M& c* F. T7 V; E7 t
D,oracle中如果单引号被阻止了,还可以用chr函数) x8 _  s7 }3 k: }: p+ V
; J$ m, G% B: y, F
sleect password from admin where username = char(97) || chr(100) || chr(109) || chr(105) || chr(110)7 Q9 c6 _% l$ e- m" V+ m

/ M% @8 I! `& ~- t还有其他方法。正在收集中.
' j+ i- B2 Y- t" l
* a+ j1 A2 g+ P6 _  ^
回复

使用道具 举报

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

本版积分规则

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