漏洞描述
影響版本:phpstudy <= 8.1.0.7
phpstudy 存在 nginx 解析漏洞,攻擊者能夠利用上傳功能,將包含惡意代碼的合法文件類型上傳至服務器,從而造成任意代碼執行的影響。
環境搭建
下載phpstudy v8.1.0.7,安裝完成后如下:

漏洞復現
正常訪問圖片:
http://192.168.3.142:8088/123.gif

增加后綴訪問如下:
成功解析php文件
http://192.168.3.142:8088/123.gif/xxx.php

漏洞分析
該漏洞屬於安全配置錯誤漏洞。
漏洞產生的原因為:
1、由於配置錯誤,導致 nginx 把以 .php 結尾的文件交給 fastcgi 處理,因此可以構造 http://192.168.3.142:8088/123.gif/xxx.php(任何服務器端不存在的php文件均可,比如X.php)
2、但是 fastcgi 在處理 xxx.php 文件時發現文件並不存在,這時 php.ini 配置文件中 cgi.fix_pathinfo=1 發揮作用,這項配置用於修復路徑,如果當前路徑不存在則采用上層路徑。因此這里交由 fastcgi 處理的文件就變成了 /123.gif.
3、最重要的一點是 php-fpm.conf 中的 security.limit_extensions 配置項限制了 fastcgi 解析文件的類型(即指定什么類型的文件當做代碼解析),此項設置為空的時候才允許 fastcgi 將 .png 等文件當做代碼解析.