2

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

4

1 回答 1

3

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

例如,典型的攻击场景是:

假设您有一个应用程序,您盲目信任 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 将更改为攻击者设置的域。如果受害者打开该链接,密码重置令牌可能会泄露给攻击者,从而导致帐户接管。

于 2018-02-15T04:58:41.367 回答