HTTP Host 头攻击,是什么鬼?

1. HTTP Host头攻击从HTTP / 1.1开始,HTTP Host标头是必需的请求标头 。它指定客户端要访问的域名 。例如,当用户访问
https://example.net/web-security时,其浏览器将组成一个包含Host标头的请求,如下所示:
GET /web-security HTTP/1.1Host: example.net在某些情况下,例如当请求由代理转发时,Host值可能会在到达预期的后端组件之前进行更改 。也就发生了Host头攻击 。

HTTP Host 头攻击,是什么鬼?

文章插图
 
2. HTTP Host头的作用HTTP Host头的目的是帮助识别客户端要与之通信的后端组件 。如果请求不包含Host头或者格式不正确,则在将传入请求的应用程序时可能会导致问题 。
从历史上看,这种漏洞并不存在太大问题,因为每个IP地址只会被用于单个域的内容 。如今,很大程度上是由于同一个IP上存在多个Web应用程序(不同端口,不同域名解析等),通常可以在同一IP地址访问多个网站和应用程序 。这种方法的普及也部分是由于IPv4地址耗尽所致 。
当可以通过同一IP地址访问多个应用程序时,最常见的原因是以下情况之一:
  • 虚拟主机
单个Web服务器托管多个网站或应用程序 。这可能是具有单个所有者的多个网站,但是也可能是不同所有者的网站托管在同一个共享平台上 。它们都与服务器共享一个公共IP地址 。
  • 通过代理路由流量
网站托管在不同的后端服务器上,但是客户端和服务器之间的所有流量都通过代理系统进行路由 。这可能是一个简单的负载平衡设备或某种反向代理服务器 。在客户通过内容分发网络(CDN)访问网站的情况下,这种设置尤其普遍 。
在上面两种种情况下,即使网站托管在单独的后端服务器上,它们的所有域名也都解析为中间组件的单个IP地址 。这带来了与虚拟主机相同的问题,因为反向代理或负载平衡需要知道每个请求到的哪个后端上 。
HTTP Host头的作用就在于,指定请求应该发送到那个应用程序的后端服务器上 。打个比方,一封信需要送到居住在公寓楼中的某人手中,整个公寓有许多房间,每个房间都可以接受信件,通过指定房间号和收件人(也就是HTTP Host头)来将信封送到指定的人手中 。
 
3. 什么是HTTP Host头攻击一些网站以不安全的方式处理Host头的值 。如果服务器直接信任Host头,未校验它的合法性,则攻击者可能能够使用此可控变量来注入Host,以操纵服务器端的行为 。
现成的Web应用程序通常不知道将它们部署在哪个域上,除非在安装过程中在配置文件中手动指定了该域 。例如,当他们需要知道当前域以生成电子邮件中包含的绝对URL时,他们可能依赖于Host头中的值:
<a href=https://www.isolves.com/it/aq/hk/2022-01-10/"https://_SERVER['HOST']/support">联系支持Host头值还可以用于不同网站系统之间的各种交互 。
由于Host头实际上是用户可控制的,因此这种做法可能导致许多问题 。如果未校验或者直接使用Host头,则Host头可以与一系列其他漏洞“组合拳”攻击,比如:
  • 缓存投毒
  • 特殊业务功能的逻辑漏洞
  • 基于路由的SSRF
  • 经典服务端漏洞,如SQL注入(当Host被用于SQL语句时)等
4. 如何发掘HTTP Host头攻击首先要判断服务端是否检测Host头?检测完了是否还使用Host头的值?
通过修改Host的值,如果服务端返回错误信息:
HTTP Host 头攻击,是什么鬼?

文章插图
 
则说明服务端检测了Host的内容 。至于有没有使用Host头的值,有以下几种方法去发掘:
修改Host值简单的来说,可以修改HTTP头中的Host值,如果观察到响应包中含有修改后的值,说明存在漏洞 。
但有时候篡改Host头的值会导致无法访问Web应用程序,从而导致“无效主机头”的错误信息,特别是通过CDN访问目标时会发生这种情况 。
添加重复的Host头添加重复的Host头,通常两个Host头之中有一个是有效的,可以理解为一个是确保请求正确地发送到目标服务器上;另一个则是传递payload到后端服务器中 。
GET /example HTTP/1.1Host: vulnerable-website.comHost: attackd-stuff使用绝对路径的URL尽管许多请求通常在请求域上使用相对路径,但是也同时配置了绝对URL的请求 。
GET https://vulnerable-website.com/ HTTP/1.1Host: attack-stuff


推荐阅读