nginx?host繞過的三種方式
實驗環(huán)境
- CentOS7
- Nginx1.23.3
- MySQL8.0.32
- PHP5.4.16
實驗背景
在一個LNMP架構(gòu)下的注冊頁面中存在sql注入漏洞,通過抓包修改host進行注入,但由于修改了host,nginx無法正確處理此請求,以默認服務器處理,返回404,注入失敗。
繞過方式1
由于Nginx在處理Host的時候,會將Host用冒號分割成hostname和port,port部分被丟棄。所以,我們可以設置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)修復了該漏洞,一旦識別到兩個Host,就會返回400錯誤(Bad Request)
如果遇到較低版本的nginx還是可以嘗試一下的
繞過方法3
這個方法相對更高級,需要nginx支持SNI,網(wǎng)站也必須配置HTTPS。
SNI是用來解決一個服務器擁有多個域名的問題,在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做靜態(tài)文件服務器,如何進行權(quán)限驗證
這篇文章主要介紹了使用Nginx做靜態(tài)文件服務器,如何進行權(quán)限驗證問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-06-06