我正在研究的应用程序是私有程序的一部分。为了演示目的,我们将其称为www.target.com
几周后,我切换回了这个目标,但我忘记了测试账户的密码(我经常这样 :P)。我继续为我的两个测试账户执行忘记密码请求。
这些账户分别是<bugcrowd_alias>[email protected]和<bugcrowd_alias>[email protected]
对于那些不知道这个"+"在这里起什么作用的人来说。如果你在电子邮件中附加一个+sometext,它实际上会创建你的电子邮件的别名,你将在实际电子邮件中收到所有电子邮件。这在测试时很有帮助,因为大多数应用程序都不会被阻止,而这一发现完全是由于这一点而得出的。
例子
别名:hbothra22[email protected]或[email protected]
所有别名的电子邮件都将被转发至实际电子邮件。
现在回到应用程序,通常的密码重置流程包括:
申请密码重置→ 接收唯一重置链接→ 重置通行证
现在,当使用重置链接重置密码时,我发现这两个重置链接之间的唯一区别是:1 和 2
账户1的重置链接:https://target.com/reset_password?token= zbp.nwavaqjbeptho%401+neugboufenu
账户2的重置链接:https://target.com/reset_password?token=zbp.nwavaqjbeptho% 402+neugboufenu
我观察到的第二件事是重置令牌的长度 = 电子邮件中的字符数和 %40=@
太棒了。所以这可以肯定应用程序的加密机制很弱,但应用程序如何编码令牌仍未可知。又花了几分钟,我推导出了生成令牌的公式。
Ceaser_Cipher_Key13(reverse(email)) == 密码重置令牌
- 以受害者的电子邮件为例:[email protected]
- 反向邮箱,即:moc.liamg@22arhtobh
- 现在使用 Ceaser Cipher(凯撒密码) 加密反向电子邮件,密钥为 13,即:zbp.yvnzt@22neugbou
- 至少将@改为%40这样我们就会得到重置令牌。
现在,我们可以用这个来重置任何用户的密码。该应用程序还允许在忘记密码时枚举有效的电子邮件,这使我们的任务更容易。
- 在测试密码时,始终使用两个别名并尝试查看重置令牌中哪些位不同。
- 检查重置令牌并尝试查看是否使用了任何公共编码库/弱加密。
原文始发于微信公众号(Rsec):0027. 密码重置中的弱加密技术可导致账户完全接管
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论