欢迎来到 无奈人生 安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

在Web服务器防止Host头攻击

来源: 作者: 时间:2019-02-24 21:00 点击: 我要投稿
广告位API接口通信错误,查看德得广告获取帮助

访问网站时如果访问路径中缺少/,大多数中间件都会自动将路径补全,返回302或301跳转如下图,Location位置的域名会使用Host头的值。
这种情况实际上风险较低,难以构成Host头攻击。但是由于大多漏洞扫描器会将这种情况检测为Host头攻击,为了通过上级检查或各种审核,大多数甲方单位会要求修复漏洞,彻底解决问题。

该跳转路径不是web项目定义的,是中间件自动跳转的,所以不能用编写静态变量的方法修复,web项目中的全局过滤器也无法拦截。需要在web服务器层面配置才能修复。下面给出几种常见服务器的参考修复方法,其中如有错误或不妥的地方欢迎指正。
Apache:
方法一:
修改\conf\httpd.conf文件
修改ServerName为应用的域名,例如
ServerName www.domain.com:80
添加下列行
UseCanonicalName On

重启Apache即可。
修复成功的话会看到,服务器端将会使用设定好的ServerName。
 

参数解释:

方法二:
修改\conf\httpd.conf文件
参考以下配置添加:
NameVirtualHost 192.168.0.16
192.168.0.16>
ServerName 192.168.0.16
Order Allow,Deny
Deny from all
   
192.168.0.16>
DocumentRoot "C:\www"
ServerName www.test.com
重启Apache即可。
作用:
拒绝直接通过192.168.0.16这个IP的任何访问请求,这时如果你用192.168.0.16访问,会提示拒绝访问。仅允许通过www.test.com这个域名访问,主目录指向C:\www

方法三:
修改\conf\httpd.conf文件
找到”#LoadModule rewrite_module modules/mod_rewrite.so”去除前面的”#”号
添加类似以下配置:
RewriteEngine on
RewriteCond %{HTTP_HOST} !^192.168.0.16$ [NC]
RewriteRule ^(.*)$ /error.html
重启Apache即可。
作用:
当HOST头不是192.168.0.16时,重定向到错误页面。

Nginx:
方法一:
修改nginx.conf
添加一个默认server,当host头被修改匹配不到server时会跳到该默认server,该默认server直接返回403错误。
例子如下:
server {
       listen 8888 default;
       server_name _;
       location / {
            return 403;
       }
       }
重启nginx即可。
方法二:
修改nginx.conf
在目标server添加检测规则,参考以下标红配置:
  
server {
       server_name  192.168.0.171;
       listen       8888;
        if ($http_Host !~*^192.168.0.171:8888$)
        {
        return 403;
        }
       include /etc/nginx/default.d/*.conf;
       location / {
       root /www/dvwa;
       index index.php index.html index.htm;
       }
       }
重启nginx即可。

Tomcat:
修改tomcat\conf\server.xml
找到如下位置:

将Host里的name修改为静态的域名,如下:

[1] [2]  下一页

访问网站时如果访问路径中缺少/,大多数中间件都会自动将路径补全,返回302或301跳转如下图,Location位置的域名会使用Host头的值。
这种情况实际上风险较低,难以构成Host头攻击。但是由于大多漏洞扫描器会将这种情况检测为Host头攻击,为了通过上级检查或各种审核,大多数甲方单位会要求修复漏洞,彻底解决问题。

该跳转路径不是web项目定义的,是中间件自动跳转的,所以不能用编写静态变量的方法修复,web项目中的全局过滤器也无法拦截。需要在web服务器层面配置才能修复。下面给出几种常见服务器的参考修复方法,其中如有错误或不妥的地方欢迎指正。
Apache:
方法一:
修改\conf\httpd.conf文件
修改ServerName为应用的域名,例如
ServerName www.domain.com:80
添加下列行 无奈人生安全网
UseCanonicalName On

重启Apache即可。
修复成功的话会看到,服务器端将会使用设定好的ServerName。
 

参数解释:

方法二:
修改\conf\httpd.conf文件
参考以下配置添加:
NameVirtualHost 192.168.0.16
192.168.0.16>
ServerName 192.168.0.16
Order Allow,Deny
Deny from all
   
192.168.0.16>
DocumentRoot "C:\www"
ServerName www.test.com
重启Apache即可。
作用:
拒绝直接通过192.168.0.16这个IP的任何访问请求,这时如果你用192.168.0.16访问,会提示拒绝访问。仅允许通过www.test.com这个域名访问,主目录指向C:\www copyright 无奈人生

方法三:
修改\conf\httpd.conf文件
找到”#LoadModule rewrite_module modules/mod_rewrite.so”去除前面的”#”号
添加类似以下配置:
RewriteEngine on
RewriteCond %{HTTP_HOST} !^192.168.0.16$ [NC]
RewriteRule ^(.*)$ /error.html
重启Apache即可。
作用:
当HOST头不是192.168.0.16时,重定向到错误页面。

Nginx:
方法一:
修改nginx.conf
添加一个默认server,当host头被修改匹配不到server时会跳到该默认server,该默认server直接返回403错误。
例子如下:
server {
       listen 8888 default;
       server_name _;
       location / { 本文来自无奈人生安全网
            return 403;
       }
       }
重启nginx即可。
方法二:
修改nginx.conf
在目标server添加检测规则,参考以下标红配置:
  
server {
       server_name  192.168.0.171;
       listen       8888;
        if ($http_Host !~*^192.168.0.171:8888$)
        {
        return 403;
        }
       include /etc/nginx/default.d/*.conf;
       location / {
       root /www/dvwa;
       index index.php index.html index.htm;
       } www.wnhack.com
       }
重启nginx即可。

Tomcat:
修改tomcat\conf\server.xml
找到如下位置:

将Host里的name修改为静态的域名,如下:

本文来自无奈人生安全网

[1] [2]  下一页 copyright 无奈人生

。 (责任编辑:admin)
【声明】:无奈人生安全网(http://www.wnhack.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱472701013@qq.com,我们会在最短的时间内进行处理。