下面是綠盟安全掃描報告:
我用的是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頭部攻擊回放。
設置火狐的代理端口,代理服務器就是burp suite。
設置完成后,打開火狐瀏覽器訪問應用頁面。
http://192.168.1.32 ,訪問后,burp suite抓到數據包。
在http history 中找到訪問的網址(被我誤刪除了,只能截原始圖了),右鍵 send to repeator,連續發送兩次,一次模擬正常的,一次模擬攻擊。
在repeator中
2 這個時原始的,沒有修改過host.
點擊 go,右側 response 可以返回正常的頁面。
4 模擬攻擊
把 host 改為 www.baidu.com,點擊go,執行結果顯示了403頁面。