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

今天天气不错,也是我们杀人放火的好时间。今天的篇幅会有点长,所以分成两部分来写。

前三天讲的漏洞,可能大家会觉得有点不愠不火,特别是昨天那个XSIO,更是被茄子称为“猥琐流”,我想也确实是挺猥琐的~~

但这些风险是真实存在的,不能在惊笑之余因为“猥琐”而忽略这些风险。

今天换个话题,讲讲更传统一些的漏洞:XSS

我这里不想浪费任何口水讲XSS的风险,如果还有人不了解或者是轻视它,那么我以后会再单独论述。在这里只想说的是,任何忽视XSS风险的人(更多的是程序员,因为没认识到),都会受到深刻的教训。什么?你还没被教训到?好吧,不是不报,时候未到

昨天看余弦在blog上发了个passport.baidu.com的XSS漏洞,利用的是u参数(百度的JS数据流注入型跨站),那么今天的开篇,就让我用一个同域名下的类似漏洞作为引子。

XSS1:百度个人中心登录处 XSS
这个漏洞实际上从某种程度来说是不能利用的,叫做bug更合适一点。但是这个例子非常典型,用来作为今天的开篇很不错。

测试方法很简单,打开 http://passport.baidu.com/?login 然后在输入用户名的地方输入:

</script><img onclick=alert();>

注意别输错了
然后密码随便输入一个,提交登录。

之后就会看到页面被破坏掉了。
把因为我们用了 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><'

注意是单引号,而不是XSS常用的双引号。
我们的可爱小框直接弹出来了。

实际上这里会弹两次。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">
<input type="hidden" name="tpl" value="sp">
<input type="hidden" name="username" id="_r_username" />
<input type="hidden" name="password" id="_r_password" />
<script>
document.write("<input type='hidden' name='u' value='" + location.href + "' />");
</script>
</form>

而这里我们通过这个js,就可以把location.href的值传入到网页标签里去,所以我们使用

http://hi.baidu.com/testuser/creat/blog/#'><script>alert();</script><'

而由于在这里input标签的value用的是单引号,所以我也需要用单引号去闭合它。

最后,我们的XSS就被动态加载进了页面,从而得到执行了!


请继续关注 百度空间多处DOM XSS漏洞(下)

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


类别:象牙塔 | 添加到搜藏 | 浏览() | 评论 (1)
 
最近读者:
 
网友评论:
1
2008-07-14 20:28 | 回复
没想到这个洞现在还存在
 
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码: 请点击后输入四位验证码,字母不区分大小写
      

     

©2009 Baidu