一个有趣的帐户接管漏洞
大家好,在这篇文章中我将讲述一个有趣的帐户接管漏洞,大约是我一年前发现的。而这个漏洞的根源就在于生成密码重置令牌的生成算法。
假设目标应用为program.com
。
与大多数Web应用一样,这个网站也具有“忘记密码”功能。而在某一天我对重置密码的功能进行测试时,发现一个奇怪的现象,每一次生成的密码重置链接令牌的前三个字符始终保持不变。这引起了我的兴趣,于是便开始深入研究。
https://program.com/forgot_password/<TOKEN-HERE>
几分钟后,我意识到这三个字符是我电子邮件第四个字母到第二个字母的倒序。例如,假设你的电子邮件地址为johndoe@domain.com
,此时你请求密码重置,目标应用便会选择电子邮件的第四个字母(n),逆向遍历到第二个字母(o)。
确定之后,我想既然令牌的前3个字符不是随机的,那么其余的字符很可能也有意义。于是我又发送了多个重置密码请求,收到了多个请求令牌,并发现最后几个字符是时间戳。
最后,还需要弄清楚的就是“nho”和时间戳之间的两个字符的含义。此时我遇到了瓶颈,不管研究多少个令牌都没找到规律(也许它们是随机的)?
不过很快我就不纠结于此,为什么不简单地用暴力破解来解决这两个字符呢?幸运的是,目标应用没有适限制请求速率。
我注册了两个相当相似的电子邮件(johndoe@domain.com和johndoe@domain2.com),并在同一时间重置密码重。因为几乎是在同一时间重置密码且电子邮件的前部分是相同的,所以发送到两个帐户的重置密码令牌基本相同,除了那两个随机字符。这也再次验证了我的想法。
我进入第二个电子邮件的收件箱,点击了重置链接。然后我将请求发送给burpsuite的intruder,开始对这两个字符进行暴力破解。在发送了一堆请求之后,我看到了一个302响应,这意味着我成功地找到了第一个帐户的重置令牌,也最终接管了该帐户。
该漏洞被标记为高危。
希望你喜欢这篇文章,你也可以在@0xAkash上关注我
本文由白帽汇整理并翻译,不代表白帽汇任何观点和立场
来源:https://medium.com/bugbountywriteup/how-i-discovered-an-interesting-account-takeover-flaw-18a7fb1e5359
最新评论