nginx檔案型別錯誤解析漏洞

2021-06-06 08:54:33 字數 1282 閱讀 8489

問題簡介:

nginx是一款高效能的web伺服器,使用非常廣泛,其不僅經常被用作反向**,也可以非常好的支援php的執行。nginx預設以cgi的方式支援php的執行,而為了較好的支援path_info的提取,在php的配置選項裡存在cgi.fix_pathinfo選項,其目的是為了從script_filename裡取出真正的指令碼名,而攻擊者則利用這點可以將任何型別的檔案以php的方式進行解析。

影響版本:0.5.*, 0.6.*, 0.7 <= 0.7.65, 0.8 <= 0.8.37  ,目前我們版本在1.1以上。

舉例說明:

假設test.king.com是乙個論壇,可以上傳操作(後台有bug並沒有對進行判斷處理),使用者已經上傳一張包含php指令碼的abc.jpg

現將test.king.com修定本地

瀏覽器訪問test.king.com/abc.jpg,此時會顯示無法瀏覽此

現訪問test.king.com/abc.jpg/c.php 或者test.king.com/abc.jpg%00.php 則會將abc.jpg當做指令碼檔案直接執行,會顯示出abc.jpg裡的指令碼**phpinfo()資訊

(以上只限測試,如有人想嘗試,可在虛擬機器上執行)

原理:nginx在接受請求後會得到乙個位址url/abc.jpg/c.php

在經過location指令,將請求交給fastcgi處理,nginx為其設定環境變數script_filename,內容為/abc.jpg/c.php

後端的fastcgi在接受到該選項時,會根據php的fix_pathinfo配置決定是否對script_filename進行額外的處理,一般情況下如果不對fix_pathinfo進行設定將影響使用path_info進行路由選擇的應用,

所以該選項一般配置開啟。php通過該選項之後將查詢其中真正的指令碼檔案名字,查詢的方式也是檢視檔案是否存在,這個時候將分離script_filename和path_info分別為/scripts/abc.jpg和c.php

最後,以/scripts/abc.jpg作為此次請求需要執行的指令碼,攻擊者就可以實現讓nginx以php來解析任何型別的檔案了。

解決:關閉php.ini裡的cgi.fix_pathinfo為0

或者if ( $fastcgi_script_name ~ ..*/.*php )

前兩個可能會導致一些偽靜態網頁或者特殊的路徑無法顯示

宴哥提供了乙個方法可寫在fcgi.conf檔案中,便於多個虛擬主機引用

if ($request_filename ~* (.*).php)

if (!-e $php_url.php)

nginx檔案型別錯誤解析漏洞

80sec發現的大漏洞 之前聽阿里巴巴的同學也說到過 說明這個漏洞地下知道的人已經很多了 只是今天公開了。現在來看看漏洞描述 漏洞介紹 nginx是一款高效能的web伺服器,使用非常廣泛,其不僅經常被用作反向 也可以非常好的支援php的執行。80sec發現其中存在乙個較為嚴重的安全問題,預設情況下可...

nginx檔案型別錯誤解析漏洞

漏洞介紹 nginx是一款高效能的web伺服器,使用非常廣泛,其不僅經常被用作反向 也可以非常好的支援php的執行。80sec發現其中 存在乙個較為嚴重的安全問題,預設情況下可能導致伺服器錯誤的將任何型別的檔案以php的方式進行解析,這將導致嚴重的安全問題,使得惡意的攻擊者可能攻 陷支援php的ng...

nginx檔案型別錯誤解析漏洞

洞介紹 nginx是一款高效能的web伺服器,使用非常廣泛,其不僅經常被用作反向 也可以非常好的支援php的執行。80sec發現其中存在乙個較為嚴重的安全問題,預設情況下可能導致伺服器錯誤的將任何型別的檔案以php的方式進行解析,這將導致嚴重的安全問題,使得惡意的攻擊者可能攻陷支援php的nginx...