找回密码
 立即注册
查看: 2815|回复: 0
打印 上一主题 下一主题

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-13 09:50:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
SQL注入。有攻有防。知道进攻。才懂得防守.9 O1 s: |$ D; l
# Z7 s3 c7 L2 J# J  Y/ t
有的时候,很容易受到SQL注入攻击的程序,可能会进行输入过滤,用来防止攻击者无限制的利用其中存在的设计缺陷。
& H1 D+ i" r- a. \% U) A
. g: z" n  K3 T$ \3 }唱出会删除或者净化一些字符,或者阻止常用的sql关键词。; V8 g' I+ y; t* G3 c8 K$ N
* H8 f3 A) ?2 F8 Q$ z6 e* o: }2 c' H
我们通常有以下几种技巧,去避开这些过滤。9 j+ v: e- D" `6 z* _2 \

- \+ S' }# P* h1,避免使用被阻止的字符,即不使用这些字符仍然达到攻击目的。2 [0 x5 @, Z' A3 S0 X6 C

- d- A/ s" {" m' A8 E5 tA,如果注入一个数字数据字段,就不需要使用单引号。; g: {  z, a3 h0 q

! }& w+ t& P: {& u2 P  _; oB,输入注释符号被阻止使用,我们可以设计注入的数据,既不破坏周围的查询语法。! @% p# P' {( [& k8 t" _7 V

" z2 @  W) d2 F2 f$ r比如, ?id=1′ 这里存在注入,过滤了注释符合,我们可以输入 ?id=1′ or ‘a’=’a
# z. ~) |. I9 W! T5 I5 j! g" t$ q- i! k
' u) g9 D3 s, Y目的其实很简单,就是把后面的单引号给闭合掉。) i- n( {( Z# \0 Z

' l* S4 @- h/ \9 E, QC,在一个MSSQL注入中注入批量查询的时候,不必使用分号分隔符。
* V- r& U9 P, Y4 X9 j6 i. o1 z) X6 c, o  Z7 T" w3 C. D3 f
只要纠正所有批量查询的语法,无论你是否使用分号,查询的解析器依然能正确的去解释它们的。
0 ^4 T" B. V3 C8 p+ G2 l
! ]  j% v: {( m' `" P2,避免使用简单确认3 @+ _. u/ W2 P9 ]

! g. h2 N' m! Q' n5 v/ p8 d一些输入确认机制使用一个简单的黑名单,组织或删除任何出现在这个名单中的数据,比如防注入程序。
# n, }9 @& C9 r0 g# Y2 t3 H3 ~: Z; \1 F, T" k
这一般要看这个机制是否做的足够的好了,黑名单是否足够能确保安全。如果只是简单的黑名单,那也有机会突破的。/ o+ U9 t$ p5 X% d
3 {! p* `8 H. ?: R, G
A,如果select关键词被阻止或删除
- Y6 U4 l! t9 S7 k/ V/ N  X  Q1 R  g  a/ ]! {& i' G
我们可以输入:: v, t5 c+ s/ g1 Z4 \4 Q
- |1 E( g, x9 j1 O- X1 P5 q0 s
SeLeCt       注意大小写
2 x: a4 T6 z# T, M7 k* @( G1 M0 l0 H& |, u
selselectect    还记得ewebeditor是怎么过滤asp的么?; c5 I! K% `3 d, k1 {$ `+ U7 {4 Q

5 Z- |9 [$ _& Y' L1 D  m" f%53%45%4c%45%43%54                        URL编码
5 Q9 s9 w2 M; h( F. }# C" R
4 l2 ]' G4 P" j+ V+ Q% H%2553%2545%254c%2545%2543%2554    对上面的每个%后加了一个25
9 L" a1 H. ^: T) l
- S1 b+ t+ t* Y1 N2 M: Z, u3 j3,使用SQL注释符% ^. Z& z! `. V8 J1 S6 n/ {

/ ]; j) I- p, a6 @" ]A,使用注释来冒充注入的数据中的空格。
& h# n6 o. x$ C: x
* G% n7 b3 m, L9 Sselect/*yesu*/username,password/*yesu*/from/*yesu*/admin( x8 \) F. u$ `8 D7 s

" i6 f/ _! w4 Z+ @) r* Q3 {/*yesu*/来冒充空格
( @2 A- F4 o0 Q' q! E/ |+ i7 n1 r  L( X( E, Z% \# ~2 [
B,使用注释来避开某些注入的确认过滤。
& W4 j( y6 V0 u3 ?" {
/ W0 U) Y! i8 S9 @SEL/*yesu*/ECT username,password fr/*yesu*/om admin
; \+ `1 V4 S, P4 ~# a$ L& C  m" S5 N2 M
4,处理被阻止的字符串* P' ]9 D5 A: \, r
) u* {% k# B# e
比如,程序阻止了admin,因为怕攻击者注入admin表单中的数据。
4 O4 n( |. B7 c8 L! R: \/ r4 k4 x2 A/ r
我们可以这样
& d2 \7 b/ i' X8 R' ?
2 Y- S. g2 _* ?& b# ]2 uA,oracle数据库: ‘adm’||’in’
8 B; _# X$ Z$ y' L0 n" w* m- u: e) \! v; O3 |1 Z. j9 q% {/ {
B,MSSQL数据库: ‘adm’+’in’
8 r( |! E. G; Q% b) D3 q. V
4 p! i; q, e( f( c% FC,MYSQL数据库: concat (‘adm’,’in’)
8 e4 y; n1 `, s3 a* H2 M. U& z8 h5 \
D,oracle中如果单引号被阻止了,还可以用chr函数
$ X8 m* b3 F) y$ |% _$ [2 }$ c- Z: L6 c* g* l% a- G; A
sleect password from admin where username = char(97) || chr(100) || chr(109) || chr(105) || chr(110)
5 }* B$ H! _% U/ x7 E1 H+ A; X" B9 T" r+ X$ \5 B( F1 d3 h
还有其他方法。正在收集中.; h5 y- n6 R8 D! Q- F6 n

& t' K% e6 c+ h
回复

使用道具 举报

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

本版积分规则

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