1. 程式人生 > >nginx解析漏洞復現

nginx解析漏洞復現

nginx解析漏洞復現

一、漏洞描述

該漏洞與nginx、php版本無關,屬於使用者配置不當造成的解析漏洞

二、漏洞原理

1、 由於nginx.conf的如下配置導致nginx把以’.php’結尾的檔案交給fastcgi處理,為此可以構造http://ip/uploadfiles/test.png/.php (url結尾不一定是‘.php’,任何伺服器端不存在的php檔案均可,比如’a.php’),其中test.png是我們上傳的包含PHP程式碼的照片檔案。

  

2、但是fastcgi在處理’.php’檔案時發現檔案並不存在,這時php.ini配置檔案中cgi.fix_pathinfo=1 發揮作用,這項配置用於修復路徑,如果當前路徑不存在則採用上層路徑。為此這裡交由fastcgi處理的檔案就變成了’/test.png’。

3、 最重要的一點是php-fpm.conf中的security.limit_extensions配置項限制了fastcgi解析檔案的型別(即指定什麼型別的檔案當做程式碼解析),此項設定為空的時候才允許fastcgi將’.png’等檔案當做程式碼解析。

  

注:限制fpm允許解析的指令碼副檔名。此設定可以預防web伺服器配置的錯誤。應當限制fpm僅僅解析.php副檔名,阻止惡意使用者使用其他副檔名執行php程式碼。預設值:.php

三、漏洞環境搭建和復現

1、 使用docker搭建漏洞環境

2、 執行如下命令,執行環境

docker-compose up -d

3、 瀏覽器訪問http://172.17.0.1/

  

4、上傳一個圖片,burp抓包,修改資料包,在末尾新增<?php phpinfo();?>

  

5、瀏覽器訪問http://172.17.0.1/uploadfiles/3626850d481efd38a8ae8164011f41b2.jpg/a.php

下圖看到成功執行了php程式碼,說明存在解析漏洞

  

6、修改php-fpm.conf的配置檔案

  

7、重啟服務

docker-compose restart

  

8、瀏覽器再次訪問http://172.17.0.1/uploadfiles/b5f7a062d84869fe4f3af35b79fca50c.jpg/x.php,發現被拒絕,說明漏洞被修復

  

四、漏洞防禦

1、 將php.ini檔案中的cgi.fix_pathinfo的值設定為0,這樣php再解析1.php/1.jpg這樣的目錄時,只要1.jpg不存在就會顯示404頁面

2、 php-fpm.conf中的security.limit_extensions後面的值設定為