MC思变安全 MC思变 2023-09-07 18:27 发表于河南
一、什么是Host头在http请求包里,可以看到其中一个header是Host,这个字段是HTTP/1.1新增字段。
广为人知的是,http请求属于应用层,其中的headers可被应用更改,也可以按照需要自定义headers。而Host,则是定义了客户端访问的的主机名和端口号,如此就可以根据host来定位应用,从而实现虚拟主机技术。 举个简单例子,如果想要在一台服务器上独立运行2个应用,就可以使用Host来将流量转发给不同的应用 如下图,当Host为siteA.com时,转发给A应用,Host为siteB.com时,转发给B应用
二、Host头攻击方式受Host头攻击影响的站点,必然是站点中的功能,需要用到Host头的内容,举几个例子 - localhost权限过大:网站后端允许host为localhost的流量进行任意操作操作,如增删改查
- 302跳转:网站在进行302跳转时,使用了Host头
- 链接拼接:网站进行链接生成时使用了Host头
当然,根据Host在网站功能上的作用不同,还会有其他的攻击方式,这个漏洞,每一个网站都有可能存在。 三、Host头攻击防御对于Host头攻击的防御,大致分为两个方向:应用检测Host头、应用前置检测Host头。应用前置指的是逻辑上前置,并非物理上前置,也就是说HTTP请求应先到达前置,再到达应用。 [size=1em]1、修复核心——白名单Host头攻击的利用,是将Host内容修改为非预期的Host,那防御目的也就成了防止非预期Host,因此,需要设置一个Host白名单,HTTP请求的Host如果在白名单中,则请求正常进行,否则将返回一个错误提示。 [size=1em]2、应用检测Host头应用检测Host头,一般是在代码层面进行,通过代码提取HTTP请求包中的Host字段,与白名单进行匹配,这就需要各位开发大佬定位代码位置,添加关键代码了。 通过修改代码来检测Host头,难度较大,不建议使用。 [size=1em]3、应用前置检测Host头在HTTP请求从互联网进入到内网之后,往往会经过很多设备的转发,而比较适合配置Host头检测的,就是Apache/Nginx,这两个中间件应用范围极广,配置白名单也较为简单。当然,如果网站使用了TongWeb,TongWeb自带有Host头检测模块,可以直接使用。 Apache配置Host检测配置方法一- #修改ServerName为允许的Host
- ServerName www.domain.com:8080
- #添加多个允许的Host
- ServerAlias a.com b.com
- #使用规范的服务器名,当HTTP请求的Host不存在以上配置的名单里,则修改Host为www.domain.com:8080
- UseCanonicalName On
复制代码
配置方法二
- LoadModule rewrite_module modules/mod_rewrite.so
- RewriteEngine On
- #正则匹配
- RewriteCond %{HTTP_HOST} !^example\.com$ [NC]
- #不符合RewriteCond的正则匹配时,拒绝请求
- RewriteRule ^ - [F]
复制代码
Nginx配置Host检测配置方法一- server {
- listen 80;
- server_name example.com www.example.com;
- # 其他配置...
- }
复制代码
配置方法二通过Nginx的if语句进行匹配,可以使用正则表达式,更加灵活,且返回的403验证码也更利于验证 - server {
- listen 80;
- server_name example.com;
- if ($http_host !~* "^example\.com$") {
- return 403;
- }
- # 其他配置...
- }
复制代码由于Host头的便利性,很多网站仍存在在网站功能中使用Host头的情况,使用Host的场景不同,造成的危害也有大有小。总之,这是一个值得修复的漏洞。
|