Nginx 解析漏洞



該漏洞與Nginx、php版本無關,屬於用戶配置不當造成的解析漏洞。

漏洞復現

訪問http://172.17.0.1/uploadfiles/nginx.png回顯如下

增加/.php后綴,被解析成PHP文件:

測試上傳功能:
正常上傳一張圖片馬,服務器給我們返回上傳路徑。上傳成功后訪問圖片,並加上/.php后綴。將.gif文件解析成php文件回顯phpinfo。

漏洞成因

前面說了該漏洞與Nginx、php版本無關,屬於用戶配置不當造成的解析漏洞。那么我們看一下配置不當的地方。

這是一段nginx配置,將.php結尾的文件都會交給fastcgi來執行,/uploadfiles/nginx.png/a.php也會交給fastcgi解析,fastcgi在解析".php"文件時發現文件並不存在,這時php.ini配置文件中的cig.fix_pathinfo就發揮作用了,ccgi.fix_pathinfo是默認開啟的,當php遇到文件路徑/aaa.xxx/bbb.yyy/ccc.zzz時,若/aaa.xxx/bbb.yyy/ccc.zzz不存在,則會去掉最后的/ccc.zzz,然后判斷/aaa.xxx/bbb.yyy是否存在,若存在,則把/aaa.xxx/bbb.yyy當做文件/aaa.xxx/bbb.yyy/ccc.zzz解析,若/aaa.xxx/bbb.yyy仍不存在,則繼續去掉/bbb.yyy,以此類推。那么fastcgi到底能解析哪些文件呢,這個由php-fpm.conf中的security.limit_extensions參數決定的,下面是php手冊中對security.limit_extensions的解釋

security.limit_extensions string
限制 FPM 允許解析的腳本擴展名。 此設置可以預防 web 服務器配置的錯誤。
應當限制 FPM 僅僅解析 .php 擴展名,阻止惡意用戶使用其他擴展名運行 php 代碼。 默認值: .php .phar

應當注意的是當此項設置為空的時候表示允許fastcgi將’.png’等文件當做代碼解析,恰好這個漏洞環境就是security.limit_extensions為空。成功將nginx.png當成了php執行

修復方案

1、如果cig.fix_pathinfo可以關閉的話就關閉,關閉該選項很可能會導致一些其他錯誤,所以一般是開啟的
2、將security.limit_extensions選項只填寫.php,阻止惡意用戶使用其他擴展名運行 php 代碼,下面是我們修改了配置重啟之后的再惡意執行的情況,Access denied.。

參考鏈接

https://zgao.top/nginx錯誤配置引發的解析漏洞復現/
https://xz.aliyun.com/t/6801
https://www.php.net/manual/zh/install.fpm.configuration.php


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM