通过 X-Forwarded-Host 的密码重置令牌泄漏

这个博客是关于一个漏洞,我在 Hackerone 的私人程序中发现了这个漏洞,它允许我接管任何用户的帐户。

大家好,我是黑客小黑

这是我的第一篇博客,如果您发现任何拼写错误,请耐心等待我接下来的几分钟。这个博客是关于一个漏洞,我在 Hackerone 的私人程序中发现了这个漏洞,它允许我接管任何用户的帐户。但在开始写这篇博客之前,我想先介绍一些有关 Host 标头的基本信息。

什么是 HTTP 主机标头?

自 HTTP/1.1 起,HTTP Host 标头是强制请求标头。它指定用户想要访问的域名。

例如,如果用户访问 https://example.com,那么他们的浏览器将发出包含主机标头的请求,如下所示:

GET / HTTP/1.1

Host: example.com

几天前,我在 Hackerone 收到一条通知,说我已被邀请加入一个私人项目。因此,我接受了邀请并开始寻找该私人计划。在开始寻找该私人程序时,我花了 5 到 6 天的时间来查找跨站点脚本攻击 (XSS)、IDOR、SQL 注入、登录页面上的缺陷、信息泄露和子域接管,但我仍然没有发现能够找到任何东西。

休息了几个小时后,我再次开始寻找该域,但这一次我得到了一个有趣的功能,这是我上次没有看到的。这个有趣的功能是密码重置功能。所以我心里想,让我们尝试一下这个密码重置功能吧。

我不能透露目标的名称,因为它是一个私人程序。因此,我们假设目标是site.com。他们的密码重置功能是这样的:

我注意到,每当我们输入电子邮件并单击重置密码时。我们收到一封用于更改密码的电子邮件,其中包含密码重置令牌链接。

密码重置令牌链接如下所示:

https://site.com/action-token?key=eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICIzZWM2ODU2Z

这次我决定拦截密码重置请求,并且还启动了我的 ngrok 服务器。

原始请求如下所示:

burpsuite中的密码重置请求图像

然后我在原始请求中添加了另一个标头“X-Forwarded-Host”和我的 ngrok 服务器域。现在修改后的请求如下所示:

带有“X-Forwarded-Host”标头的密码重置请求图像

这次我收到了一封更改密码的电子邮件,但包含我的 ngrok 服务器域。密码重置令牌链接如下所示:

https://95saf4ct71g.ngrok.io/action-token?key=wia2lkIiA6ICciOiJIUzI1NiIsInR5cCIgODU2ZeyJhbGiA

您还可以看到,我只需在密码重置请求中添加标头“X-Forwarded-Host”即可成功更改主机。

然后我注意到,如果我在密码重置页面中输入受害者的电子邮件并拦截该请求,并且如果我使用我的恶意域添加另一个标头“X-Forwarded-Host”。然后受害者将收到一封电子邮件,其中包含带有我的恶意域的密码重置令牌链接。当受害者点击该链接时,他将重定向到我的网站,并且他的所有令牌都会泄露给我。然后我可以使用受害者泄露的令牌来更改他的密码。是的,此漏洞的影响是完全帐户接管。

因此,现在我可以通过重置密码来完全接管在 site.com 上拥有帐户的任何人的帐户。

因此,我没有浪费任何时间,成功提交了这个漏洞并进行了完整的概念验证,然后,Hackerone 的私人计划奖励了我 1000 美元。

获得赏金1000美元

感谢您阅读此博客,希望您能学到一些东西。

来源:https://saajan.bhujel.cyou/blog/web/2021-02-26-password-reset-token-leak-via-x-forwarded-host