host头部注入漏洞--中危

本文详细介绍了Host头部注入漏洞的原理,该漏洞源于开发人员依赖不可信的HTTP_HOST变量,可能导致恶意代码执行。漏洞验证包括检查响应是否包含修改后的Host字段。修复方案包括服务器配置如Nginx和Apache的调整,以及应用程序中使用可信的SERVER_NAME代替Host头。建议在网站初始化时建立域名白名单以增强安全性。
摘要由CSDN通过智能技术生成


漏洞原理

为了方便获取网站域名,开发人员一般依赖于请求包中的Host首部字段。例如,在php里用_SERVER[“HTTP_HOST”]。但是这个Host字段值是不可信赖的(可通过HTTP代理工具篡改),如果应用程序没有对Host字段值进行处理,就有可能造成恶意代码的传入。

漏洞知识扩展

Host首部字段是HTTP/1.1新增的,旨在告诉服务器,客户端请求的主机名和端口号,主要用来实现虚拟主机技术。
运用虚拟主机技术,单个主机可以运行多个站点。以下图为例,test1和test2两个站点都运行在同一服务器A上,不管我们请求哪个域名,最终都会被解析成服务器A的IP地址,这个时候服务器就不知道该将请求交给哪个站点处理,因此需要Host字段指定请求的主机名。
我们访问test1域名,经DNS解析,变成了服务器A的IP,请求传达到服务器A,A接收到请求后,发现请求报文中的Host字段值为test1,进而将请求交给test1站点处理。
在这里插入图片描述

漏洞验证

Host头攻击漏洞的验证比较简单,只需要抓包,修改Host字段值,提交,查看响应中是否包含修改后的Host字段值即可。

情况一

正常请求,响应302,Location首部字段指明跳转的地址,其中Location字段值为Host字段指定的地址。
在这里插入图片描述

情况二

正常请求,正常响应,将Host字段值拼接到标签属性值中。(因为自己目前还没遇到这种情况,就先借鉴下别人的图啦)
在这里插入图片描述

修复方案

1、服务器方面
唯一可信的只有 SERVER_NAME,这个在Apache和Nginx里可以通过设置一个虚拟机来记录所有的非法host header。
Nginx里还可以通过指定一个SERVER_NAME名单,Apache也可以通过指定一 个SERVER_NAME名单并开启UseCanonicalName选项。
建议以上两种方法同时使用。
2、应用方面
在网站安装和初始化的时候,要求管理员提供一个可信任的域名白名单。如果这个实现起来比较困难,那至少也要保证使用使用getServerName()代替getHeader(“Host”)。

参考链接:
https://www.freebuf.com/articles/web/202764.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值