phpstudy nginx解析漏洞复现
  • 2020-09-04


前言

我有一台100块买来的小型迷你服务器,上面部署了我一些服务源码,并通过ngrok内网转公网服务器。

用的是phpstudy部署的,昨天看到那篇文章了,就用我的服务器测试了一下。


漏洞复现

5f51934db69dc.png

新建一个内容为<?php phpinfo();?>的记事本,重命名保存为1.jpg

5f51936968a60.png

直接访问内网地址

5f51941623372.png

然后加入/.php  5f51939788e97.png

成功执行phpinfo();


漏洞分析

这是我的生产环境,根据漏洞特性,大概率就是fastcgi的问题。

查看该站点相关的nginx的配置文件

5f51951b18de6.png

可见 这里的正则处理,将文件传递给fastcgi处理,$fastcgi_script_name会被设置为1.png/.php,然后构造成SCRIPT_FILENAME传递给PHP CGI。如果PHP中开启了fix_pathinfo这个选项,PHP会认为SCRIPT_FILENAME是1.png,而.php是PATH_INFO,所以就会将1.jpg作为PHP文件来解析了。

处于好奇心去观察一下php的配置

5f5195aba6389.png

可见这里是注释了。我就非常奇怪,既然是注释了为什么还能让这个配置生效为1,不得已思考是否他的默认配置就是为1。


后记

查阅资料后可知,他的默认值就是1,无论是否添加了注释。

5f51988cb96b6.png

https://www.php.net/manual/zh/ini.core.php#ini.cgi.fix-pathinfo

修复方式是强制设置为0。并且需要对nginx的location规则进行设置。加一个判断是否以此类路径进行访问。如果是就返回403

      if ( $fastcgi_script_name ~ \..*\/.*php ){
              return 403;      
        }

5f5197449d355.png