深入解读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 该漏洞修复。
漏洞修复
- 在php版本比较低时,将php.ini文件中的cgi.fix_pathinfp的值设置为0,即关闭cgi解析
- php-fpm.conf中的 security.limit_extensions =.php,即仅支持.php后缀解析
参考:
Vulhub - Docker-Compose file for vulnerability environment
xz.aliyun.com/t/6801
nginx解析漏洞复现 - 雨中落叶 - 博客园
推荐阅读
-
【2022新手指南】Java编程进阶之路 - 六、技术架构篇 ### MySQL索引底层解析与优化实战 - 你会讲解MySQL索引的数据结构吗?性能调优技巧知多少? - Redis深度揭秘:你知道多少?从基础到哨兵、主从复制全梳理 - Redis持久化及哨兵模式详解,还有集群搭建和Leader选举黑箱打开 - Zookeeper是个啥?特性和应用场景大公开 - ZooKeeper集群搭建攻略及 Leader选举、读写一致性、共享锁实现细节 - 探究ZooKeeper中的Leader选举机制及其在分布式环境中的作用 - Zab协议深入剖析:原理、功能与在Zookeeper中的核心地位 - RabbitMQ全方位解读:工作模式、消费限流、可靠投递与配置策略 - 设计者视角:RabbitMQ过期时间、死信队列与延时队列实践指南 - RocketMQ特性和应用场景揭示:理解其精髓与差异化优势 - Kafka详细介绍:特性及广泛应用于实时数据处理的场景解析 - ElasticSearch实力揭秘:特性概述与作为搜索引擎的广泛应用 - MongoDB认知升级:非关系型数据库的优势阐述,安装与使用实战教学 - BIO/NIO/AIO网络模型对比:掌握它们的区别与在网络编程中的实际应用 - Netty带你飞:理解其超快速度背后的秘密,包括线程模型分析 - 网络通信黑科技:Netty编解码原理与常用编解码器的应用,Protostuff实战演示 - 解密Netty粘包与拆包现象,怎样有效应对这一常见问题 - 自定义Netty心跳检测机制,轻松调整检测间隔时间的艺术 - Dubbo轻骑兵介绍:核心特性概览,服务降级实战与其实现益处 - Dubbo三大神器解读:本地存根与本地伪装的实战运用与优势呈现 ----------------------- 七、结语与回顾
-
重现 Nginx 的解析漏洞细节
-
如何彻底解决Nginx文件类型解析漏洞:当cgi.fix_pathinfo设置为1时的解决方案指南
-
第五期:全面梳理 nginx 网站服务器与中间件的漏洞系列——深入解析漏洞集锦(二)
-
深入解读Nginx文件解析漏洞的细节
-
深入解析:Nginx中间件的漏洞探讨
-
检测与修复:针对Apache和Nginx的网站渗透测试中发现的上传文件解析漏洞
-
深入解读CVE-2017-7529:Nginx中的整数溢出漏洞详析
-
深入解析 NGINX 的0day LDAP远程代码执行漏洞全貌
-
深入解读CVE-2017-7529:Nginx中的整数溢出漏洞探讨