Secur1ty just lik3 a girl. B0th of th3m h4ve s0me h0les. Y0u alw4ys try to f1nd the h0le, but n0t 3very tim3 y0u c4n 3xpl0it it!
查看文章 |
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: 本次活动仅仅是个人行为,与任何组织或集体无关. |
最近读者:


