剖析HTTP Host 标头攻击

admin 2024年12月17日13:11:57评论2 views字数 5401阅读18分0秒阅读模式
剖析HTTP Host 标头攻击

点击蓝字

关注我们

剖析HTTP Host 标头攻击

始于理论,源于实践,终于实战

老付话安全,每天一点点

激情永无限,进步看得见

剖析HTTP Host 标头攻击

严正声明

本号所写文章方法和工具只用于学习和交流,严禁使用文章所述内容中的方法未经许可的情况下对生产系统进行方法验证实施,发生一切问题由相关个人承担法律责任,其与本号无关。

特此声明!!!

 什么是 HTTP Host 标头

HTTP Host 标头是请求标头,用于指定客户端要访问的域名。如,当用户访问 https://example.com/studio 时,其浏览器将撰写包含 Host 标头的请求,

GET /studio HTTP/1.1Host: example.com

在一些情况下,例如,当请求已由中间系统(反向代理服务、CDN)转发时,Host 值可能会在到达目的端的后端组件之前被更改。

HTTP Host 标头主要是帮助确定客户端要与哪些后端组件通信。。在现代 Web 架构中,多个应用程序或网站常常托管在同一台服务器或同一 IP 地址上。为了正确地将请求路由到相应的应用程序,服务器依赖于 HTTP 请求中的 Host 标头。这个标头指定了请求所针对的域名或 IP 地址。如果请求不包含 Host 标头,或者 Host 标头在某种程度上格式错误,服务器可能无法确定请求应该路由到哪个应用程序。

当多个域名对应一个IP地址时,服务器需要能够区分不同的网站,以便正确地处理用户的请求。需要使用

使用虚拟主机、使用路径区分(通过URL路径来区分不同的网站。例如,www.example1.com 和www.example2.com 都可以指向同一个IP地址,但在服务器上通过不同的路径来提供不同的内容。)、使用端口号区分(例如,www.example1.com:80 和www.example2.com:8080 可以指向同一个IP地址,但通过不同的端口号来提供不同的服务。)、使用反向代理等方式来解决。

Host 标头具有类似于向住在公寓楼里的人发送信件的过程。整栋楼都有相同的街道地址,但在这个街道地址后面有许多不同的公寓,每个公寓都需要以某种方式接收正确的邮件。解决此问题的一种方法是在地址中包含公寓号或收件人的姓名。

什么是 HTTP Host 标头攻击

攻击者通过构造恶意的 HTTP 请求,伪造或篡改 Host 标头字段的值,从而欺骗服务器,让服务器误以为请求是针对其他主机或域名的。一些网站以不安全的方式处理 Host 标头的值。如果服务器默认信任 Host 标头,并且无法正确验证或转义它,则攻击者可能能够使用此输入注入操纵服务器端行为的有害负载。

如在PHP中,如果要生成一个包含当前主机名的绝对URL,可以这样做:

<?php $host = $_SERVER['HTTP_HOST']; echo '<a href="https://'.$host.'/support">Contact support</a>'; ?> 

这里首先获取了 HTTP_HOST 这个服务器变量,它包含了当前请求的主机名,然后将其拼接在HTML的链接中。如果攻击者能够控制 $_SERVER['HTTP_HOST'] 的值,就会发现恶意攻击

如何识别和利用 HTTP Host 标头漏洞

网站是否容易受到 HTTP Host 标头的攻击,需要确定是否能够修改 Host 标头,并且仍然能够使用您的请求到达目标应用程序。通过提供任意的或无法识别的域名的 Host 标头,观察响应情况。但是由于 Host 标头是网站运行方式的基本组成部分,因此篡改它通常意味着根本无法访问目标应用程序。收到请求的前端服务器或负载均衡器可能根本不知道将其转发到何处,

从而导致某种类型的“Invalid Host header”错误。还可能由于某种安全措施而被阻止,而不是收到 “Invalid Host header” 响应。例如,某些网站将验证 Host 标头是否与 TLS 握手的 SNI (SNI 是 TLS 协议的一个扩展,允许客户端在发起 HTTPS 请求时指定它要连接的服务器名称。这样服务器可以根据不同的域名提供不同的证书。)匹配。这并不一定意味着它们不受 Host 标头攻击。Web 站点如何解析 Host 标头?服务器一般会根据 Host 标头中的域名、IP地址端口号等路由请求。当我们漏洞挖掘是可以修改端口或伪造域名来绕过验证。

某些解析算法将省略 Host 标头中的端口,仅验证域名;有时候还可以通过修改非数字端口,保持域名不变,这时就可以通过该端口注入有效负载。有些网站可能会使用复杂的匹配逻辑来验证请求的合法性,但是如果网站允许任意子域,则可以通过注册一个与白名单域名字符序列相同的任意域名来绕过这种验证。例如,如果白名单域名为 example.com ,则可以注册一个类似 exa-mple.com 的域名。由于网站的匹配逻辑只检查字符序列,而不是完整的域名,因此这种绕过验证的方法可能会成功。这种方法的成功率取决于网站的匹配逻辑和域名注册政策。在某些情况下,网站可能会使用更复杂的匹配逻辑,例如检查域名的完整性和注册信息,以防止这种绕过验证的方法。

在许多 Web 应用程序中,验证主机的代码和对主机执行易受攻击的操作的代码通常位于不同的应用程序组件中,甚至可能位于不同的服务器上。这种分离可能导致系统在检索 Host 标头的方式上存在差异,从而为攻击者提供了利用的机会。

攻击者可以通过识别这些差异,发出一个不明确的请求,该请求在不同的系统组件中会被解释为不同的主机。例如,假设一个应用程序有两个组件:一个负责验证主机,另一个负责处理对主机的敏感操作。如果这两个组件在检索 Host 标头的方式上存在差异,攻击者就可以构造一个请求,使得验证组件认为请求来自一个合法的主机,而处理敏感操作的组件则认为请求来自一个不同的、可能是恶意的主机。攻击者需要仔细研究系统的架构和代码找到突破点。

发送不明确请求的方法

注入重复的 Host 标头

添加重复的 Host 标头,不同的系统和技术会以不同的方式处理这种情况,但通常会优先考虑两个 Headers 中的一个,从而有效地覆盖其值。当系统对哪个标头是正确的标头存在分歧时,这可能会导致您可以利用的差异。

GET /example HTTP/1.1Host: abc.comHost: bad

假设前端优先使用 Headers 的第一个实例,但后端优先使用最后一个实例。在这种情况下,可以使用第一个标头来确保将请求路由到预期目标,并使用第二个标头将有效负载传递到服务器端代码中。

提供绝对 URL

在HTTP请求中,请求行通常包含一个相对路径(即GET部分),该路径指定了请求的资源在当前域上的位置。然而,许多服务器也被配置为理解对绝对URL的请求,这意味着它们可以处理包含完整URL的请求行。这种灵活性可能会导致歧义,因为请求中同时提供了绝对URL和Host标头。同的系统可能会以不同的方式处理这种歧义。例如,一些系统可能会优先考虑请求行中的绝对URL,而另一些系统可能会优先考虑Host标头中的值。

GET https://example.com/ HTTP/1.1Host: bad

添加换行

在HTTP协议中,Headers(头部)是用来传递附加信息的一组键值对。通常情况下,Headers之间是通过换行符来分隔的。然而,如果在Headers中使用了空格字符来进行缩进,那么不同的服务器可能会以不同的方式来解释这些Headers。

一些服务器可能会将缩进的Headers解释为换行,因此会将其视为前一个Headers值的一部分。例如,如果一个请求中包含了一个缩进的Host Header,那么一些服务器可能会将其视为前一个Header(例如User-Agent)的一部分。这可能会导致请求的解析出现问题,因为服务器可能会错误地解释请求的意图。

另一方面,其他服务器可能会完全忽略缩进的Headers。这意味着它们会忽略这些Headers,并且不会将它们作为请求的一部分来处理。这可能会导致请求的行为发生变化,因为某些Headers可能不会被正确地传递给服务器。

GET /abc HTTP/1.1    Host: badHost: example.com

网站可能会阻止具有多个 Host 标头的请求,但可以通过像这样缩进其中一个标头来绕过此验证。如果前端忽略了缩进的 header,则该请求将作为普通的 example.com 请求处理。现在,假设后端忽略了前导空格,并在重复的情况下优先于第一个 Headers。这种差异可能允许您通过 “包裹” Host 标头传递任意值。

注入主机覆盖标头

即使在无法直接修改或替换Host标头的情况下,也有可能通过其他HTTP标头来间接影响Host标头的值。这是因为一些HTTP标头的设计初衷就是允许客户端在请求中指定目标服务器的域名或IP地址。

例如,X-Forwarded-Host标头通常由反向代理或负载均衡器使用,以指示原始请求中的Host标头的值。这个标头的设计初衷是为了在请求经过中介服务器时,保留原始请求中的Host标头的值。然而,如果服务器没有正确地验证或过滤这个标头的值,那么攻击者就可能利用这个标头来注入恶意的有效负载。攻击者可以构造一个请求,其中包含了一个恶意的X-Forwarded-Host标头,以试图欺骗服务器认为请求来自另一个域。

X-Real-IP标头通常由反向代理或负载均衡器使用,以指示原始请求中的客户端IP地址。如果服务器没有正确地验证或过滤这个标头的值,那么攻击者就可能利用这个标头来注入恶意的有效负载。

类似X-Forwarded-Host标头还有:

  • X-Host

  • X-Forwarded-Server

  • X-HTTP-Host-Override

  • Forwarded

X-Forwarded-Host是为了解决反向代理服务器或负载均衡器修改 Host 标头的问题时,反向代理服务器或负载均衡器通常会注入 X-Forwarded-Host 标头。当一个请求通过反向代理或负载均衡器时,原始请求中的Host标头的值可能会被修改或替换,以反映目标服务器的主机名或域名。为了保留原始请求中的Host标头的值,反向代理或负载均衡器会在请求中添加X-Forwarded-Host标头,以指示原始请求中的Host标头的值。。

1. X-Forwarded-Host 的作用

X-Forwarded-Host 标头的主要作用是保留原始请求的 Host 信息。当请求经过中介系统(如负载均衡器或反向代理)时,中介系统可能会修改 Host 标头。为了确保后端服务器能够获得原始的 Host 信息,前端会在请求中注入 X-Forwarded-Host 标头。

2. 框架对 X-Forwarded-Host 的处理

许多现代的Web框架都能够识别并使用 X-Forwarded-Host 标头。当这些框架检测到 X-Forwarded-Host 标头时,它们会优先使用这个标头中的信息,而不是直接使用 Host 标头。这样可以确保后端服务器能够正确处理请求,即使请求经过了多个中介系统。

使用 Web 缓存中毒进行 XSS 攻击示例

有如下请求和响应:

GET /en?region=uk HTTP/1.1Host: example.comX-Forwarded-Host:example.com.uk

X-Forwarded-Host 标头的值用于动态生成 Open Graph 图像 URL,然后将其反映在响应中。应用程序可以使用该头部信息获取客户端请求的原始主机名。X-Forwarded-Host 标头通常是未加密的。但是请求是通过HTTPS发送的,那么请求头中的信息就会被加密,

HTTP/1.1 200 OKCache-Control: public     #HTTP头,用于控制缓存行为,"public" 表示任何用户都可以缓存这个响应,包括中间的代理服务器和客户端浏览器。<meta property="og:image" content="https://example.com.uk/cms/social.png" />

第三行这是一个HTML meta标签,用于指定网页的元数据。在这里,"og:image" 是一个Open Graph协议的属性,用于指定网页的缩略图URL。"content" 属性则给出了缩略图的具体URL。

从响应中我们看出该请求的响应来自缓存,还有一些缓存标识:HIT TCP_MEM_HIT内存缓存、Hit From MemCache、Hit From Disktank Hit From Upstream(未命中缓存),还有很多不再一一列举,目的就是查看

如果我们修改X-Forwarded-Host的值为a."><script>alert(1)</script>"如果缓存了此响应,则将向访问 /en?region=uk 的所有用户提供此 XSS 有效负载会返回1的弹窗。请求响应如下:

GET /en?region=uk HTTP/1.1Host: example.comX-Forwarded-Host: a."><script>alert(1)</script>"HTTP/1.1 200 OKCache-Control: public<meta property="og:image" content="https://a."><script>alert(1)</script>"/cms/social.png" />

END

剖析HTTP Host 标头攻击

老付

剖析HTTP Host 标头攻击

欢迎扫码

关注我们

网络安全

剖析HTTP Host 标头攻击
剖析HTTP Host 标头攻击
剖析HTTP Host 标头攻击

原文始发于微信公众号(老付话安全):剖析HTTP Host 标头攻击

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年12月17日13:11:57
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   剖析HTTP Host 标头攻击https://cn-sec.com/archives/3502089.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息