0x00 實驗環境
攻擊機:Win 10
靶場:docker拉的vulhub靶場
0x01 影響版本
一些配置錯誤的情況,與nginx版本無關。
0x02 漏洞復現
(1)CRLF注入(回車換行),反射型XSS沒成功,看了下面這兩篇文章也沒成功,不知道是不是因為我姿勢不對:
https://www.leavesongs.com/PENETRATION/Sina-CRLF-Injection.html
https://www.leavesongs.com/PENETRATION/bottle-crlf-cve-2016-9964.html
(2)目錄穿越漏洞
這個漏洞現實中碰到的還挺少的,一般就會出現在一些CTF的web題或者雜項題里:
(3)add_header被覆蓋
講一下這個:
HTTP協議的安全頭部有如下幾個:
- Strict-Transport-Security
- X-Frame-Options
- X-Content-Type-Options
- X-XSS-Protection
互聯網上的資源有各種類型,通常瀏覽器會根據響應頭的Content-Type字段來分辨它們的類型。例如:”text/html”代表html文檔,”image/png”是PNG圖片,”text/css”是CSS樣式文檔。然而,有些資源的Content-Type是錯的或者未定義,這時,某些瀏覽器會啟用MIME-sniffing來猜測該資源的類型,解析內容並執行。
從圖中可以看出,這個Content-Type是沒有設置的,但是輸入的url也沒有被成功解析,導致僅解析為了文本,網站通過 script 參考檢索到的響應中接收到 "nosniff" 指令,則 Internet Explorer 不會加載“script”文件,除非 MIME 類型匹配以下值之一:
-
"application/ecmascript"
-
"application/javascript"
-
"application/x-javascript"
-
"text/ecmascript"
-
"text/javascript"
-
"text/jscript"
-
"text/x-javascript"
-
"text/vbs"
-
"text/vbscript"
但是在IE7下就會顯示成一個HTML文件,因為IE7通過這個文檔的數據(HTML代碼)判定這是一個HTML文件。test1是做過防護的,test2是沒有做過防護的,這里應該是我瀏覽器的問題導致xss彈不出來。詳細可以查看文檔:https://www.ruanyifeng.com/blog/2016/09/csp.html
0x03 漏洞原理
(1)CRLF注入 :輸入的url與http響應體拼接
(2)目錄穿越漏洞
這個常見於Nginx做反向代理的情況,動態的部分被proxy_pass傳遞給后端端口,而靜態文件需要Nginx來處理。
假設靜態文件存儲在/home/目錄下,而該目錄在url中名字為files,那么就需要用alias設置目錄的別名,url上/files沒有加后綴/,而alias設置的/home/是有后綴/的,所以我們訪問/files../,就相當於訪問/home/../,因為/files等價於於/home/。這個就導致我們可以從/home/目錄穿越到他的上層目錄。
(3)add_header被覆蓋:
Nginx配置文件子塊(server、location、if)中的add_header
,將會覆蓋父塊中的add_header
添加的HTTP頭,造成一些安全隱患。
如下列代碼,整站(父塊中)添加了CSP頭。
0x04 修復建議
不要亂配置就可以了,一般不會出現這個問題。上面都有代碼了,應該是會修復了吧。
0x05 參考文獻
https://www.ruanyifeng.com/blog/2016/09/csp.html (阮一峰yyds)
https://www.leavesongs.com/PENETRATION/Sina-CRLF-Injection.html (這兩篇看了,大體明白了但還是沒復現成功,有時間再研究吧)
https://www.leavesongs.com/PENETRATION/bottle-crlf-cve-2016-9964.html
0x06 免責聲明
本漏洞復現文章僅用於學習、工作與興趣愛好,並立志為網絡安全奉獻一份力量,凡是利用本博客相關內容的無良hackers造成的安全事故均與本人無關!