Nginx 解析漏洞复现
该漏洞与php
和nginx
版本无关,是配置错误导致的问题
漏洞描述
通常在nginx.conf
的配置文件或者include
包含的其他配置文件下有以下信息
location ~ \.php$ {
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param REDIRECT_STATUS 200;
fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT /var/www/html;
fastcgi_pass php:9000;
}
- 上述代码的可以简理解为:
Nginx
解析到.php
的后缀名就会交给fastcgi
处理,fastcgi
可以简单的理解为python
解释器一样的东西,负责php
代码的执行渲染
但是现在还不会导致Nginx
解析的漏洞,需要配合另外一个配置文件php.ini
构成Nginx
解析漏洞 - 在
Nginx
解析到后缀名为.php
会交给php
处理,php
在处理文件的时候会受到php.ini
配置文件的影响,在php.ini
配置文件中含有一个默认配置cgi.fix_pathinfo=1
,该配置项的作用是如果访问的.php
文件不存在,则采用上层路径,例如访问/test.png/.php
,一般情况下.php
文件是不存在的就会将/test.png
解析 - 最重要的配置就是
php-fpm
的配置文件中的security.limit_extensions
配置项默认为空,该文件规定了什么后缀名当做php
代码执行
所以通过这一连贯的默认配置,我们可以访问一个/test.png
的文件,后方加入/.php
或者是任意不存在的a.php
,就会由于Nginx
解析漏洞导致php
代码执行
漏洞利用
使用vulhub
复现靶机
cd /vulhub/nginx/nginx_parsing_vulnerability
sudo docker-compose up -d
随便上传一个含有php代码
的图片
访问该图片成功上传
在最后加入/.php
或者任意一个不存在的文件名例如:/a.php
成功利用
漏洞修复
修改php-fpm
配置文件项security.limit_extensions
加入只有.php
后缀名解析为php代码执行
[www]
security.limit_extensions = .php
重启服务器再次漏洞利用失败
sudo docker-compose restart
实验结束。
分类:
漏洞复现
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· 单线程的Redis速度为什么快?
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
2023-04-07 THM-红队-Windows本地持久性
2022-04-07 文件上传靶场 upload-labs Pass 5-10