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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-13 09:50:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
SQL注入。有攻有防。知道进攻。才懂得防守.
8 ~0 V: I5 h" T0 Y% _+ X; d* V5 Y" p+ N7 ]$ s1 x7 C
有的时候,很容易受到SQL注入攻击的程序,可能会进行输入过滤,用来防止攻击者无限制的利用其中存在的设计缺陷。
7 x& V! d  u2 C8 e- W- m- P) T, g& F! v7 Y( m/ G( `
唱出会删除或者净化一些字符,或者阻止常用的sql关键词。5 W( N+ `( }9 f/ [9 f; M4 b
" B2 O: A7 r# d5 H, j
我们通常有以下几种技巧,去避开这些过滤。* T0 n( I  K( ]
$ C' _+ _7 m) F$ m- x
1,避免使用被阻止的字符,即不使用这些字符仍然达到攻击目的。$ X; }0 Z; i& C) h) K
7 C3 z3 @' r; Q9 \; ~
A,如果注入一个数字数据字段,就不需要使用单引号。
3 E5 Y6 O1 h, R: V: f+ B+ N* ?: o0 z
B,输入注释符号被阻止使用,我们可以设计注入的数据,既不破坏周围的查询语法。
  c% T. a2 s" r
! v: ^, q' R; e, c( j1 s4 `0 s比如, ?id=1′ 这里存在注入,过滤了注释符合,我们可以输入 ?id=1′ or ‘a’=’a( c& Z# }5 ~% M4 {. R7 u
# Q# h/ `6 i/ g4 f6 e: C: G
目的其实很简单,就是把后面的单引号给闭合掉。
8 C% V: w6 g' H! [+ t- s$ f& X3 ]# c' P
C,在一个MSSQL注入中注入批量查询的时候,不必使用分号分隔符。
* N3 J. y, n4 k  a/ Q" w3 G+ K  [
6 J' H/ ~4 ], B# N只要纠正所有批量查询的语法,无论你是否使用分号,查询的解析器依然能正确的去解释它们的。" {: E1 S  W' M0 s/ u/ L" Y  h

- l' r  O$ _7 X$ p9 |& Z2,避免使用简单确认$ B3 P+ _: Q- P: s: O6 R

8 |. D: F' t# l0 \+ T( v一些输入确认机制使用一个简单的黑名单,组织或删除任何出现在这个名单中的数据,比如防注入程序。" I/ \" y6 L, L

0 Z3 V( w# G. b' g$ S这一般要看这个机制是否做的足够的好了,黑名单是否足够能确保安全。如果只是简单的黑名单,那也有机会突破的。: @& D. O) e4 k5 R
2 T" C9 P* Y, G+ m5 }5 M" z6 R
A,如果select关键词被阻止或删除
8 C6 A" @, E- `; }$ b" r8 f/ K/ x5 N* ^6 d1 b
我们可以输入:
. M+ F7 L( U2 l: @, C) M- K4 u9 b& s* q! j
SeLeCt       注意大小写
. n+ B  o/ v5 `' s  T) Z+ _5 x
  i0 H( n& M0 q$ }4 Q* eselselectect    还记得ewebeditor是怎么过滤asp的么?
/ \, p8 @5 v+ D
: \6 G* [) `) ?) O1 B%53%45%4c%45%43%54                        URL编码
7 R& @9 I4 d1 [3 {1 h8 E5 \6 A9 c2 h
%2553%2545%254c%2545%2543%2554    对上面的每个%后加了一个250 q9 A& [, C$ u  ?& x9 k

/ H' j) N7 w9 m* S3,使用SQL注释符
7 J4 Y0 c( K7 Y+ S3 s
$ H# m# J9 A+ ]" `6 iA,使用注释来冒充注入的数据中的空格。
4 X8 m4 w3 v( H) v7 @
# v, [. E. \. \select/*yesu*/username,password/*yesu*/from/*yesu*/admin# G8 A0 J! [2 S3 W' a, i

& p+ p2 M$ b! b( x" l7 E% T/*yesu*/来冒充空格
( g& w% V8 ?, M" [0 B$ s$ p; L7 V4 X( e
B,使用注释来避开某些注入的确认过滤。
. X' ?3 W6 k' e1 g' [
5 ^) o8 J& \) qSEL/*yesu*/ECT username,password fr/*yesu*/om admin  s& f% R; D$ D9 V! b+ I9 K+ w

9 A6 W% M* ^4 j3 d* g1 V6 ^7 G4,处理被阻止的字符串
5 T# G/ Z: T; Z. i* y1 j. P- Y: }, [+ L4 i* B3 r5 w4 I
比如,程序阻止了admin,因为怕攻击者注入admin表单中的数据。
; E/ k0 n8 o, k( _# W8 D# Q" N
2 J" k* a2 J9 l我们可以这样3 }! S" x6 r; g

" N8 f# o" l! b, |9 w/ v. E9 tA,oracle数据库: ‘adm’||’in’9 `/ }, z/ i% ]1 ~
0 ?$ M5 M; ]- ~
B,MSSQL数据库: ‘adm’+’in’# m4 ^$ k: D+ _5 Y: k" y( x- c
) ~9 J: }6 x# [5 D
C,MYSQL数据库: concat (‘adm’,’in’): i! [% I; l: \8 O+ l9 D

3 Z; H6 A9 U( M2 g  O; fD,oracle中如果单引号被阻止了,还可以用chr函数
- H) ^0 b  d2 l# R# k9 |4 E8 C" `
/ d6 d' w6 g/ K# g( ksleect password from admin where username = char(97) || chr(100) || chr(109) || chr(105) || chr(110)
3 n- t  T; X, h; Q- V3 t% m/ s' w5 W4 i5 j' x
还有其他方法。正在收集中.
' V5 O# G0 s7 u6 U
* k" Z- `- A4 b6 _9 N
回复

使用道具 举报

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

本版积分规则

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