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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-13 09:50:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
SQL注入。有攻有防。知道进攻。才懂得防守.
% [3 I) b+ X% y; h; R, W) h3 U' o0 ^# C2 P8 j* x$ y
有的时候,很容易受到SQL注入攻击的程序,可能会进行输入过滤,用来防止攻击者无限制的利用其中存在的设计缺陷。
5 K4 n$ p9 N% {0 @1 o) P/ ~$ p* s3 B& b: k8 v
唱出会删除或者净化一些字符,或者阻止常用的sql关键词。
" Z$ ^7 @* g/ Q4 d9 ~# j2 S" W& n1 Q! O: G4 |
我们通常有以下几种技巧,去避开这些过滤。
2 j$ [6 ?# P4 H- {2 V3 A2 h" }; @3 Q; n# }1 D7 w" h$ O
1,避免使用被阻止的字符,即不使用这些字符仍然达到攻击目的。
- d( X& |9 P( F
( [; r% \: g" y, C; C% w) {* tA,如果注入一个数字数据字段,就不需要使用单引号。
9 }0 O3 m' w* n: K3 ~, l3 u
. u4 F; R5 Z. M$ W- i9 iB,输入注释符号被阻止使用,我们可以设计注入的数据,既不破坏周围的查询语法。
' {: A: S+ d; N7 C" R  _. q* X+ M6 \- r4 t+ `5 w
比如, ?id=1′ 这里存在注入,过滤了注释符合,我们可以输入 ?id=1′ or ‘a’=’a/ X% n+ B) b+ b; _, p8 I6 e& [' [" c
, ~& u8 |/ g/ K6 [& b5 I
目的其实很简单,就是把后面的单引号给闭合掉。
7 R2 E( {) t9 c, u9 N+ v% d
- }( `6 p5 q  GC,在一个MSSQL注入中注入批量查询的时候,不必使用分号分隔符。
. s2 J/ }0 s) |- A* @+ f4 t3 J0 I; \6 q- V7 e
只要纠正所有批量查询的语法,无论你是否使用分号,查询的解析器依然能正确的去解释它们的。/ |. B# C# A  R4 b! A
7 [6 w0 E; W/ }' S
2,避免使用简单确认4 Z" ~9 @4 m8 G+ x/ H

1 @' f7 E+ \4 k+ H9 n$ S( `- ?; v# F/ T一些输入确认机制使用一个简单的黑名单,组织或删除任何出现在这个名单中的数据,比如防注入程序。9 N- X  t6 f5 z! F. t

0 x3 N. f5 J3 |- I/ E这一般要看这个机制是否做的足够的好了,黑名单是否足够能确保安全。如果只是简单的黑名单,那也有机会突破的。8 X/ Y6 }2 N! Q8 w' ]
5 w0 P8 V1 p" X! ?8 b# a- `
A,如果select关键词被阻止或删除2 K  M" a9 C" z# g, f

) V5 {+ ?9 [. l2 J我们可以输入:
6 c  ?5 i: z( @2 C
8 Z0 |, x8 H% V' Z# qSeLeCt       注意大小写
0 m5 v9 |  f/ ]+ ?/ t: u% I- [8 ^0 X4 ]. S# r
selselectect    还记得ewebeditor是怎么过滤asp的么?
( R4 n  \5 |% S+ f# T* c6 E0 @0 M$ e- g4 q
%53%45%4c%45%43%54                        URL编码
# Q6 ?# n* @; M+ M: g3 `" [" p& z$ @* J7 H; s
%2553%2545%254c%2545%2543%2554    对上面的每个%后加了一个25
& c4 i+ }( z: H2 d1 k) l% b  q. p% l: ]( Z8 m
3,使用SQL注释符5 U, ?6 W( P1 g6 }
+ l5 {9 c$ a1 _) N0 n
A,使用注释来冒充注入的数据中的空格。' `4 M" y; s  z# i( b3 b/ F

  K/ V" I; i0 B$ Kselect/*yesu*/username,password/*yesu*/from/*yesu*/admin$ Z+ X9 T! a& W& v  i+ v1 i$ @

4 w1 Y4 j2 |" b/ b) ~$ g' e. W/*yesu*/来冒充空格+ N, \( W5 I6 [0 i
  S3 o2 P& L& J5 {
B,使用注释来避开某些注入的确认过滤。! [$ ^' z( B/ T) n- B
" J% \5 b5 u! b0 n
SEL/*yesu*/ECT username,password fr/*yesu*/om admin9 T. F. P5 k- n) s) x* @3 u
+ H0 N# O( m) l( r
4,处理被阻止的字符串$ `5 i) m& G; N- E
- d/ g% M& h; v$ [2 F2 q; F
比如,程序阻止了admin,因为怕攻击者注入admin表单中的数据。, B4 b/ ]$ i. M% z7 y" Q

1 t, A# R: p8 I. q( v8 q3 I0 |我们可以这样6 v/ N* x/ N! Z: e% w. g

) P( k" b+ o. g5 XA,oracle数据库: ‘adm’||’in’
0 K' m/ T9 _7 A  m. j. ^+ e
2 {# r7 J( t) QB,MSSQL数据库: ‘adm’+’in’
. l6 s3 e: A5 O/ N0 _' f- g$ I
9 k; J8 ~6 k* O+ F+ Z' ?6 ?# m7 sC,MYSQL数据库: concat (‘adm’,’in’). ~5 Z/ s* a# d3 |$ v) V( O* X# O
+ E% O, E$ R: T$ x2 ]% V3 @
D,oracle中如果单引号被阻止了,还可以用chr函数
# x. h7 C* `* s5 k
& R5 }- C" k& [9 J9 Nsleect password from admin where username = char(97) || chr(100) || chr(109) || chr(105) || chr(110)' A# s6 `" m, \0 _  ~# \

5 S0 J" Y) W. Z" B2 l还有其他方法。正在收集中.* m5 `: Q4 a! _  L0 V. U( ]: a
9 G. ]: b! x5 e; u1 a9 A! ?
回复

使用道具 举报

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

本版积分规则

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