代码之家  ›  专栏  ›  技术社区  ›  Pawan Dwivedee

主机标头注入

  •  2
  • Pawan Dwivedee  · 技术社区  · 7 年前

    我是一个安全方面的初学者,并阅读了有关主机头注入的内容。我测试了一个应用程序是否存在此漏洞,可能存在一些请求,但开发人员没有实现缓存,没有存储标志,并且此漏洞不在密码重置请求中。
    所以首先,缓存不会中毒。第二个问题是密码重置请求中没有发生这种情况。
    据我所知,为了利用此漏洞,我更改了主机头。所以我想知道为什么它会成为一个漏洞,为什么用户会更改应用程序的主机?以及攻击者如何利用它?

    1 回复  |  直到 7 年前
        1
  •  3
  •   Trim Kadriu    6 年前

    在所有情况下,应用程序上的客户机输入都不应被信任(从安全角度来看)。这个 host 头属性也是客户端可以更改的属性。

    典型的攻击场景如下:

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

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

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

    利用这一点的另一种方法是:

    假设应用程序具有用户密码重置功能。应用程序将向任何要求使用唯一令牌重置密码的人发送一封电子邮件,如以下电子邮件:

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

    现在,攻击者可以通过将主机头的值篡改为自己想要的值来触发已知受害者电子邮件的密码重置。然后,受害者将收到合法的密码重置电子邮件,但URL将更改为攻击者设置的域。如果受害者打开该链接,密码重置令牌可能会泄漏给攻击者,从而导致帐户被接管。

    推荐文章