密码重置投毒是一种技术,借此攻击者操纵脆弱的网站生成一个密码重置链接指向他们控制下的域。这种行为可以用来窃取重置任意用户密码所需的secret token,并最终危及他们的帐户。
1. 密码重置原理
几乎所有需要登录的网站都有允许用户重置密码的功能,如果用户忘记密码的话。有几种方法可以做到这一点,其安全性和实用性各不相同。最常见的方法是这样的:
- 用户输入用户名或电子邮件地址并提交密码重置请求。
- 该网站检查该用户是否存在,然后生成一个临时的、唯一的、高熵(就是不容易预测的意思)的token,它将其与后端用户的帐户相关联。
该网站向用户发送一封包含重置密码链接的电子邮件。用户唯一的重置令牌作为查询参数包含在相应的URL中:
https://normal-website.com/reset?token=0a1b2c3d4e5f6g7h8i9j
- 当用户访问这个URL时,网站会检查所提供的令牌是否有效,并使用它来确定哪个帐户正在被重置。如果一切正常,用户可以选择输入新密码。最后,销毁token。
与其他一些方法相比,这个过程足够简单并且相对安全。然而,它的安全性依赖于这样一个原则,即只有目标用户才能访问他们的电子邮件,访问他的唯一的token。密码重置投毒是一种窃取token以更改另一个用户密码的方法。
2. 如何构造密码重置投毒攻击
一旦确定可以将任意主机名传递给目标应用程序,就可以开始寻找利用它的方法。在本节中,我们将提供一些您可以构造的常见HTTP Host头攻击的示例。
2.1 密码重置投毒
如果发送给用户的URL是根据可控制的输入(如Host头)动态生成的,则可以构造一个密码重置投毒攻击,如下所示:
- 攻击者根据需要获取受害者的电子邮件地址或用户名,并代表他们提交密码重置请求。提交表单时,拦截产生的HTTP请求并修改Host报头,以便它指向攻击者控制的域。对于本例,我们将使用evil-user.net。
受害者会直接从网站收到一封真正的重置密码的电子邮件。包含一个重置密码的普通链接,更重要的是,包含一个与他们的帐户相关联的有效密码重置token。但是,URL中的域名指向攻击者的服务器:
https://evil-user.net/reset?token=0a1b2c3d4e5f6g7h8i9j
- 如果受害者单击此链接(或以其他方式获取,例如,由反病毒扫描程序),密码重置token将被发送到攻击者的服务器。
- 攻击者现在可以访问脆弱网站的真实URL,并替换相应参数为窃取的token。然后,他们可以将用户的密码重置为他们喜欢的任何密码,然后登录他们的账户。
在真实的攻击中,攻击者可能会试图增加受害者点击链接的概率,例如,发送虚假的通知消息。
即使不能控制密码重置链接,有时也可以使用Host头将HTML注入到敏感的Email中。请注意,电子邮件客户端通常不执行JavaScript,但其他HTML注入技术,如dangling标签攻击可能仍然适用。
本文由博客一文多发平台 OpenWrite 发布!