HTTP主机头攻击笔记
个人总结
参考:https://portswigger.net/web-security/host-header
- name: 个人总结
desc: 参考:https://portswigger.net/web-security/host-header
bgColor: '#F0DFB1'
textColor: 'green'
2
3
4
# HTTP主机头攻击笔记
# 1Host标头基本知识
# 1、Host标头是什么?
答案
该标头用于指定客户端将要访问的目标 IP 或域名,一般有浏览器自动添加和发出。
- 例如客户端访问
https://192.168.1.1/
,则标头就为Host: 192.168.1.1
- 如果客户端访问
https://cn.bing.com
,则标头就位Host: cn.bing.com
在某些情况下,Host
标头的值在到达预期的后端组件之前,可能会发生更改(例如,当请求被中间系统转发时)。
# 2、Host标头的作用是什么?
答案
Host
标头的用途是,帮助客户端确定 要与之通信的后端组件。如果请求不包含Host
标头,或者Host
标头的格式不正确,则在将传入的请求 路由到预期应用程序时,可能会导致问题。
- 以前,一个 IP 地址只托管一个域,所以不指定
Host
标头可能也没问题 - 现在,使用同一 IP 地址访问多个网站和应用程序是很常见的
# 3、当可通过同一 IP 地址访问多个应用程序时,会发生哪两种情况?
答案
第一种情况:虚拟主机。
- 单个 Web 服务器托管多个网站或应用程序
- 对于访问网站的普通用户来说,虚拟主机 与 托管在自己专用服务器上的网站没有区别。
- 这些网站都有不同的域名,但它们都与服务器共享同一个通用的 IP 地址
- 这种情况不像以前那么常见,但仍然发生在一些基于云的 SaaS 解决方案中。
第二种情况:通过中介路由流量。
- 网站托管在不同的 Web 服务器上
- 客户端和服务器之间的所有流量,都通过中间系统来转发和路由。这可以是一个简单的负载均衡器,也可以是某种类型的反向代理服务器
- 在这种情况下,即使网站托管在单独的后端服务器上,它们的所有域名都会解析为中间组件的单个 IP 地址
- 在客户端通过内容分发网络(CDN)访问网站的情况下,此设置尤为普遍
但不管是哪一种情况,都具有相同的挑战。因为反向代理 或 负载均衡器需要知道,它应该将每个请求路由到哪一个适当的后端。
# 4、Host标头如何解决以上两种情况产生的问题?
答案
在这两种情况下,都依赖于Host
标头来指定预期的收件人。一个常见的类比,给住在公寓楼里的人寄信的过程:
- 整栋大楼都有相同的街道地址,但在这个街道地址后面 有许多不同的公寓,每个公寓都需要以某种方式 接收正确的邮件。
- 解决这类问题的一种方法是,在地址中包含公寓号码或收件人姓名。对于 HTTP 消息,
Host
标头具有类似的用途。
当浏览器发送请求时,目标 URL 将解析为特定服务器的 IP 地址。当此服务器收到请求时,它会引用Host
标头来确定预期的后端,并相应地转发请求。(如果你学过 k8s,则会发现 k8s 中的 Ingress 资源对象具有相同的用途)
# 2HTTP主机头攻击
# 1、什么是HTTP主机头攻击?
答案
易受攻击的网站以不安全的方式处理Host
标头值,且隐式信任Host
标头,未能正确验证或转义它。攻击者可以利用此输入点,来注入可以操纵服务端行为的有害载荷。
这一类涉及将有效载荷直接注入Host
标头的攻击,通常被称为 “主机头注入” 或 “Host
标头注入” 攻击。
# 2、主机头攻击漏洞是如何产生的?
答案
- 易受攻击的网站以不安全的方式处理
Host
标头值,且隐式信任Host
标头,未能正确验证或转义它。 - 即使
Host
标头本身的处理很安全,但根据不同的服务器配置,Host
也可能会被其他注入的标头覆盖。有时,网站所有者并不知道 默认情况下 支持这些标头(例如X-Forwarded-Host
)。因此,这些额外标头可能不会受到相同级别的审查。
# 3测试Host标头
# 1、如何测试Host标头?
答案
你需要确定Host
标头是否能够修改,并且在修改之后,你的请求仍然可以到达目标应用程序。如果确实是这样,你可以使用此标头来探测应用程序,并观察这对响应的影响。
# 2、测试Host标头的方法
答案
- 提供任意Host标头
- 格式正确的其他标头
- 故意格式错误的其他标头
- 检查有缺陷的验证
- 提供非数字端口
- 注册一个与白名单匹配的任意域名,只需要以相同的字符序列 结尾 即可
- 发送模糊请求
- 重复注入 Host 标头
- 提供绝对 URL
- 添加换行
- 格式错误的请求行
- 其他技术
- 注入Host覆盖标头
X-Host
X-Forwarded-Server
X-HTTP-Host-Override
Forwarded
# 4利用主机头攻击漏洞
答案
- 密码重置投毒
- 基本投毒
- 通过中间件投毒
- 通过悬挂标记投毒
- Web 缓存投毒
- 利用经典的服务端漏洞
- 身份验证绕过
- 虚拟主机暴力破解
- 基于路由的 SSRF
- 连接状态攻击
# 5如何防范HTTP主机头攻击
答案
最简单的方法是,避免在服务端代码中完全信任和使用Host
标头。仔细检查每个绝对 URL 是否真的被需要。你经常会发现,你可以只使用相对 URL,而非绝对 URL(这个简单的更改还可以帮助你特别防止 Web 缓存投毒漏洞)。
一些其他方法: