漏洞介绍

早上看到大佬发了phpstudy_pro 8.1.0.7的Nginx解析漏洞,小弟也是抓紧时间复现了一波,漏洞产生原因就是Nginx+php的配置问题产生的,和Nginx的版本无关,并不是Nginx本身的漏洞。

漏洞复习

搭建环境

phpstudy_pro:8.1.0.7
php:7.3.4
Nginx:1.15.11

打开phpstudy_pro,切换到Nginx并启动,数据库可以不需要启动,用不到。

shell上传

由于是本地测试,我们直接进网站目录写shell,准备一个php文件和一个jpg文件,使用copy命令制作图片马。
copy /B 1.jpg+index.php index.jpg

确定合并成功

访问文件

访问http://127.0.0.1/index.jpg文件,正常显示说明上传成功。

漏洞利用

在jpg后面加上/1.php,就能成功解析成php文件。

产生原因

Nginx遇到/index.jpg/1.php,由于是.php后缀文件,不做任何处理就交给php处理。
php中有个配置:cgi.fix_pathinfo,该配置项默认为1开启。如果开启,php会”修复”路径,如果后面文件不存在就直接丢弃,继续从前面解析,直到遇到存在的文件或返回404。

因为cgi.fix_pathinfo开启,所以会丢弃1.php,继续解析index.jpg,index.jpg存在,php不管你是啥都用php解析,最终造成漏洞。

漏洞修复

官方已经更新了最新版,更新到phpstudy_pro 8.1.1.1即可。但是修复的好像有点牵强,如果访问不存在的php文件,直接返回403而不是404

参考文章

https://blog.csdn.net/wn314/article/details/77388289/
https://mp.weixin.qq.com/s/L6pu5T0usFwlLhauIhfdWw