检测到目标URL存在HTTP host头攻击漏洞
漏洞描述
为了方便获取网站域名,开发人员一般依赖于请求包中的Host首部字段。例如,在php里用_SERVER[“HTTP_HOST”]。但是这个Host字段值是不可信赖的(可通过HTTP代理工具篡改),如果应用程序没有对Host字段值进行处理,就有可能造成恶意代码的传入。
- 安全:检测到目标URL存在http host头攻击漏洞(nginx+攻击模拟)
下面是绿盟安全扫描报告
下面给出几种常见服务器的参考修复方法,其中如有错误或不妥的地方欢迎指正。
Nginx 环境
解决办法:发现只要不是指定host,就一律返回403。如以下图1不行,再试试图2。
# nginx.conf
# 添加一个默认server,当host头被修改匹配不到server时会跳到该默认server,该默认server直接返回403错误。
server {
listen 443 ssl http2;
server_name _;
location / {
return 403;
}
# nginx.conf
# 在目标server添加检测规则,参考以下配置:
server {
listen 443 ssl http2;
server_name 192.168.1.32;
if ($http_Host !~* ^192.168.1.32$)
{
return 403;
}
抓包验证
用burp suite测试,修改请求数据包中的HOST,这个是原始的,没有修改过host.
把 host 改为 www.baidu.com,点击go,执行结果显示了403页面
Tomcat环境
打开tomcat/conf/server.xml文件,Host name默认值为localhost,修改属性 name值为主机域名,
<Host name="www.xxx.com" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<Context path="/" reloadable="true" docBase="E:\Web\test1\WebRoot" />
<Alias>196.168.100.101</Alias>
<Alias>196.168.100.102</Alias>
</Host>
在Tomcat配置多域名,目的是和apache相对应,实现多域名访问。 使用 < Alias></ Alias>,务必注意,使用的是首字母大写。
正确配置如下:
在默认的host下添加一个同级的host。
Apache环境
方法一
修改\conf\httpd.conf文件,重启Apache即可。
ServerName www.test.com:80
# 添加下列行
UseCanonicalName On
# 重启Apache即可。修复成功的话会看到,服务器端将会使用设定好的ServerName。
方法二
修改\conf\httpd.conf文件,重启Apache即可。
NameVirtualHost 192.168.0.16
<VirtualHost 192.168.0.16>
ServerName 192.168.0.16
<Location />
Order Allow,Deny
Deny from all
</Location>
</VirtualHost>
<VirtualHost 192.168.0.16>
DocumentRoot "C:\www"
ServerName www.test.com
</VirtualHost>
# 作用:拒绝直接通过192.168.0.16这个IP的任何访问请求,这时如果你用192.168.0.16访问,会提示拒绝访问。仅允许通过www.test.com这个域名访问,主目录指向C:\www
方法三:
修改\conf\httpd.conf文件,重启Apache即可。
找到 "#LoadModule rewrite_module modules/mod_rewrite.so" 去除前面的"#"号
添加类似以下配置
RewriteEngine on
RewriteCond %{HTTP_HOST} !^192.168.0.16$ [NC]
RewriteRule ^(.*)$ /error.html
作用:当HOST头不是192.168.0.16时,重定向到错误页面。