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

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

缺陷编号:wooyun-2014-072917

漏洞标题:绕过补丁再次重置墨迹天气任意邮箱密码

相关厂商:mojichina.com

漏洞作者: 白非白

提交时间:2014-08-19 10:35

修复时间:2014-10-03 10:36

公开时间:2014-10-03 10:36

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

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

为什么要刷点wb呢,因为这个月的301太给力。
对于这个漏洞,我只能说猜中了过程,没猜中结局。

详细说明:

0x0 环境介绍
经过个人对墨迹天气的多次反馈与沟通,墨迹的运维大大反馈说开发哥哥们终于修复了 WooYun: 墨迹天气android客户端系列2:修改任意邮箱用户密码姿势一
那我看一眼是不是真修复了。
0x1 diff
WooYun: 墨迹天气android客户端系列2:修改任意邮箱用户密码姿势一 中找回密码的连接如下:

http://ugc.moji001.com/mapi/ResetPasswordBefore?E268443E43D93DAB7EBEF303BBE9642F={{mail}}&07CC694B9B3FC636710FA08B6922C42B={{timestamp}}&lan=CH


{{mail}}:即要修改密码的邮箱,编码为 hex ascii
{{timstamp}}:客户端发出找回密码时的时间戳,几个小时内有效,编码为hex ascii。
修复后的找回密码连接如下:

http://ugc.moji001.com/sns/ResetPasswordBefore?E268443E43D93DAB7EBEF303BBE9642F={{mail}}&07CC694B9B3FC636710FA08B6922C42B={{timestamp}}&9941E268A0F6F8E2AA2898B5A522D23D={{??}}&lan=CH


可以看粗,多了一个参数{{??}},这个是什么呢?
通过解码{{??}},发现依然是hex ascii编码,内容为:mail-timestamp-moji_china,用“-”连接了mail,timestamp,moji_china然后编码而已。
0x2 尝试重置
****0x01尝试替换两处mail重置密码失败****

mj_fail.png


****0x02 继续猜测,除了邮箱,难道还在服务器端验证了是否存在正确的时间戳?那就需要遍历时间戳了。****
首先,利用抓取到的客户端找回密码的请求,并加以裁剪。连接如下:

mj1.png


然后,设置burp instruder重复找回密码三次,第一次为A邮箱,第二次为B邮箱,第三次为A邮箱。(确保instruder线程数为1,这样可以保证B的时间戳刚好在两次A时间戳之间)

mj2.png


邮箱发送成功,分别登录A邮箱和B邮箱,找出时间戳对比(B的时间戳果真在两次A之间)

mj3.png


时间戳:

mj4.png


****0x03 既然B时间戳在两次A之间,那就用第一次A的重置连接,修改连接中的邮箱为B,时间戳部分为instruder变量,查看是否可以遍历出B的找回密码连接(即重置B的密码)****

mj5.png


结果,结果令人大跌眼镜,居然没有一个返回码为200的可以重置B密码的连接。

mj6.png


****0x04 为什么不成功呢?抓出邮箱中的连接请求,并且找出上面遍历时payload为31343038333437303138313936(B的时间戳)的请求,送到burp的comparer中看一下****

mj7.png


****0x04 原来是大小写不对,那就改一改instruder中,把请求中的关键参数都改成大写,在看看*****

mj8.png


我的天,全部返回200。这说明,是不是重置邮箱密码跟时间戳的几乎无关,而且通过测试发现,只要确保{{mail-timestamp-moji_china}}参数处为大写字母,即可。

漏洞证明:

要修改B的密码,只要A邮箱用户在客户端点“忘记密码”,获取一个忘记密码连接
http://ugc.moji001.com/sns/ResetPasswordBefore?E268443E43D93DAB7EBEF303BBE9642F={{mail}}&07CC694B9B3FC636710FA08B6922C42B={{timestamp}}&9941E268A0F6F8E2AA2898B5A522D23D={{mail-timestamp-moji_china}}&lan=CH。
然后,将连接中的mail(两处)替换成邮箱B并用hexscii编码并且大写,即可。
辗转反复,高估了墨迹程序员的补丁。。。

修复方案:

给你们的邮件中说的挺明白了,一句话:换不可逆的编码方式。

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


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:20

确认时间:2014-08-22 13:09

厂商回复:

已紧急修正该问题,谢谢提醒。

最新状态:

暂无