中国网络渗透测试联盟
标题:
PHP中SQL注入,绕开过滤,照样注入
[打印本页]
作者:
admin
时间:
2013-1-13 09:50
标题:
PHP中SQL注入,绕开过滤,照样注入
SQL注入。有攻有防。知道进攻。才懂得防守.
( X7 D7 ^, s( [$ J0 V
b# A# H3 v$ ^3 f% g# i' u' N
有的时候,很容易受到SQL注入攻击的程序,可能会进行输入过滤,用来防止攻击者无限制的利用其中存在的设计缺陷。
# `/ c/ s. Q( I V5 U5 r
" o1 M$ I; j3 j( ?& O6 A4 I, k
唱出会删除或者净化一些字符,或者阻止常用的sql关键词。
; d8 ^: w" z( y
8 Y5 x0 I4 o! O9 ?8 [6 }
我们通常有以下几种技巧,去避开这些过滤。
; r( H, G- e8 x- M* X2 B
& F7 ]. a. K4 n$ l" [
1,避免使用被阻止的字符,即不使用这些字符仍然达到攻击目的。
" j' x& y* l# a5 ]; d% Q, k
0 P* B, s/ i, v
A,如果注入一个数字数据字段,就不需要使用单引号。
3 ~4 q7 G) D# h
/ P( {" C# F& B" K6 ?$ e% a7 |
B,输入注释符号被阻止使用,我们可以设计注入的数据,既不破坏周围的查询语法。
4 ]' R% M$ S+ W
! m" w% d) F5 t1 ?* K
比如, ?id=1′ 这里存在注入,过滤了注释符合,我们可以输入 ?id=1′ or ‘a’=’a
1 Z" L1 p2 i2 x. c1 z/ b
( r0 e( k8 k( E) D. m
目的其实很简单,就是把后面的单引号给闭合掉。
8 m" I1 R: }% F1 G
2 I% O* Q5 f! l% \4 J$ i- r
C,在一个MSSQL注入中注入批量查询的时候,不必使用分号分隔符。
( z1 u' t7 ?5 b
& U+ p/ E' |* y
只要纠正所有批量查询的语法,无论你是否使用分号,查询的解析器依然能正确的去解释它们的。
1 h9 i( g+ N( o! o
/ |! S" O# O, U2 j3 Y; o# t# w
2,避免使用简单确认
+ u Q) J4 X, T& n- P" l
* m) b& ?- G% j& {3 L
一些输入确认机制使用一个简单的黑名单,组织或删除任何出现在这个名单中的数据,比如防注入程序。
2 v1 ^/ R: i K" o6 V) ^, b6 [
" O3 u2 I' [6 |% S5 f3 h0 t
这一般要看这个机制是否做的足够的好了,黑名单是否足够能确保安全。如果只是简单的黑名单,那也有机会突破的。
# @* y @8 t- ^: U6 J( F3 I( Z& G* e
, v9 u, E% B5 Y" h ?
A,如果select关键词被阻止或删除
6 c6 J9 Z+ `4 _8 R) c+ X) ` y
$ k! J4 [! o* F/ K' j
我们可以输入:
! E m% X1 C# A4 ]5 a) Q
) h. w& C" K( K5 k
SeLeCt 注意大小写
0 ?9 h7 c3 K$ F2 F
3 u9 y! F0 K8 p0 e( Z e: I
selselectect 还记得ewebeditor是怎么过滤asp的么?
1 T6 N: k! V* B/ b7 O% t
, v. W/ i I9 h2 J
%53%45%4c%45%43%54 URL编码
% u3 Z0 G9 b8 I8 p
J, R$ O9 }8 ]6 @6 K( G
%2553%2545%254c%2545%2543%2554 对上面的每个%后加了一个25
" Y. u% k$ }$ e, o; y
8 T# v* \5 S" K3 w4 ^
3,使用SQL注释符
2 R; O3 \! y H ^3 R
4 B# J. w$ U: t+ ], [$ J9 S) g
A,使用注释来冒充注入的数据中的空格。
- `8 e) O- M' @& P4 d; ]
% t# Q, O* }+ X: g9 h2 u
select/*yesu*/username,password/*yesu*/from/*yesu*/admin
# i( R0 G; C( @# S
9 H/ Q0 N( D9 v" `' b
/*yesu*/来冒充空格
3 d8 V$ P8 a; y2 v o' [
8 ]3 |$ [! g$ C8 O; `
B,使用注释来避开某些注入的确认过滤。
4 ^9 l6 C) ^3 K/ _" X- \
5 d6 I5 d! G5 i0 N, y4 l2 k2 R) i
SEL/*yesu*/ECT username,password fr/*yesu*/om admin
3 P- l# m3 L a4 f
! _6 y0 `+ b8 E! r" [5 J9 S
4,处理被阻止的字符串
5 _$ k2 C# Y8 `) E" k
/ n, Q/ Z7 W2 P1 ^( V
比如,程序阻止了admin,因为怕攻击者注入admin表单中的数据。
" {7 f. p' @) Z( V2 O c
M0 D I! T* \$ g. r: q
我们可以这样
8 U1 I8 E0 Z$ k3 i
& k" x3 M0 L+ |" a* w" T% Z
A,oracle数据库: ‘adm’||’in’
4 e% r) [* y& ^; _- N
. U& M- B6 L; a4 i6 n
B,MSSQL数据库: ‘adm’+’in’
2 L L5 ]) K; \. F, @
+ u* N; ^6 R U8 @/ a) ]' U; U2 s
C,MYSQL数据库: concat (‘adm’,’in’)
: Y" r! u6 y8 q' d% l U
, l. \( x/ |+ t- J" e& H3 |- ]
D,oracle中如果单引号被阻止了,还可以用chr函数
5 S$ {! o* w+ ?- r9 v8 R7 V6 p
# w- i F2 @ i1 g( N, x
sleect password from admin where username = char(97) || chr(100) || chr(109) || chr(105) || chr(110)
2 M& `9 V$ ^" E4 p J
7 N/ I }- g0 q" l
还有其他方法。正在收集中.
( Q' W& u# M8 g n
! b% Z8 _. x) n3 L+ B4 y
欢迎光临 中国网络渗透测试联盟 (https://cobjon.com/)
Powered by Discuz! X3.2