社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  NGINX

phpStudy默认配置致Nginx解析漏洞复现

TimelineSec • 4 年前 • 489 次点击  


上方蓝色字体关注我们,一起学安全!
作者:小泫@Timeline Sec新成员
本文字数:731
阅读时长:2~3min
声明:请勿用作违法用途,否则后果自负


0x01 简介

phpStudy是一个PHP调试环境的程序集成包。该程序包集成最新的Apache+PHP+MySQL+phpMyAdmin+ZendOptimizer,一次性安装,无须配置即可使用,是非常方便、好用的PHP调试环境。

0x02 漏洞概述

此次漏洞是Nginx的解析漏洞,由于phpstudy中配置文件的不当,造成了/xx.php解析漏洞,故此将文件解析为php运行。


0x03 影响版本



phpStudy <=8.1.0.7 for Windows

0x04 环境搭建

回复“Nginx解析漏洞环境”,获取漏洞版本安装包及安装教程


注意⚠️:phpstudy会一直提示更新才可以用,所以不要点击更新,直接启动服务就行了,安装教程里有操作方法的视频



将图片马ip.png放置在web根目录下



0x05 漏洞复现


访问图片



加/.php解析为php文件



0x06 漏洞分析


首先打开 Nginx.conf 文件查看


在 vhosts 文件夹下 localhost_80.conf

  location ~ \.php(.*)$ {            fastcgi_pass   127.0.0.1:9000;            fastcgi_index  index.php;            fastcgi_split_path_info  ^((?U).+\.php)(/?.+)$;            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;            fastcgi_param  PATH_INFO  $fastcgi_path_info;            fastcgi_param  PATH_TRANSLATED  $document_root$fastcgi_path_info;            include        fastcgi_params;        }

由于如下的配置文件会导致 .php.* 文件交给fastcgi


当url为如下

http://127.0.0.1/tp/test/ip.png/a.php


$fastcgi_script_name会被设置为ip.png/a.php ,然后构造成SCRIPT_FILENAME传递给PHP CGI


如果PHP中开启了fix_pathinfo这个选项,PHP会认为SCRIPT_FILENAME是ip.png,而a.php是PATH_INFO,所以就会将ip.jpg作为PHP文件来解析了


默认phpinfo中我们可以看到,默认是开启的



0x07 修复方式


php.ini 中 fix_pathinfo 禁用为0

cgi.fix_pathinfo=0

Nginx.conf添加如下代码
    location ~ \.php(.*)$ {      if ( $fastcgi_script_name ~ \..*\/.*php ){        return 403;      }                fastcgi_pass   127.0.0.1:9000;            fastcgi_index  index.php;            fastcgi_split_path_info  ^((?U).+\.php)(/?.+)$;            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;            fastcgi_param  PATH_INFO  $fastcgi_path_info;            fastcgi_param  PATH_TRANSLATED  $document_root$fastcgi_path_info;            include        fastcgi_params;        }

参考链接:

https://www.cnblogs.com/fogwang/p/5576518.html

https://www.laruence.com/2010/05/20/1495.html



阅读原文看更多复现文章
Timeline Sec 团队
安全路上,与你并肩前行









Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/73208
 
489 次点击