主机Header注入

Host Header Injection

我是安全方面的初学者,正在阅读有关主机 header 注入的文章。我针对此漏洞测试了一个应用程序,可能存在一些请求,但开发人员实施了 no-cache、no-store 标志,并且此漏洞不在密码重置请求中。
所以首先是不会有缓存中毒。第二个是密码重置请求中没有发生。
据我了解,为了利用此漏洞,我更改了该主机 header。所以我想知道为什么它会是一个漏洞,为什么用户会更改应用程序的主机?以及攻击者如何利用它?

在所有情况下,客户端在应用程序上的输入永远不应该被信任(在安全方面)。 host header 属性也可以由客户端更改。

典型的攻击场景例如:

假设您有一个应用程序,您盲目地信任 HOST header 值并在应用程序中使用它而不验证它。 因此,您的应用程序中可能有以下代码,您在其中动态加载 JS 文件(通过主机名):

<script src="http://<?php echo $_SERVER['HOST'] ?>/script.js">

在这种情况下,攻击者设置为 HOST header 的任何内容都会反映在此 JS 脚本加载中。因此,攻击者可以通过操纵响应以从另一台主机(可能是恶意的)加载 JS 脚本来篡改它。如果应用程序使用任何缓存机制或 CDN,并且此请求重复多次,则缓存代理可以缓存它。然后,这也可以提供给其他用户(因为它已保存到缓存中)。

另一种利用它的方法是:

假设应用程序具有用户密码重置功能。并且该应用程序将向任何要求重置密码的人发送一封电子邮件,其中包含用于重置密码的唯一令牌,如下面的电子邮件:

Hi user,
Here is your reset link
http://<?php echo $_SERVER['HOST'] ?>/reset-password?token=<?php echo $token ?>

现在,攻击者可以通过将 HOST header 值篡改为他想要的值来触发已知受害者电子邮件的密码重置。然后受害者将收到用于重置密码的合法电子邮件,但 URL 将更改为攻击者设置的域。如果受害者打开那个 link,密码重置令牌可能会泄露给攻击者,从而导致帐户接管。