Nginx文件解析漏洞复现

本文介绍了Nginx文件解析漏洞的原理、复现过程及其对系统安全的影响。该漏洞源于不当配置,使得非.php文件可能被误解析为PHP。通过设置cgi.fix_pathinfo为0和限制security.limit_extensions,可以有效防止此类漏洞。复现环境使用了Vulhub的Docker测试,展示了上传图片木马并利用/x.php进行解析的过程。修复措施包括修改php.ini和php-fpm.conf配置文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

 

Nginx文件解析漏洞复现

漏洞介绍

必要理解

复现过程

分析及防御

漏洞修复


Nginx文件解析漏洞复现

漏洞介绍

该漏洞与Nginx、php版本无关,属于用户配置不当造成的解析漏洞

必要理解

cgi.fix_pathinfo

该选项位于配置文件php.ini中,默认值为1,表示开启。当php遇到文件路径/test.png/x.php时,若/test.png/x.php不存在,则会去掉最后的/x.php,然后判断/test.png是否存在,若存在,则把/test.png当做文件/test.png/x.php解析,如若test.png还不存在如果在其前面还有后缀,继续前面的步骤,以此类推。若是关闭该选项,访问/test.jpg/x.php 只会返回找不到文件。

security.limit_extensions

在我的配置文件中,它位于/etc/php-fpm.d/www.conf中

这个选项开始是被注释了的也就是默认只允许执行php文件,可以在后面添加其它后缀,比如

security.limit_extensions .jpg .php

像这样添加.jpg之后,.jpg文件也能以php格式来执行

修改了后需要service php-fpm restart重启php

复现过程

复现环境:借助vulhub的docker测试环境

直接进入到路径

nginx/nginx_parsing_vulnerability

运行

docker-compose up -d

启动之后查看配置,直接测试访问

上传图片木马成功之后,返回图片地址

成功访问

增加/x.php,可以发现图片就被解析成PHP文件

分析及防御

由于nginx做了如上配置,如果碰到.php后缀的就交给fastcgi来解析,因此我们可构造/test.jpg/.php(此处的.php必须是服务器端目录下不存在的如x.php等),这里的test.jpg就是我们上传的图片木马

当fastcgi处理x.php时,发现文件不存在,这里php.ini配置文件中的cgi.fix_pathinfo=1就发挥了作用,如果当前路径不存在,就返回上层路径即test.jpg,此时fastcig就将test.jpg格式文件当php来解析了

但是,在php-fpm.conf配置文件中的security.limit_extensions配置项限制了fastcgi要解析的文件类型(如果该选项未开启,默认只解析.php)

查看配置文件发现这里未限制fastcgi要解析的格式,故造成nginx因错误配置不当发现解析漏洞

修改配置文件

此时再去添加/x.php访问我们上传的图片木马时,提示access denied 该漏洞修复。

漏洞修复

  1. 在php版本比较低时,将php.ini文件中的cgi.fix_pathinfp的值设置为0,即关闭cgi解析

  2. php-fpm.conf中的 security.limit_extensions =.php,即仅支持.php后缀解析


参考:

https://vulhub.org/#/environments/weblogic/CVE-2018-2894/

https://xz.aliyun.com/t/6801

https://www.cnblogs.com/yuzly/p/11208742.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

beglage

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值