检测到目标url存在http host头攻击漏洞_什么是主机头攻击?

同一台Web服务器在同一IP地址上托管多个网站或Web应用程序是一种常见的做法。这就是主机头存在的原因。主机标头指定哪个网站或Web应用程序应处理传入的HTTP请求。Web服务器使用此标头的值将请求分派到指定的网站或Web应用程序。托管在相同IP地址上的每个Web应用程序通常称为虚拟主机。那么什么构成主机头攻击?

如果我们指定了无效的主机头会怎样?大多数Web服务器都配置为将无法识别的主机标头传递到列表中的第一个虚拟主机。因此,可以将带有任意主机头的请求发送到第一个虚拟主机。

传递任意Host标头的另一种方法是使用X-Forwarded-Host标头。在某些配置中,此标头将重写Host标头的值。因此,可以提出以下要求。

GET / HTTP/1.1 Host: www.example.com X-Forwarded-Host: www.attacker.com

许多Web应用程序都依靠HTTP 主机头来了解“它们在哪里”。不幸的是,许多应用程序开发人员没有意识到HTTP主机头是由用户控制的。您可能已经知道,在应用程序安全性中,应始终将用户输入视为不安全,因此,在首先正确验证用户输入的情况下,切勿信任用户输入。

主机头的使用在PHP Web应用程序中尤其常见,但是,对于PHP Web应用程序来说,这当然不是普遍存在的问题。以下示例中的PHP脚本是对主机标头的典型使用和危险使用。

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

攻击者仅通过操纵主机头就可以操纵上面的代码来产生以下HTML输出。

<script src="http://attacker.com/script.js">

主机标头攻击启用的两个主要攻击向量是Web缓存中毒,以及滥用替代渠道进行敏感操作(例如密码重置)。

Web缓存中毒

Web缓存中毒是攻击者用来操纵Web缓存以将中毒的内容提供给请求页面的任何人的技术。

为此,攻击者需要毒害站点本身或下游提供者,内容交付网络(CDN),联合组织或客户端与服务器之间的其他缓存机制运行的缓存代理。然后,缓存将把中毒的内容提供给请求它的任何人,而受害者则无法控制向他们提供的恶意内容。

下面是一个示例,说明攻击者可能通过使Web缓存中毒来潜在地利用主机头攻击。

$ telnet www.example.com 80
Trying x.x.x.x...
Connected to www.example.com.
Escape character is '^]'.
GET /index.html HTTP/1.1
Host: attacker.com
HTTP/1.1 200 OK
...
<html>
<head>
<title>Example</title>
<script src="http://attacker.com/script.js">
...

密码重置中毒

实现密码重置功能的一种常用方法是生成一个秘密令牌,并通过包含此令牌的链接发送电子邮件。如果攻击者请求使用攻击者控制的主机头重置密码,会发生什么情况?

如果Web应用程序在编写重置链接时使用主机标头值,则攻击者可能中毒发送给受害者的密码重置链接。如果受害者单击电子邮件中的中毒重置链接,则攻击者将获得密码重置令牌,然后可以继续重置受害者的密码。

检测密码重置中毒漏洞

我们将使用旧版本的Piwik(开放源代码网络分析平台)进行演示,该版本容易通过主机标头攻击而被密码重置中毒。

为了自动检测密码重置中毒,我们需要依靠中介服务,因为通过主机标头攻击检测密码重置中毒需要带外和时延向量。Acunetix通过在自动扫描过程中将AcuMonitor用作中介服务来解决此问题。

在扫描过程中,Acunetix将找到密码重置页面,并注入指向AcuMonitor域的自定义主机头。如果存在漏洞,则所涉及的应用程序(在此示例中为Piwik的旧版本)将使用该值生成密码重置链接,并向相关用户发送电子邮件,如下所示。

b1a21333af75fedc9786cb4b956c96f0.png

在上图中,请密切注意重置链接的位置-它指向AcuMonitor的域而不是Web应用程序的域。

如果“受害者”(在这种情况下,由于它是自动扫描,可能是由负责扫描的安全团队中的某人接收到电子邮件),通过该链接,AcuMonitor将捕获此请求并将通知发送回Acunetix表示应该通过主机标头攻击发出有关密码重置中毒的警报。

减轻

缓解主机头很简单-不要信任主机头。但是,在某些情况下,这说起来容易做起来难(尤其是涉及遗留代码的情况)。如果必须将主机头用作识别Web服务器位置的机制,则强烈建议使用允许的主机名白名单

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值