在今天的博客中,我将分享一个我去年发现的有趣漏洞,该漏洞允许我通过操纵密码重置链接来接管用户帐户。此漏洞称为通过主机头注入进行密码重置中毒。
🌟 什么是密码重置中毒?
当您忘记密码时,网站通常会提供“忘记密码”功能。使用此功能后,网站会向您的邮件发送一个密码重置链接。此链接包含一个唯一令牌,可用于重置密码。
然而,重置链接本身是由服务器创建的,通常包含域名(例如https://example.com/reset?token=abc123
)。但如果应用程序依赖用户提供的标头(例如Host
标头)来构建此链接,则该链接可能被操纵。
这被称为密码重置中毒。如果攻击者可以控制重置链接中的主机,他们就可以劫持重置链接并接管其他用户的帐户。
🕵️♂️ 我的侦察过程
像每个漏洞赏金猎人一样,我从侦察开始。侦察是最重要的阶段,因为它可以帮助你了解目标应用程序的工作原理以及潜在漏洞可能存在的位置。
以下是我的方法:
✅子域名枚举
我使用Subfinder和Assetfinder等工具来查找目标域的所有子域名:
👉target.com
这有助于绘制完整的攻击面。
✅ Wayback Machine URL
我运行了waybackurls来发现历史 URL。有时,较旧的端点可能会揭示有趣的行为或漏洞。
✅使用 httpx 进行探测
我使用httpx来检查发现的子域是否有效以及它们使用了哪些技术。
✅手动浏览
最后,我总是手动浏览网站。手动探索常常会带来有趣的发现!
🪝 我如何发现这个漏洞
在侦察过程中,我遇到了帐户子域名:
👉https://account.example.com
在这个子域名上,我找到了一个“忘记密码”页面:
👉https://account.example.com/en/cant-login
此页面允许用户输入他们的电子邮件地址以接收密码重置链接。
🔍 测试“忘记密码”功能
我想看看密码重置链接是如何创建的,以及我是否可以控制它的任何部分。
以下是我所做的:
1️⃣打开 Burp Suite捕获请求。2️⃣在
“忘记密码”页面输入测试邮箱地址。
3️⃣单击提交按钮以触发密码重置过程。
Burp Suite 捕获了POST 请求:
Host: account.example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 46
💡 我的关键思想:主机头注入
我怀疑服务器可能正在使用Host
标头来构建密码重置链接。
为什么?
因为如果应用程序没有验证Host
标头,我可以将其更改为任何我想要的域名。这意味着发送给用户的密码重置链接将包含我控制的域名,而不是真实的网站!
⚙️ 重现问题
为了证实我的怀疑,我决定使用 Burp Suite 来操纵 Host 标头。
方法如下:
1️⃣ 在 Burp Suite 中,我将捕获的请求发送到 Repeater。2️⃣在
Repeater 选项卡中,我将 Host 标头修改为不同的域:
Host: bing.com
3️⃣我发送了修改后的请求。
🔥 反馈:有效!
发送请求后不久,我查看了邮箱。密码重置邮件收到了。但令人吃惊的是:重置链接指向的是 ,https://bing.com
而不是https://account.example.com
!
重置链接如下所示:
👉https://bing.com/reset?token=abcdef123456
这证明应用程序正在使用请求中的Host 标头来构建密码重置链接 - 并且根本没有对其进行验证。
当然!以下是更详细的影响和缓解措施,没有使用符号或表情符号:
影响
攻击者可以通过捕获并使用被污染的密码重置链接来完全控制用户的帐户。这允许他们更改受害者的密码,并锁定受害者的帐户。
接管帐户后,攻击者可以访问该帐户中存储的任何敏感或机密信息,例如个人详细信息、财务数据或公司内部信息。
如果攻击者利用此漏洞,可能会导致用户失去信任,并严重损害公司的声誉,从而影响未来的业务和客户忠诚度。
减轻
应用程序在创建密码重置链接时不应依赖用户请求中的 Host 标头。相反,它们应该使用安全的服务器端配置(例如 SERVER_NAME),以确保始终使用正确且受信任的域。
如果 Host 标头对于某些功能而言是绝对必要的,则应根据受信任和已知域的列表进行检查,以确保它没有被篡改。
定期进行安全测试,包括渗透测试和代码审查,以便尽早发现类似的漏洞并在其被利用之前修复它们。
利用这个漏洞,我能够赚到很多钱,我会向你们展示我的一些报告。
谢谢大家的阅读:)
原文始发于微信公众号(安全狗的自我修养):如何在密码重置链接中使用主机头注入来入侵账户 — $$$$
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论