本文主要基于post swigger的教程

本篇内容

在本节中,我们将讨论错误配置和有缺陷的业务逻辑如何通过HTTP Host标头使网站遭受各种攻击。我们将概述识别主机标头漏洞的高级方法,并演示如何利用它们。最后,我们将提供一些常规指导,指导您如何保护自己的网站免遭此类攻击。

什么是HTTP Host请求头

从HTTP / 1.1开始,HTTP Host标头是必需的请求标头。它指定客户端要访问的域名。例如,当用户访问时https://portswigger.net/web-security,他们的浏览器将组成一个包含Host标头的请求,如下所示:

GET /web-security HTTP/1.1
Host: portswigger.net

当然,如果有中间转发的话,Host的值可能会不一样

HTTP Host请求头的目的是什么?

HTTP Host标头的目的是帮助识别客户端要与之通信的后端组件。如果请求不包含Host标头,或者Host标头以某种方式格式不正确,则在将传入请求路由到预期的应用程序时可能会导致问题。

从历史上看,这种歧义并不存在,因为每个IP地址只会托管单个域的内容。如今,很大程度上是由于基于云的解决方案和将许多相关体系结构外包的不断增长的趋势,通常可以在同一IP地址访问多个网站和应用程序。这种方法的普及也部分是由于IPv4地址耗尽所致。

通过同一个ip访问多个应用是怎么回事

虚拟主机

一种可能的情况是,单个Web服务器托管多个网站或应用程序。这可能是具有单个所有者的多个网站,但是也可能将具有不同所有者的网站托管在一个共享平台上。这种情况比以前少见,但在某些基于云的SaaS解决方案中仍然会发生。

无论哪种情况,尽管这些不同的网站中的每一个都将具有不同的域名,但是它们都与服务器共享一个公共IP地址。以这种方式在单个服务器上托管的网站称为“虚拟主机”。

对于访问该网站的普通用户来说,虚拟主机通常与托管在其专用服务器上的网站是无法区分的。

通过中介路由流量

另一个常见的情况是,网站托管在不同的后端服务器上,但是客户端和服务器之间的所有流量都通过中介系统进行路由。这可能是一个简单的负载平衡器或某种反向代理服务器。在客户通过内容分发网络(CDN)访问网站的情况下,这种设置尤其普遍。

在这种情况下,即使网站托管在单独的后端服务器上,它们的所有域名也都解析为中间组件的单个IP地址。这带来了与虚拟主机相同的挑战,因为反向代理或负载平衡器需要知道将每个请求路由到的适当后端。

HTTP Host如何解决此问题?

在这两种情况下,都依赖于Host来指定预期的收件人。一个常见的类比是向居住在公寓楼中的某人发送一封信的过程。整个建筑物具有相同的街道地址,但是在该街道地址后面有许多不同的公寓,每套公寓都需要以某种方式接收正确的邮件。解决此问题的一种方法就是简单地在地址中包含公寓号码或收件人的名字。对于HTTP消息,Host标头起类似的作用。

当浏览器发送请求时,目标URL将解析为特定服务器的IP地址。当该服务器接收到请求时,它参考主Host header来确定预期的后端并相应地转发该请求。

什么是HTTP主机标头攻击?

HTTP主机标头攻击利用易受攻击的网站,这些网站以不安全的方式处理主机标头的值。如果服务器隐式信任Host标头,但未能正确验证或转义它,则攻击者可能能够使用此输入来注入有害的有效负载,以操纵服务器端的行为。涉及直接将有效负载注入主机标头的攻击通常称为“主机标头注入”攻击。

现成的Web应用程序通常不知道它们部署在哪个域上,除非在安装过程中在配置文件中手动指定了该域。例如,当他们需要知道当前域以生成电子邮件中包含的绝对URL时,他们可以求助于Host头中的域:

Contact support

标头值还可以用于网站基础结构的不同系统之间的各种交互。

由于Host标头实际上是用户可控制的,因此这种做法可能导致许多问题。如果未正确地对输入进行转义或验证,则主机标头是利用一系列其他漏洞的潜在载体,最明显的是:

Web缓存中毒
特定功能中的 业务逻辑缺陷
基于路由的SSRF
经典的服务器端漏洞,例如SQL注入

Web cache poisoning
Business logic flaws in specific functionality
Routing-based SSRF
Classic server-side vulnerabilities, such as SQL injection

HTTP Host标头漏洞如何产生?

HTTP主机标头漏洞通常是由于错误的假设而造成的,即该标头不可由用户控制。即使攻击者可以使用Burp Proxy之类的工具轻松地修改主机标头,这也会在Host标头中创建隐式信任,并导致其验证或转义不足。

即使可以更安全地处理Host标头本身,具体取决于处理传入请求的服务器的配置,也可以通过注入其他标头来覆盖Host。有时,网站所有者不知道默认情况下支持这些标头,因此,它们可能不会受到相同级别的审查。

实际上,这些漏洞中的许多并非是由于编码不安全,而是因为相关基础架构中一个或多个组件的配置不安全。由于网站将第三方技术集成到其体系结构中,而不必了解配置选项及其安全隐患,因此可能会发生这些配置问题。

如何防止HTTP主机标头攻击

为防止HTTP主机头攻击,最简单的方法是避免在服务器端代码中使用绝对主机头。仔细检查每个URL是否真的需要绝对。您通常会发现您可以只使用相对URL。这个简单的更改可以帮助您特别防止Web缓存中毒漏洞。

防止HTTP主机标头攻击的其他方法包括:

保护绝对网址
当必须使用绝对URL时,应要求在配置文件中手动指定当前域,并引用此值而不是Host标头。例如,这种方法将消除密码重置中毒的威胁。

验证主机头
如果必须使用Host标头,请确保正确验证它。这应该包括对照允许域的白名单检查它,以及拒绝或重定向对无法识别的主机的任何请求。您应查阅框架文档以获取有关执行此操作的指导。例如,Django框架ALLOWED_HOSTS在设置文件中提供了该选项。这种方法将减少您遭受主机标头注入攻击的风险。

不支持主机替代标头
同样重要的是要检查您是否不支持可能用于构造这些攻击的其他标头,尤其是X-Forwarded-Host。请记住,默认情况下可能支持这些功能。

将允许的域名列入白名单
为了防止对内部基础结构进行基于路由的攻击,您应该将负载平衡器或任何反向代理配置为仅将请求转发到允许域的白名单。

注意仅限内部使用的虚拟主机
使用虚拟托管时,应避免将面向内部的网站和应用程序与面向公众的内容托管在同一服务器上。否则,攻击者可能可以通过主机标头操纵来访问内部域。

HTTP Host header attacks Web安全系列(一)相关推荐

  1. PortSwigger Academy | HTTP Host header attacks : HTTP Host头攻击

    本文地址: https://blog.csdn.net/qq_42942594/article/details/110090787 文章目录 总结: 1.什么是HTTP Host头? 2.HTTP H ...

  2. 构建安全的Xml Web Service系列之如何察看SoapMessage

    上一篇文章地址:构建安全的Xml Web Service系列一之初探使用Soap头 (5-22 12:53)          要分析Xml Web Service的安全性,首先要解决的问题是我们能了 ...

  3. HTTP Host Header Attack:Basic password reset poisoning

    密码找回方式: 传统的密码找回方式,就是在给预先设定好的邮箱发送重置密码链接. 攻击者可以利用中间人攻击对重置链接密码的数据包进行修改,改为发送成自己的邮箱,从而达到恶意窃取账户的目的. 随着传统技术 ...

  4. ASP .NET Core Web MVC系列教程四:添加模型

    系列文章目录:ASP .NET Core Web MVC系列教程:使用ASP .NET Core创建MVC Web应用程序 上一个教程:ASP .NET Core Web MVC系列教程三:添加视图 ...

  5. ASP .NET Core Web MVC系列教程三:添加视图

    系列文章目录:ASP .NET Core Web MVC系列教程:使用ASP .NET Core创建MVC Web应用程序 上一个教程:ASP .NET Core Web MVC系列教程二:添加控制器 ...

  6. ASP .NET Core Web MVC系列教程二:添加控制器

    系列文章目录:ASP .NET Core Web MVC系列教程:使用ASP .NET Core创建MVC Web应用程序 上一个教程:ASP .NET Core Web MVC系列教程一:创建一个W ...

  7. ASP .NET Core Web MVC系列教程一:创建一个Web应用程序

    系列文章目录:ASP .NET Core Web MVC系列教程:使用ASP .NET Core创建MVC Web应用程序 从Visual Studio中选择" 创建新项目". 选 ...

  8. ASP .NET Core Web MVC系列教程:使用ASP .NET Core创建MVC Web应用程序

    本系列教程翻译自微软官方教程,官方教程地址:Get started with ASP.NET Core MVC | Microsoft Docs 本系列教程介绍了构建MVC Web应用程序的基础知识. ...

  9. maven mybatis mysql_Java Web学习系列——Maven Web项目中集成使用Spring、MyBatis实现对MySQL的数据访问...

    标签: 本篇内容还是建立在上一篇Java Web学习系列--Maven Web项目中集成使用Spring基础之上,对之前的Maven Web项目进行升级改造,实现对MySQL的数据访问. 添加依赖Ja ...

最新文章

  1. unix网络编程之简介
  2. 从字符串中提取BCD码,转换为UINT数据并返回
  3. 微信登录提示逻辑不正确_Axure RP 9 教程:模拟登录注册
  4. PHP安装加载yaf扩展
  5. 清华大学人工智能研究院成立大数据智能研究中心
  6. 直播马上开始|不要怂,一起上!关于黑客攻防,我们有话要说
  7. 机器学习基石HOW部分(2)
  8. Redis主从复制原理学习
  9. php mvc urlencode,PHP – LIUGUOFENG
  10. 我有一辆机器人小车,怎么让它跑起来,还会避障、目标跟踪、路径规划?
  11. 基于min-max搜索和alpha-beta(α-β)剪枝的五子棋的c语言实现(带简单禁手)
  12. ◮OpenGL-抗锯齿
  13. “爱拍照”的OPPO逆袭战:合并一加,跑步造车
  14. Discriminative Learning of Relaxed Hierarchy for Large-scale Visual Recognition
  15. 详解adb shell 常用命令
  16. Docker部署及常见问题
  17. 【C++】定义一个求绝对值函数的模板,实现对不同数据类型的数求绝对值。
  18. 去掉wps的word中首字母大写
  19. 中国普通民营企业当前营销的矛盾分析
  20. Vue+SpringBoot实现评论功能

热门文章

  1. 众推项目的文档分享流程
  2. HashMap1.8源码解析
  3. 《网络安全与渗透测试》课堂笔记---14
  4. 王者荣耀8月25服务器维护,王者荣耀8月15日更新维护几点开始?王者荣耀更新维护多久...
  5. 架构之路_十一种行为型设计模式
  6. BSS 7230 航空内饰材料阻燃性能测试
  7. 【SPFA,并查集,dp】黑心商店1
  8. wps连接zotero,方便文献插入
  9. 艾永亮:宠物医院风云,当商人穿起了白大褂
  10. 线性布局嵌套相对布局