我是安全性的初学者,并且正在阅读有关主机头注入的内容。我测试了一个针对此漏洞的应用程序,可能会有一些请求,但开发人员实现了无缓存,无存储标记,并且此漏洞不在密码重置请求中。
首先,不会有缓存中毒。第二个是密码重置请求没有发生。
据我了解,为了利用此漏洞,我更改了主机标头。所以我想知道为什么它会成为漏洞,为什么用户会更改应用程序的主机?以及攻击者如何利用它?
答案 0 :(得分:1)
在所有情况下,应该永远不会信任应用程序上的客户端输入(在安全术语中)。 host
标头属性也可以由客户端更改。
典型的攻击情形是:
让我们假设您有一个应用程序,您盲目地信任HOST头值并在应用程序中使用它而不验证它。 因此,您可以在应用程序中使用以下代码,在该代码中动态加载JS文件(按主机名):
<script src="http://<?php echo $_SERVER['HOST'] ?>/script.js">
在这种情况下,无论攻击者设置为HOST标头,都会反映在此JS脚本加载上。因此,攻击者可以通过操纵响应从另一个主机(可能是恶意的)加载JS脚本来篡改这一点。如果应用程序正在使用任何缓存机制或CDN,并且此请求多次重复,则可以由高速缓存代理缓存它。然后,这也可以提供给其他用户(因为它已保存到缓存中)。
另一种利用这种方法的方法是:
假设应用程序具有用户密码重置功能。该应用程序将向任何要求重置密码的人发送电子邮件,并使用唯一令牌重置密码,如下面的电子邮件:
Hi user,
Here is your reset link
http://<?php echo $_SERVER['HOST'] ?>/reset-password?token=<?php echo $token ?>
现在,攻击者可以通过将HOST标头值篡改为他的愿望来触发已知受害者电子邮件的密码重置。然后,受害者将收到用于密码重置的合法电子邮件,但URL将更改为攻击者设置的域。如果受害者将打开该链接,密码重置令牌可能会泄露给攻击者,因此会导致帐户接管。