Nginx 解析漏洞

文章目录

  • Nginx 解析漏洞
    • 1. 空字节漏洞
      • 1.1 漏洞描述
      • 1.2 漏洞复现
      • 1.3 修复方案
    • 2. Nginx 解析漏洞复现
      • 2.1 漏洞描述
      • 2.2 漏洞复现
      • 2.3 获取GetShell
      • 2.4 修复方案
    • 3. Nginx 文件名逻辑漏洞
      • 3.1 漏洞描述
      • 3.2 漏洞原理
      • 3.3 漏洞复现
        • 3.3.1 环境启动
        • 3.3.2 漏洞验证
      • 3.4 漏洞利用
      • 3.5 修复方案

Nginx 解析漏洞

1. 空字节漏洞

1.1 漏洞描述

说明内容
漏洞编号
漏洞名称Nginx解析漏洞
漏洞评级高危
影响范围0.5.,0.6., 0.7 <= 0.7.65, 0.8 <= 0.8.37
漏洞描述当使用PHP-FastCGI执行PHP时,遇到url里面存在%00空字节时与FastCGI的处理不一致,导致可在非PHP文件中嵌入PHP代码,通过访问url+%00.PHP来执行其中的PHP代码
修复方案升级组件

1.2 漏洞复现

启动环境

image-20230907201439490

访问页面

看到如下页面及启动成功

image-20230907201529915

在nginx_0.7.65目录下的html目录中有一个info.png

image-20230907202112278

从后缀名来看这个是一个图片,但是如果从文件内容的角度来看是一个phpinfo。

image-20230907202254207

这个图片是无法直接进行访问的。

image-20230907202443341

使用bp抓取数据包,然后在文件后缀名末尾添加%00.php

image-20230907202636913

该文件即可执行。

解析:此处这个漏洞属于00截断漏洞,文件系统在处理寻找文件的时候会有偏差,PHP语言的底层是通过C语言来实现的,C语言字符串结束是00。PHP解释引擎在访问这个文件的时候,遇到了00,认为该文件在%00处就结束了,所以读取的是png文件,但是是以php方式执行的

1.3 修复方案

为了修复此漏洞,可以考虑以下方案:

  • 更新 NGINX 版本: 确保您的 NGINX 版本已升级到最新版本。NGINX 团队通常会修复安全漏洞,并发布相关的更新补丁。及时更新可帮助解决已知的漏洞。
  • 安装安全模块: NGINX 支持许多第三方安全模块,例如 ModSecurity 或 NAXSI。这些模块可以帮助检测和阻止恶意请求,包括空字节注入攻击。
  • 过滤输入: 对于用户提供的输入,进行适当的输入验证和过滤。对于文件路径、文件名等参数,应该对空字节进行处理或过滤,以防止攻击者利用空字节绕过文件类型检查。

2. Nginx 解析漏洞复现

链接地址:Vulhub - 用于漏洞环境的 Docker-Compose 文件。

2.1 漏洞描述

说明内容
漏洞编号
漏洞名称Nginx解析漏洞
漏洞评级高危
影响范围Nginx 1.x 最新版,PHP 7.x最新版
漏洞描述该漏洞与Nginx、php版本无关,属于用户配置不当造成的解析漏洞。
修复方案升级组件

2.2 漏洞复现

环境启动

image-20230907205202688

访问页面

image-20230907205129296

上传一个php文件,页面显示我们只能上传图像文件。

image-20230907205219922

修改文件后缀名,Content-Type类型为image/png,最后在文件内容的头部添加GIF89a。

image-20230907205615598

上传成功,并且显示出了文件的上传路径。

页面访问上传路径,但是文件并没有执行。

image-20230907205851213

增加后缀,被解析成PHP文件:/.php

image-20230907205927963

漏洞原因:开启了cgi.fix_pathinfo选项后,本身是一个png文件,但是加上/.php后会把整个文件当中php文件来执行。

image-20230907210142373

2.3 获取GetShell

还可以上传一个一句话木马

image-20230907211141245

使用bp抓取数据包并进行修改

image-20230907211225679

然后使用蚁剑进行连接即可。

image-20230907211054301

2.4 修复方案

  • 将php.ini文件中的cgi.fix_pathinfo的值设为0

3. Nginx 文件名逻辑漏洞

链接地址:Vulhub - Docker-Compose file for vulnerability environment。

3.1 漏洞描述

说明内容
漏洞编号CVE-2013-4547
漏洞名称Nginx 文件名逻辑漏洞
漏洞评级高危
影响范围Nginx 0.8.41 ~ 1.4.3 / 1.5.0 ~ 1.5.7
漏洞描述该漏洞存在于Nginx于PHP的配置上,如果配置不当,容易使得Nginx实现对%00等特殊字符解析出现问题,造成Nginx将特殊构造的URL交给PHP来进行处理,而Nginx则因为特殊字符的问题,无法接收含有特殊字符的URL或者是造成了在%00位置处的截断,从而造成了客户上传的文件被当作PHP代码来解析。
修复方案升级组件

3.2 漏洞原理

主要原因是错误地解析了请求的URI,错误地获取到用户请求的文件名,导致出现权限绕过、代码执行的连带影响。

比如,Nginx匹配到.php结尾的请求,就发送给fastcgi进行解析,常见的写法如下:

location ~ \.php$ {include        fastcgi_params;fastcgi_pass   127.0.0.1:9000;fastcgi_index  index.php;fastcgi_param  SCRIPT_FILENAME  /var/www/html$fastcgi_script_name;fastcgi_param  DOCUMENT_ROOT /var/www/html;
}

正常情况下(关闭pathinfo的情况下),只有.php后缀的文件才会被发送给fastcgi解析。而存在Nginx 文件名逻辑漏洞的情况下,我们请求1.gif[0x20][0x00].php,这个URI可以匹配上正则\.php$,可以进入这个Location块;但进入后,Nginx却错误地认为请求的文件是1.gif[0x20],就设置其为SCRIPT_FILENAME的值发送给fastcgi。

fastcgi根据SCRIPT_FILENAME的值进行解析,最后造成了解析漏洞。

3.3 漏洞复现

3.3.1 环境启动

image-20230908212612796

环境启动后,访问http://your-ip:8080/即可看到一个上传页面。

image-20230908213420971

上传一个php文件,页面显示我们上传的文件类型不支持。这个环境是黑名单验证,我们无法上传php后缀的文件。

image-20230908214005506

3.3.2 漏洞验证

开启Burpsuit抓取数据包,截获文件上传的数据包后,修改文件后缀名为gif格式,然后在文件后缀名的后面添加一个空格,这样,文件上传后也会出现一个空格。

image-20230909100310175

访问http://your-ip:8080/uploadfiles/wuhu.gif[0x20][0x00].php,在bp中将文件修改为uploadfiles/wuhu.gif[0x20][0x00].php。这里的[0x20]为空格,[0x00]为\0起到了截断的作用。

image-20230909100718950

即可发现PHP已被解析:

image-20230909100810741

3.4 漏洞利用

上传木马文件

image-20230909102002153

image-20230909101235923

在文件的后缀名后面添加一个空格

image-20230909101332942

访问上传文件 shell.jpg[0x20][0x00].php时,将文件修改为 shell.jpg[0x20][0x00].php,[0x20]为空格,[0x00]为\0(起到截断作用)

image-20230909101543925

命令执行成功

image-20230909102323556

3.5 修复方案

  • 更新 Nginx 版本: 确保 Nginx 版本已升级到最新版本。Nginx 团队通常会修复安全漏洞,并发布相关的更新补丁。及时更新可帮助解决已知的漏洞。该问题已经在 Nginx 1.5.7 和 1.4.4 版本中修复。

补丁链接地址

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/74140.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++杂货铺】探索stack和queue的底层实现

文章目录 一、stack的介绍和使用1.1 stack的介绍1.2 stack的使用1.2.1 最小栈1.2.2 栈的压入、弹出序列1.2.3 逆波兰表达式求值1.2.4 用栈实现队列 二、queue的介绍和使用2.1 queue的介绍2.2 queue的使用2.2.1 二叉树的层序遍历 三、模拟实现3.1 stack模拟实现3.2 queue模拟实现…

CUDA小白 - NPP(4) 图像处理 Data Exchange and Initialization(1)

cuda小白 原始API链接 NPP GPU架构近些年也有不少的变化&#xff0c;具体的可以参考别的博主的介绍&#xff0c;都比较详细。还有一些cuda中的专有名词的含义&#xff0c;可以参考《详解CUDA的Context、Stream、Warp、SM、SP、Kernel、Block、Grid》 常见的NppStatus&#xf…

二叉树(上)

“路虽远&#xff0c;行则将至” ❤️主页&#xff1a;小赛毛 目录 1.树概念及结构 1.1树的概念 1.2 树的相关概念 1.3 树的表示&#xff08;树的存储&#xff09; 2.二叉树概念及结构 2.1概念 2.2现实中的二叉树 2.3 特殊的二叉树&#xff1a; 2.4 二叉树的性质 3.二叉树的顺…

java 整合 swagger-ui 步骤

1.在xml 中添加Swagger 相关依赖 <!-- springfox-swagger2 --><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.9.2</version></dependency><!-- springfox-swa…

【Python从入门到进阶】35、selenium基本语法学习

接上篇《34、selenium基本概念及安装流程》 上一篇我们介绍了selenium技术的基础概念以及安装和调用的流程&#xff0c;本篇我们来学习selenium的基本语法&#xff0c;包括元素定位以及访问元素信息的操作。 一、元素定位 Selenium元素定位是指通过特定的方法在网页中准确定位…

Canape使用中遇到问题的解决办法

问题一、canape绘制目标时&#xff0c;二维结构体变量只能录制16个的解决办法 打开ASAP2 Studio 2.6 -Expert 软件。 把该软件中的设置项如下图进行修改。 然后用ASAP2 Studio 2.6 -Expert 软件 打开elf文件导出成A2L文件。 最后关闭该软件。 再在canape工程中重新加载刚才…

振弦采集仪应用地铁隧道安全监测详细解决方案

振弦采集仪应用地铁隧道安全监测详细解决方案 随着城市化进程的不断加快&#xff0c;地铁作为一种高效、便捷、环保的交通方式已经成为现代城市不可或缺的一部分。因此&#xff0c;对地铁的安全性也越来越重视&#xff0c;一般二三线以上的城市在不断发展中&#xff0c;地铁做…

c语言 2.0

1.数据类型 数据类型介绍 数据类型&#xff1a;c语言中数据类型有3种&#xff0c;分别是基本数据类型、构造数据类型、指针数据类型。 数据类型的作用&#xff1a;编译器预算数据分配的内存空间大小。 ps&#xff1a;可以通俗理解为&#xff1a;数据类型是用来规范内存的开销…

初识docker

目录 docker解决的问题1. 开发、测试和运维人员之间的矛盾2. 更轻量的虚拟化&#xff0c;节省了虚拟机的性能损耗 虚拟机与容器的区别1. 虚拟机2. 容器 Docker 系统架构 docker解决的问题 1. 开发、测试和运维人员之间的矛盾 “程序在我这跑得好好的&#xff0c;在你那怎么就…

C++之红黑树

红黑树 红黑树的概念红黑树的性质红黑树结点的定义红黑树的插入红黑树的验证红黑树与AVL树的比较 红黑树的概念 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一个存储位表示结点的颜色&#xff0c;可以是Red或Black。 通过对任何一条从根到叶子的路径上…

uniapp 在 onLoad 事件中 this.$refs 娶不到的问题

现象 本人想在主页面加载的时候调用子组件的方法。示例代码如下&#xff1a; 运行&#xff0c;发现 this.$refs 取不到。如下图所示&#xff1a; 解决方法&#xff0c;把onLoad 换为 onReady 就可以了。

【Linux】管道

管道命令 #include <unistd.h> int pipe(int pipefd[2]); 在Linux中&#xff0c;管道&#xff08;pipe&#xff09;的返回值是一个整数数组&#xff0c;包含两个文件描述符。这两个文件描述符分别代表管道的读端和写端。 当成功创建一个管道时&#xff0c;pipe() 系统调用…

K8S:kubectl陈述式及声明式资源管理

文章目录 一.陈述式资源管理方法1.陈述式资源管理概念2.基本信息查看&#xff08;1&#xff09;查看版本信息&#xff08;2&#xff09;查看资源对象简写&#xff08;3&#xff09;查看集群信息&#xff08;4&#xff09;配置kubectl自动补全&#xff08;5&#xff09;node节点…

基于Linux并结合socket网络编程的ftp服务器的实现

项目需求 客户端能够通过调用“get”指令&#xff0c;来获取服务器的文件客户端能通过“server_ls”指令&#xff0c;来获取服务器路径下的文件列表客户端能通过“server_cd”指令&#xff0c;进入服务器路径下的某文件夹客户端可以通过“upload”指令&#xff0c;上传自己的本…

Redis发布订阅机制学习

【IT老齐151】Redis发布订阅机制是如何实现的&#xff1f;_哔哩哔哩_bilibili go-redis的发布与订阅 - 知乎 (zhihu.com) 前置&#xff1a; 先输入 redis-server.exe 启动redis&#xff0c;否则对应接口不开放 再输入 redis-cli 命令启动客户端服务 1.机制示意图 当一…

AR产业变革中的“关键先生”和“关键力量”

今年6月的WWDC大会上&#xff0c;苹果发布了头显产品Vision Pro&#xff0c;苹果CEO库克形容它&#xff1a; 开启了空间计算时代。 AR产业曾红极一时&#xff0c;但因为一些技术硬伤又减弱了声量&#xff0c;整个产业在起伏中前行。必须承认&#xff0c;这次苹果发布Vision P…

七大排序算法

目录 直接插入排序 希尔排序 直接选择排序 堆排序 冒泡排序 快速排序 快速排序优化 非递归实现快速排序 归并排序 非递归的归并排序 排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作. 常见的排序算法有插入排序(直接插入…

队列(Queue)的顶级理解

目录 1.队列(Queue) 的概念 2.单链表模拟实现队列 2.1创建队列 2.2入队列 2.3判断是否为空 2.4出队列 2.5获取队头元素 2.6完整代码&#xff1a; 2.7双向链表模拟实现队列代码 3.数组模拟实现队列代码 3.1创建队列 3.2判断是否为满 3.3检查是否为空 3.4插入元素 3…

ctfshow 反序列化

PHP反序列化前置知识 序列化和反序列化 对象是不能在字节流中传输的&#xff0c;序列化就是把对象转化为字符串以便存储和传输&#xff0c;反序列化就是将字符串转化为对象 魔术方法 __construct() //构造&#xff0c;当对象new时调用 __wakeup() //执行unserialize()时&am…

mysql 增量备份与恢复使用详解

目录 一、前言 二、数据备份策略 2.1 全备 2.2 增量备份 2.3 差异备份 三、mysql 增量备份概述 3.1 增量备份实现原理 3.1.1 基于日志的增量备份 3.1.2 基于时间戳的增量备份 3.2 增量备份常用实现方式 3.2.1 基于mysqldump增量备份 3.2.2 基于第三方备份工具进行增…