九零登录

[【通过】] 记一网站任意密码重置漏洞

[复制链接]
发表于 2015-11-16 17:02:05 | 显示全部楼层 |阅读模式
本帖最后由 y0uki11 于 2016-3-6 12:50 编辑

0x01:起因
在某网站下载资料,需要帐号。登录的时候竟然报了一个:thinkphp 保存IP字段 too long的一个错误,心想此网站必有漏洞,F5刷新了下,错误没了?!
8EE110B8@E6EE3D69.6F364756_recompress.jpg
抱着网站必有洞的想法,测试了下,发现存在任意密码重置漏洞。
0x02:测试
站点:xxxx.com
7444d48a39f0e1ef0b16b092a3c89353.png
准备工作,注册了两个帐号:

帐号:A([email protected],ID随机生成:passport_7273446797)
帐号:B([email protected],ID随机生成:bbs_2902881569)

然后就开始找回密码了。
找回A帐号收到连接如:xxxx.com/pass.html?code= 01368edd5f367dcce22dd4d48686932a

ffd97bbbea85c2721cb9b05957f2de52.jpg
抓包看下POST    /pass/reset包里只有两个密码字段:
7b4cacb5c1740a336e7e9667f01cb62f.jpg
还有cookie里sessid等信息。没有一些敏感信息,然后打开:

B的重置连接:xxxx.com/pass.html?code= 92f1e67cba08f414da5e8cfa65e9aa7a
这里说明:使用的是QQ邮箱,B邮箱是A的英文帐号邮箱(不影响测试,1个QQ两个邮箱地址)


到这里发现个问题:
找回还是A帐号,打开重置连接正常。我再打开B帐号的重置连接,结果显示重置的还是A帐号。也就是说如果后面假设有C,D,E帐号重置密码连接,打开的话显示的还是A,这里隐隐约约感觉有问题。

大概是这样:
不管正常用户与恶意用户进行找回密码,那么第一次的这个邮件收到能打开的话,就能确定是我们自己通过身份验证重置密码,这个无异议。第二次重置的帐号(B)假设为他人的,那么其他人在收到这个链接后打开肯定是重置自己的帐号(B)。但是我这里是这样:

7aff90ad95acadf966b0dde4ba4a17aa.jpg

A,B都是我自己的,我如何才能重置B帐号呢???
发现换个浏览器打开B的连接重置的是B帐号,如果修改sessid打开的又变成重置A了。
然后我就在想啊想:已经可以确定这个sessid很有用啊,如何重置这个第二个帐号呢???sessid啊,sessid,sessid

忽然柳暗花明,想到去年有个聚美优品的漏洞,当初没看懂啥意思,只记得好像也是sessid的问题,结果发现是同一个问题。测试下,成功重置任意帐号的密码,这里也在说下过程:

1.      首先都是在同一浏览器里操作
2.      找回A,登录邮箱打开邮件,但是不要打开重置的连接
1.jpg

2.jpg

3.      然后再找回B(由于是同一个邮箱也会收到B连接,不用管)

3.jpg

4.      打开A的重置连接(注意看连接里code),重置的是B的密码,提交即可
4.jpg


5.jpg
0x03:分析
简单分析下逻辑流程可能会有一些出入,首先说下那个重置的连接:

打开重置密码的连接,服务器首先会判断连接是否存在:
不存在:返回404
存在:正常打开

但是打开后即使把code全删除还正常打开,即使有后续其他帐号的重置连接,打开后找回的帐号还是第一次打开的那个帐号(先判断连接是否存在,再判断sessid,  sessid  or code)

我们第二次找回时,由于是同一个浏览器这是会把第一个的sessid信息给覆盖掉,所有打开的第一次的连接(A),却显示重置的是第二次(B)的帐号,重置成功而且重置后能注册登录。

0x04:总结
总的来说就是:session覆盖。参考乌云:WooYun: 聚美优品任意修改用户密码(非爆破)

测试重置密码漏洞时,如果发现session有些问题,可以用如上方法测试下

===============================
思路清晰有条理,文章排版整洁,故通过。



评分

参与人数 1酒票 +5 收起 理由
管理05 + 5 欢迎加入90!

查看全部评分

 楼主| 发表于 2015-11-16 17:05:57 | 显示全部楼层
不知道,当初那个聚美优品是不是这样测试的。

@管理05 顺便问下管理,论坛验证邮箱不能用QQ邮箱么,收不到。
发表于 2015-11-16 17:29:37 | 显示全部楼层
恭喜通过审核

论坛发邮件好像有点问题,直接私信管理绑定邮箱吧。
发表于 2015-11-16 18:15:01 | 显示全部楼层
y0uki11 发表于 2015-11-16 17:05
不知道,当初那个聚美优品是不是这样测试的。

@管理05 顺便问下管理,论坛验证邮箱不能用QQ邮箱么,收不 ...

建议不要用QQ邮箱 试一试163的邮箱 如果没有收到邮件多试几次就可以了
发表于 2015-11-16 19:36:07 | 显示全部楼层
欢迎加入90
 楼主| 发表于 2015-11-16 19:54:10 | 显示全部楼层
Smile゛S 发表于 2015-11-16 17:29
恭喜通过审核

论坛发邮件好像有点问题,直接私信管理绑定邮箱吧。

嗯,待会再试试其他邮箱不能的话,只能找管理了。

 楼主| 发表于 2015-11-16 20:49:21 | 显示全部楼层

表哥好,多多关照。
发表于 2015-11-17 16:04:24 | 显示全部楼层
你的A和B已经成功把我绕晕了
 楼主| 发表于 2015-11-17 16:07:27 | 显示全部楼层
孤城浪子 发表于 2015-11-17 16:04
你的A和B已经成功把我绕晕了

重置B(别人的)帐号。

发表于 2015-11-17 16:15:42 | 显示全部楼层
y0uki11 发表于 2015-11-17 16:07
重置B(别人的)帐号。

真实情况中怎么可能获得别人的CODE呢
 楼主| 发表于 2015-11-17 17:12:24 | 显示全部楼层
本帖最后由 y0uki11 于 2015-11-18 16:49 编辑
孤城浪子 发表于 2015-11-17 16:15
真实情况中怎么可能获得别人的CODE呢


基本上code获取不到。。。除非你逆向出他的加密方式。

发表于 2015-11-18 16:36:10 | 显示全部楼层
url中的code 应该是用户提交密码重置申请的时候,验证通过后存放到待重置用户表中的某个数据32位md5加密后的值。
这个值基本上无法获取到。。。
 楼主| 发表于 2015-11-18 16:43:51 | 显示全部楼层
chenfeifan 发表于 2015-11-18 16:36
url中的code 应该是用户提交密码重置申请的时候,验证通过后存放到待重置用户表中的某个数据32位md5加密后 ...

这个code获取不到。帐号倒是能获取,说白了就是session覆盖。
发表于 2015-11-18 23:11:46 | 显示全部楼层
欢迎加入90,求交流吧
发表于 2015-11-19 17:37:12 | 显示全部楼层
利用了sessid覆盖,code是自己的账户,所以楼主讲的,应该可以实现重置其他人的密码,不知道,我理解的对不对。
 楼主| 发表于 2015-11-19 17:50:10 | 显示全部楼层
atom 发表于 2015-11-19 17:37
利用了sessid覆盖,code是自己的账户,所以楼主讲的,应该可以实现重置其他人的密码,不知道,我理解的对不 ...

对对,用第一个我们自己的(code),去搞第二个其他人的。
 楼主| 发表于 2016-3-3 17:56:52 | 显示全部楼层
百密一疏,漏点了,o(︶︿︶)o 唉,还好已经修复了。
发表于 2016-3-4 15:28:54 | 显示全部楼层
好问,90sec就缺这样的文章,不错,精神上支持你,金币没有地
 楼主| 发表于 2016-3-4 17:21:19 | 显示全部楼层
酷帥王子 发表于 2016-3-4 15:28
好问,90sec就缺这样的文章,不错,精神上支持你,金币没有地

谢了表哥。   

九零

GMT+8, 2026-10-22 14:57

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表