安全:检测到目标URL存在http host头攻击漏洞(nginx+攻击模拟)

下面是绿盟安全扫描报告:

image

我用的是nginx服务器,代理后面的tomcat,对外只有80和443端口开放。

解决办法:

server {
        listen 443 ssl http2;
        server_name 192.168.1.32;
        if ($http_Host !~* ^192.168.1.32$)
        {
            return 403;
        }        
        ssl_certificate d:/app/nginx/ssl/server.crt;
        ssl_certificate_key d:/app/nginx/ssl/server.unsecure;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers HIGH:!aNULL:!MD5;    
        location / {
            #代理一个tomcat应用,也可以和upstream的名字一样
            proxy_pass http://jsjnks;   
            #以下是一些反向代理的配置可删除
            proxy_redirect             off; 
            #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
            proxy_set_header           Host $host; 
            proxy_set_header           X-Real-IP $remote_addr; 
            proxy_set_header           X-Forwarded-For $proxy_add_x_forwarded_for; 
            proxy_set_header X-Forwarded-Proto $scheme;
            client_max_body_size       10m; #允许客户端请求的最大单文件字节数
            client_body_buffer_size    128k; #缓冲区代理缓冲用户端请求的最大字节数
            proxy_connect_timeout      300; #nginx跟后端服务器连接超时时间(代理连接超时)
            proxy_send_timeout         300; #后端服务器数据回传时间(代理发送超时)
            proxy_read_timeout         300; #连接成功后,后端服务器响应时间(代理接收超时)
            proxy_buffer_size          4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
            proxy_buffers              4 32k; #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
            proxy_busy_buffers_size    64k; #高负荷下缓冲大小(proxy_buffers*2)
            proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传
            proxy_redirect  off; 
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
        }        
        
        #静态资源访问
        location  ~ .*.(jpg|jpeg|gif|png|ico|css|js|pdf|txt|ttf|eot|otf|woff)?$ {
            add_header Access-Control-Allow-Origin *;
        }    
        
         location /public {
             alias  "D:/app/nginx/html/public";
         }   
         location /jsjnks-static {
             alias  "D:/app/nginx/html/jsjnks-static";
         }          
            
        server_tokens off;

        #access_log /var/log/nginx/www.hao.com.access.log;
        #error_log /var/log/nginx/www.hao.com.error.log;
    }

红色部分是核心,发现只要不是指定host,就一律返回403.

用burp suite测试,测试时改成了http测试,不是https,但是不影响host头部攻击回放。

image

设置火狐的代理端口,代理服务器就是burp suite。

image

image

设置完成后,打开火狐浏览器访问应用页面。

http://192.168.1.32 ,访问后,burp suite抓到数据包。

image

在http history 中找到访问的网址(被我误删除了,只能截原始图了),右键 send to repeator,连续发送两次,一次模拟正常的,一次模拟攻击。

在repeator中

2 这个时原始的,没有修改过host.

点击 go,右侧 response 可以返回正常的页面。

image

4 模拟攻击

把 host 改为 www.baidu.com,点击go,执行结果显示了403页面。

image

原文地址:https://www.cnblogs.com/huiy/p/13433643.html