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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-13 09:50:58 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
SQL注入。有攻有防。知道进攻。才懂得防守.3 l) G" |, R1 j/ [8 t

6 Q9 I( |7 p: B有的时候,很容易受到SQL注入攻击的程序,可能会进行输入过滤,用来防止攻击者无限制的利用其中存在的设计缺陷。+ \- x5 N9 s& z6 v6 ^& L) x7 W$ s
9 y2 @0 G  s+ h; L
唱出会删除或者净化一些字符,或者阻止常用的sql关键词。) \/ u' e8 a9 \9 i4 N$ \& w

4 {. Q9 [0 o1 G' W( l我们通常有以下几种技巧,去避开这些过滤。
  L2 V5 T8 J1 O- D
" x! E0 O6 P: @- v; H! q# m- k1,避免使用被阻止的字符,即不使用这些字符仍然达到攻击目的。
: P- E/ i, X  {0 `% X* j9 Y
: Q) I$ N' S0 ?, h$ [8 OA,如果注入一个数字数据字段,就不需要使用单引号。
* t5 v# e$ V/ I! l& m! ^7 O5 @' [( }4 g- T! g0 Q; S
B,输入注释符号被阻止使用,我们可以设计注入的数据,既不破坏周围的查询语法。  _3 T  Z" e8 Q! c
; C  q5 W  v7 Q
比如, ?id=1′ 这里存在注入,过滤了注释符合,我们可以输入 ?id=1′ or ‘a’=’a+ U! W$ h6 l% n$ @$ v* X

2 J0 n' t; H9 U1 O6 C* N, S目的其实很简单,就是把后面的单引号给闭合掉。0 @" v0 p$ B; i3 Z2 S

- D+ @. c: j2 v8 }/ X5 J7 E& t1 N& hC,在一个MSSQL注入中注入批量查询的时候,不必使用分号分隔符。% A, Z! C+ f1 I

, f; H9 Y$ l0 ?/ {9 Q- K1 i8 U8 x) Y只要纠正所有批量查询的语法,无论你是否使用分号,查询的解析器依然能正确的去解释它们的。
' u1 }6 o* _) \1 V; O' p4 X. K- J, i' |9 f* l! s) F) \
2,避免使用简单确认
8 b& B) _; p5 ?5 l8 b1 I& h6 x& p7 x6 O) b7 F/ E1 {
一些输入确认机制使用一个简单的黑名单,组织或删除任何出现在这个名单中的数据,比如防注入程序。. P# G+ L5 I. [5 e2 C/ h

% t8 q0 u* E( {/ l9 L这一般要看这个机制是否做的足够的好了,黑名单是否足够能确保安全。如果只是简单的黑名单,那也有机会突破的。
3 t) J& d0 g9 N9 u  `! D
% f: t* C6 T5 C$ F0 BA,如果select关键词被阻止或删除  a5 }) h" T: Z

; r2 y$ c. |2 D- ]7 h$ D( I我们可以输入:
. |$ L, P, n8 V0 P
" Y  w. I/ G3 i* ~) c8 ?SeLeCt       注意大小写: S9 ?) M, m1 U  p+ T

4 Y, @, J8 E1 e8 `+ |selselectect    还记得ewebeditor是怎么过滤asp的么?# c& ?7 H. z* S4 [
% N* \1 q" F) _! K0 D
%53%45%4c%45%43%54                        URL编码& g& ~# s# C8 t) e5 y9 O. j
; h: ~3 m; l+ }( y) {. L
%2553%2545%254c%2545%2543%2554    对上面的每个%后加了一个25  ~. I' \3 w8 P- {: t
  o8 g, d- G( F. `2 u9 b* v4 h% a& V
3,使用SQL注释符7 Y+ e5 n' {2 [' l" y8 T% u

( C8 d1 e, t0 N# f, e: UA,使用注释来冒充注入的数据中的空格。
' k' ?* [# j( t; B- T
  K5 R+ T; F- C; V" Gselect/*yesu*/username,password/*yesu*/from/*yesu*/admin
; y- I" v7 w' c" V  T. x" p: N& l
+ y5 b4 p3 j/ z) F; @% x/*yesu*/来冒充空格: u6 M  m' t. ~7 D! H+ l8 r5 N5 m

9 U. L5 [1 J9 H# jB,使用注释来避开某些注入的确认过滤。0 W2 `- S- k. X3 J

" Q& G- V# g% USEL/*yesu*/ECT username,password fr/*yesu*/om admin  s' h# h. t" y. h" B$ O2 Z
$ M. j1 n0 S3 i5 n3 w1 Q9 C
4,处理被阻止的字符串/ t, z( W- T, Q" w/ z

& U: X) C8 s# @8 \  \3 P; p4 b# E比如,程序阻止了admin,因为怕攻击者注入admin表单中的数据。' @. a; E( S, d. k  I! q' ~

4 R. A: l1 K, i$ I9 ^, F我们可以这样
; ?5 n. ?& W: \, i- H# _, t; S) l, I+ A/ K) x2 y0 R7 [
A,oracle数据库: ‘adm’||’in’
+ t' q6 K9 B+ b/ j  s! {7 X' r+ c" p  b' u
B,MSSQL数据库: ‘adm’+’in’  C6 K8 I5 D# S2 Z0 V0 K+ Z6 b
5 J" A' g$ M7 j3 v
C,MYSQL数据库: concat (‘adm’,’in’)
" c/ h" h* ?5 h' |- v9 S1 j( H- D; ~5 h- |
D,oracle中如果单引号被阻止了,还可以用chr函数6 ]8 A* Q+ @) s0 r5 d
; }* n- {+ Y* p8 c
sleect password from admin where username = char(97) || chr(100) || chr(109) || chr(105) || chr(110)0 v9 N1 \; G: w& [: T( e
/ [" A- p4 k/ C" v1 X5 D) w
还有其他方法。正在收集中.4 G2 J6 \% Z1 v. `' `2 V( G

6 H3 ?" h" v6 A; i
回复

使用道具 举报

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

本版积分规则

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