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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-13 09:50:58 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
SQL注入。有攻有防。知道进攻。才懂得防守.8 P0 f+ R( V1 S

8 h' \; j& ~3 g. R% N3 X( W有的时候,很容易受到SQL注入攻击的程序,可能会进行输入过滤,用来防止攻击者无限制的利用其中存在的设计缺陷。1 d+ n7 H) e; Y

$ A" q! A+ _* n. ^5 p! X唱出会删除或者净化一些字符,或者阻止常用的sql关键词。1 |! T2 o  H* l9 z- t

$ A; S; O/ @! t/ k: }" l  o我们通常有以下几种技巧,去避开这些过滤。& D) K5 ~7 E6 |1 l4 _
# V* L1 m" w; q1 c8 r# x: A* }' p* f% x
1,避免使用被阻止的字符,即不使用这些字符仍然达到攻击目的。
$ j$ q, I) o. O
! j# [. H9 M. Y1 h1 _( l2 ^A,如果注入一个数字数据字段,就不需要使用单引号。8 b9 s  b% l; b% Z. g
! z. }. T" b3 Y! `- F0 b4 W
B,输入注释符号被阻止使用,我们可以设计注入的数据,既不破坏周围的查询语法。6 T) t, O0 l: N

# I' ~0 a- \  V& c8 y" P比如, ?id=1′ 这里存在注入,过滤了注释符合,我们可以输入 ?id=1′ or ‘a’=’a
9 }9 ~6 O- D' L) C6 m# ]& m6 ~9 s$ l* X& y/ }, |3 p) N) @' [$ q
目的其实很简单,就是把后面的单引号给闭合掉。, _: U# s" ^  z/ T# E8 q7 `. `

% B. p0 \" c. y. K, M' WC,在一个MSSQL注入中注入批量查询的时候,不必使用分号分隔符。
, N: b' M* K& g3 T% m2 W+ W" S2 Q
% Y2 `8 @7 o2 k8 t只要纠正所有批量查询的语法,无论你是否使用分号,查询的解析器依然能正确的去解释它们的。2 D" B0 Y" ~. e: M. D
, J6 a2 U! e" }5 b
2,避免使用简单确认
! E" M. x; ~8 X! i1 D( I: l& M/ B
/ k! X6 d4 b2 Z# X1 n一些输入确认机制使用一个简单的黑名单,组织或删除任何出现在这个名单中的数据,比如防注入程序。
2 {$ v) `0 Y: S5 G& V) V  t
6 w' ]' D* a3 c$ v; q2 K! j这一般要看这个机制是否做的足够的好了,黑名单是否足够能确保安全。如果只是简单的黑名单,那也有机会突破的。
; D: g; z* }7 u  w& |( d* M: t
! }$ K: t. n/ fA,如果select关键词被阻止或删除
7 z# z8 W) S: C$ o+ [' l6 l  d4 g! V/ p" R5 e6 i3 ]
我们可以输入:
! s; {7 j  D2 T% P( Q
& {) g9 P& Z* ?2 @SeLeCt       注意大小写' w2 E. k; \! N4 y
" Q! [1 w# B) f; Y& r- R* s
selselectect    还记得ewebeditor是怎么过滤asp的么?
; s( q; d) d  V/ j$ a& T2 ^! j# o
%53%45%4c%45%43%54                        URL编码  P- j, f& S" M
% v+ _5 x* [3 P& [
%2553%2545%254c%2545%2543%2554    对上面的每个%后加了一个25
7 ~& Y' f, _8 F. i( l! i# K% F3 l6 `& [" ^% ~' `
3,使用SQL注释符1 L3 D0 A2 P" B; L$ c
/ E3 U* N" _  l& q
A,使用注释来冒充注入的数据中的空格。. d+ [3 K9 J. M: ^: E2 q

# ^: {0 s7 s! k. j: bselect/*yesu*/username,password/*yesu*/from/*yesu*/admin
9 Z1 v/ k" Z4 T. A; o4 k4 b( z+ N: }& ^7 T
/*yesu*/来冒充空格
5 D! P# \" W/ ^# i0 h6 P) y% E! Y( i& D7 K" @/ a$ d
B,使用注释来避开某些注入的确认过滤。
/ u& y) f6 O! I5 d9 k  V, D" g) o
3 J5 |9 j( Z7 l1 g' [$ u9 k6 mSEL/*yesu*/ECT username,password fr/*yesu*/om admin+ S- q/ Z  w: T

) _! H$ ^% A  N& c3 B0 }6 ^4,处理被阻止的字符串$ P4 [$ }5 r9 A/ O$ |
$ y8 Y0 q- G" i' m0 e' a* m
比如,程序阻止了admin,因为怕攻击者注入admin表单中的数据。) J# C* s  |2 i, ]9 L* O3 X
' i3 X0 [7 k+ z
我们可以这样
- p9 V1 ?! [, R
3 v7 [6 ?( L3 x- D) L* eA,oracle数据库: ‘adm’||’in’9 S. I3 X3 y4 j1 n
" @1 Y- I6 U; U4 p$ w3 p3 i
B,MSSQL数据库: ‘adm’+’in’
5 @% |0 X: ?" I7 i8 s2 ?
8 u$ O% A# |0 m6 H) NC,MYSQL数据库: concat (‘adm’,’in’), N3 S0 S9 k! q+ M, Q

  n3 g0 M! ?# A$ w3 x/ aD,oracle中如果单引号被阻止了,还可以用chr函数
! \) Z$ u0 Y5 D  A$ d& w1 m8 z0 x4 K
sleect password from admin where username = char(97) || chr(100) || chr(109) || chr(105) || chr(110)
9 ^4 E4 b& f. M3 {! o: I1 r6 J1 U" P& h  e( y' U4 E
还有其他方法。正在收集中.9 i9 ?  \& t& e" m9 O0 L5 C
1 D/ @9 N: e) e) ]6 w0 ?
回复

使用道具 举报

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

本版积分规则

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