nginx?host繞過的三種方式
實驗環(huán)境
- CentOS7
- Nginx1.23.3
- MySQL8.0.32
- PHP5.4.16
實驗背景
在一個LNMP架構(gòu)下的注冊頁面中存在sql注入漏洞,通過抓包修改host進行注入,但由于修改了host,nginx無法正確處理此請求,以默認服務(wù)器處理,返回404,注入失敗。

繞過方式1
由于Nginx在處理Host的時候,會將Host用冒號分割成hostname和port,port部分被丟棄。所以,我們可以設(shè)置Host的值為2023.mmrrj.com:aaa'"2023.mmrrj.com,這樣就能訪問到目標Server塊。

可以看到已經(jīng)觸發(fā)了注入報錯
繞過方式2(高版本失效)
Nginx與PHP-FPM對Host的處理不同,當我們傳入兩個Host頭的時候,Nginx將以第一個為準,而PHP-FPM將以第二個為準。
也就是說,如果我傳入:
Host: 2023.mmrrj.com Host: aaa'"@2023.mmrrj.com
Nginx將認為Host為2023.mmrrj.com,并交給目標Server塊處理;但PHP中使用$_SERVER['HTTP_HOST']取到的值卻是aaa'"@mmrrj.com。這樣也可以繞過。
但很遺憾,在高版本的Nginx中已經(jīng)修復(fù)了該漏洞,一旦識別到兩個Host,就會返回400錯誤(Bad Request)

如果遇到較低版本的nginx還是可以嘗試一下的
繞過方法3
這個方法相對更高級,需要nginx支持SNI,網(wǎng)站也必須配置HTTPS。
SNI是用來解決一個服務(wù)器擁有多個域名的問題,在HTTPS握手時提供Host,而無需請求頭中的Host。
直接發(fā)送必然是404錯誤。

點擊右上角的鉛筆圖標,勾選“Use HTTPS”

確定后再次發(fā)送請求

sql注入報錯就又出現(xiàn)了,說明繞過成功。
到此這篇關(guān)于nginx host繞過的三種方式的文章就介紹到這了,更多相關(guān)nginx host繞過內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
在nginx中實現(xiàn)單位時間內(nèi)限制訪問頻率的教程
這篇文章主要介紹了在nginx中實現(xiàn)單位時間內(nèi)限制訪問頻率的教程,并非針對IP而是全局的訪問量限制,需要的朋友可以參考下2015-04-04

