Nginx漏洞解析及复现

Nginx漏洞

Nginx能做到正向代理、反向代理、负载均衡、HTTP服务器等,强大的功能不言而喻,但也伴随着使用 上的风险,深入理解Nginx的漏洞有助于创建安全的业务系统。

Nginx解析漏洞

漏洞原理

Nginx的解析漏洞的出现和Nginx的版本没有关系,漏洞的产生是由于php配置问题导致的。 影响的范围:全版本 Nginx拿到文件路径(URI)/test.jpg/shell.php后,一看后缀是.php,便认为该文件是php文件,转交给 php去处理。php一看/test.jpg/shell.php不存在,便删去最后的/shell.php,又看/test.jpg存在,便 把/test.jpg当成要执行的文件了.

相关的配置:

# php.ini
cgi.fix_pathinfo=https://img-home.csdnimg.cn/images/20230724024https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=1&pos_id=7fnvOTFL59.png?origin_url=https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=1&pos_id=7fnvOTFL&pos_id=7fnvOTFL
# php-fpm.conf
security.limit_extensions = .php .jpg

cgi.fix_pathinfo=https://img-home.csdnimg.cn/images/20230724024https%3A%2F%2Fimg-home.csdnimg.cn%2Fimages%2F20230724024159.png%3Forigin_url%3D1%26pos_id%3D7fnvOTFL59.png?origin_url=https%3A%2F%2Fimg-home.csdnimg.cn%2Fimages%2F20230724024159.png%3Forigin_url%3D1%26pos_id%3D7fnvOTFL&pos_id=7fnvOTFL

开启这一选项有什么用呢?看名字就知道是对文件路径进行“修理”。何谓“修理”?举个例子,当php遇到 文件路径“/aaa.xxx/bbb.yyy/ccc.zzz”时,若“/aaa.xxx/bbb.yyy/ccc.zzz”不存在,则会去掉最后的 “/ccc.zzz”,然后判断“/aaa.xxx/bbb.yyy”是否存在,若存在,则把“/aaa.xxx/bbb.yyy”当做文件 “/aaa.xxx/bbb.yyy/ccc.zzz”,若“/aaa.xxx/bbb.yyy”仍不存在,则继续去掉“/bbb.yyy”,以此类推。

security.limit_extensions = .php .jpg

可执行的后缀,通常是因为需要PHP去执行一些静态文件,才会这样做配置,但是这样做了之后,就危险了。

漏洞复现

这里还是利用vulhub来进行复现,进入目录:vulhub/nginx/nginx_parsing_vulnerability

执行:

docker-compose up -d

访问浏览器:

默认情况下在上传文件目录下有一个图片码,我们可以访问来试试:

根据上面的介绍,我们可以在后面加上一个php后缀:

说明这个地方是存在漏洞的。

接下来直接上传一句话木马试一试:

没法上传,查看源码:

<?php
if (!empty($_FILES)):
// Check for errors
if($_FILES['file_upload']['error'] > 0){die('An error ocurred when uploading.');
}
if(!getimagesize($_FILES['file_upload']['tmp_name'])){die('Please ensure you are uploading an image.');
}
// Check filetype
if(stripos($_FILES['file_upload']['type'], 'image/') !== 0){die('Unsupported filetype uploaded.');
}
// Check filesize
if($_FILES['file_upload']['size'] > 500000){die('File uploaded exceeds maximum upload size.');
}
// Check filesize
if(!is_uploaded_file($_FILES['file_upload']['tmp_name'])) {die('File is not uploaded file');
}
$ext = pathinfo($_FILES['file_upload']['name'], PATHINFO_EXTENSION);
if (!in_array($ext, ['gif', 'png', 'jpg', 'jpeg'])) {die('Unsupported filetype uploaded.');
}
$new_name = __DIR__ . '/uploadfiles/' . md5($_FILES['file_upload']['name']) 
. ".{$ext}";
if(!move_uploaded_file($_FILES['file_upload']['tmp_name'], $new_name)){die('Error uploading file - check destination is writeable.');
}
die('File uploaded successfully: ' . $new_name);

通过看源码,我们发现只能上传图片了,这个时候我们想到直接上传图片码:

漏洞防御

主要是两个配置文件中配置不当造成的。

https://img-home.csdnimg.cn/images/20230724024https%3A%2F%2Fimg-home.csdnimg.cn%2Fimages%2F20230724024159.png%3Forigin_url%3D1%26pos_id%3D7fnvOTFL59.png?origin_url=https%3A%2F%2Fimg-home.csdnimg.cn%2Fimages%2F20230724024159.png%3Forigin_url%3D1%26pos_id%3D7fnvOTFL&pos_id=7fnvOTFL. 修改配置文件vim 对应php.ini

将cgi.fix_pathinfo=https://img-home.csdnimg.cn/images/20230724024https%3A%2F%2Fimg-home.csdnimg.cn%2Fimages%2F20230724024159.png%3Forigin_url%3D1%26pos_id%3D7fnvOTFL59.png?origin_url=https%3A%2F%2Fimg-home.csdnimg.cn%2Fimages%2F20230724024159.png%3Forigin_url%3D1%26pos_id%3D7fnvOTFL&pos_id=7fnvOTFL,设置为0

2.修改配置文件vim 对应php-fpm.conf  

将security.limit_extensions=,设置为: security.limit_extensions=.php,只允许php文件解析

Nginx 文件名逻辑漏洞(CVE-20https://img-home.csdnimg.cn/images/20230724024https%3A%2F%2Fimg-home.csdnimg.cn%2Fimages%2F20230724024159.png%3Forigin_url%3D1%26pos_id%3D7fnvOTFL59.png?origin_url=https%3A%2F%2Fimg-home.csdnimg.cn%2Fimages%2F20230724024159.png%3Forigin_url%3D1%26pos_id%3D7fnvOTFL&pos_id=7fnvOTFL3-4547)

漏洞原理

该漏洞影响版本:Nginx 0.8.4https://img-home.csdnimg.cn/images/20230724024https%3A%2F%2Fimg-home.csdnimg.cn%2Fimages%2F20230724024159.png%3Forigin_url%3D1%26pos_id%3D7fnvOTFL59.png?origin_url=https%3A%2F%2Fimg-home.csdnimg.cn%2Fimages%2F20230724024159.png%3Forigin_url%3D1%26pos_id%3D7fnvOTFL&pos_id=7fnvOTFL ~ https://img-home.csdnimg.cn/images/20230724024https%3A%2F%2Fimg-home.csdnimg.cn%2Fimages%2F20230724024159.png%3Forigin_url%3D1%26pos_id%3D7fnvOTFL59.png?origin_url=https%3A%2F%2Fimg-home.csdnimg.cn%2Fimages%2F20230724024159.png%3Forigin_url%3D1%26pos_id%3D7fnvOTFL&pos_id=7fnvOTFL.4.3 / https://img-home.csdnimg.cn/images/20230724024https%3A%2F%2Fimg-home.csdnimg.cn%2Fimages%2F20230724024159.png%3Forigin_url%3D1%26pos_id%3D7fnvOTFL59.png?origin_url=https%3A%2F%2Fimg-home.csdnimg.cn%2Fimages%2F20230724024159.png%3Forigin_url%3D1%26pos_id%3D7fnvOTFL&pos_id=7fnvOTFL.5.0 ~ https://img-home.csdnimg.cn/images/20230724024https%3A%2F%2Fimg-home.csdnimg.cn%2Fimages%2F20230724024159.png%3Forigin_url%3D1%26pos_id%3D7fnvOTFL59.png?origin_url=https%3A%2F%2Fimg-home.csdnimg.cn%2Fimages%2F20230724024159.png%3Forigin_url%3D1%26pos_id%3D7fnvOTFL&pos_id=7fnvOTFL.5.7

该漏洞利用了Nginx错误的解析了URL地址,导致可以绕过服务端限制,从而解析PHP文件,造成命令执 行的危害。根据nginx.conf文件中location中的定义,以.php结尾的文件都解析为php。

location ~ \.php$ {include        fastcgi_params;fastcgi_pass   https://img-home.csdnimg.cn/images/20230724024https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=1&pos_id=7fnvOTFL59.png?origin_url=https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=1&pos_id=7fnvOTFL&pos_id=7fnvOTFL27.0.0.https://img-home.csdnimg.cn/images/20230724024https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=1&pos_id=7fnvOTFL59.png?origin_url=https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=1&pos_id=7fnvOTFL&pos_id=7fnvOTFL:9000;fastcgi_index  index.php;fastcgi_param  SCRIPT_FILENAME  /var/www/html$fastcgi_script_name;fastcgi_param  DOCUMENT_ROOT /var/www/html;
}

若我们访问的文件名为shell.gif[0x20][0x00].php,该文件名以.php结尾可以被FastCGI接收,FastCGI在 读取文件名时被00截断,导致读取的文件名为shell.gif[0x20],配合security.limit_extensions为空即可 利用成功。

为什么security.limit_extensions需要为空?

这样就可以解析任意文件了。

漏洞复现

进入文件夹:vulhub/nginx/CVE-20https://img-home.csdnimg.cn/images/20230724024https%3A%2F%2Fimg-home.csdnimg.cn%2Fimages%2F20230724024159.png%3Forigin_url%3D1%26pos_id%3D7fnvOTFL59.png?origin_url=https%3A%2F%2Fimg-home.csdnimg.cn%2Fimages%2F20230724024159.png%3Forigin_url%3D1%26pos_id%3D7fnvOTFL&pos_id=7fnvOTFL3-4547

执行:

docker-compose up -d

这个地方上传不了php后缀了,不用尝试了。

直接上传图片码:shell.gif,成功访问:

但是这个地方需要我们上传shell.gif[0x20] ,就是文件名后面需要加一个空额,不然后面找不到文件

windows不需要,因为windows会默认去除空格

放行即可。

现在想办法拿到shell,结合之前分析的,我们直接访问:

http://ip:8080/uploadfiles/shell.gifaa.php

然后抓包将两个a,一个修改为20,一个修改为00:

放到repeater模块进行测试:

发现可行,然后放包:

拿到探针:

这里解释一下为什么需要有空格:

经过查阅资料发现nginx在对url的解析过程中,当路径中存在’.’或url存在’\0’会有如下处理:

#!cpp
case sw_check_uri:      ……case '.': r->complex_uri = https://img-home.csdnimg.cn/images/20230724024https%3A%2F%2Fimg-home.csdnimg.cn%2Fimages%2F20230724024159.png%3Forigin_url%3D1%26pos_id%3D7fnvOTFL59.png?origin_url=https%3A%2F%2Fimg-home.csdnimg.cn%2Fimages%2F20230724024159.png%3Forigin_url%3D1%26pos_id%3D7fnvOTFL&pos_id=7fnvOTFL;  //此作为flag会判断使用
ngx_http_parse_complex_uri方法,对路径修复state = sw_uri; break;    
casesw_check_uri:    ……case '\0':   //当遇到\0是,将会判断为非法字符return NGX_HTTP_PARSE_INVALID_REQUEST;
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

但如果nginx发现URI中存在空格会跳到如下代码:

上面代码执行完后state='sw_check_uri’然后继续处理URI中的剩余部分,这说明了如果空格和零截断符 相邻的话nginx就不会检测到零截断并放回错误了,这是一个逻辑漏洞,所以通过这种方式我们就可以在 URI中开心的使用零截断的,这就是CVE-20https://img-home.csdnimg.cn/images/20230724024https%3A%2F%2Fimg-home.csdnimg.cn%2Fimages%2F20230724024159.png%3Forigin_url%3D1%26pos_id%3D7fnvOTFL59.png?origin_url=https%3A%2F%2Fimg-home.csdnimg.cn%2Fimages%2F20230724024159.png%3Forigin_url%3D1%26pos_id%3D7fnvOTFL&pos_id=7fnvOTFL3-4547

注意,[0x20]是空格,[0x00]是\0,这两个字符都不需要编码。

在这里我们需要思考一下:

真正的利用场景? 执行系统命令? 反弹shell?

漏洞防御

https://img-home.csdnimg.cn/images/20230724024https%3A%2F%2Fimg-home.csdnimg.cn%2Fimages%2F20230724024159.png%3Forigin_url%3D1%26pos_id%3D7fnvOTFL59.png?origin_url=https%3A%2F%2Fimg-home.csdnimg.cn%2Fimages%2F20230724024159.png%3Forigin_url%3D1%26pos_id%3D7fnvOTFL&pos_id=7fnvOTFL.升级版本来的最直接

2.修改配置

Nginx 配置错误导致漏洞

漏洞原理

主要是配置不当造成的

影响范围:所有版本

漏洞复现

进入目录:vulhub/nginx/insecure-configuration

执行:

docker-compose up -d

运行成功后,Nginx将会监听8080/808https://img-home.csdnimg.cn/images/20230724024https%3A%2F%2Fimg-home.csdnimg.cn%2Fimages%2F20230724024159.png%3Forigin_url%3D1%26pos_id%3D7fnvOTFL59.png?origin_url=https%3A%2F%2Fimg-home.csdnimg.cn%2Fimages%2F20230724024159.png%3Forigin_url%3D1%26pos_id%3D7fnvOTFL&pos_id=7fnvOTFL/8082三个端口,分别对应三种漏洞。

CRLF注入漏洞

这个漏洞我没有想到好的利用方式,姑且认为这个地方确实存在这个漏洞吧。 Nginx会将$uri进行解码,导致传入%0a%0d即可引入换行符,造成CRLF注入漏洞。错误的配置文件示例(原本的目的是为了让http的请求跳转到https上):

然后直接访问:http://ip:8080/%0a%0dSet-Cookie:%20name=hsj

也可以注入xss:http://ip:8080/%0d%0aSet-Cookie:%20age=18%0d%0a%0d%0a

οnerrοr=alert(/xss/)>

只是这个要看浏览器。Chrome就不行。

目录穿越漏洞

Nginx在配置别名(Alias)的时候,如果忘记加/,将造成一个目录穿越漏洞。 错误的配置文件示例(原本的目的是为了让用户访问到/home/目录下的文件):

直接访问:

相当于直接穿越出了根目录。

add_header被覆盖

Nginx配置文件子块(server、location、if)中的add_header,将会覆盖父块中的add_header添加的 HTTP头,造成一些安全隐患。

/test2的location中又添加了X-Content-Type-Options头,导致父块中的add_header全部失效。 我们访问根:

我们看到在test2中引入了app.js

访问:

漏洞防御

注意配置即可。

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

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

相关文章

基于深度学习的中文标点预测模型-中文标点重建(Transformer模型)【已开源】

基于深度学习的中文标点预测模型-中文标点重建&#xff08;Transformer模型&#xff09;提供模型代码和训练好的模型 前言 目前以深度学习对文本自动添加标点符号研究很少&#xff0c;已知的开源项目并不多&#xff0c;详细的介绍就更少了&#xff0c;但对文本自动添加标点符号…

三菱MR-J4系列伺服驱动器E7.1和32.3故障报警处理总结

三菱MR-J4系列伺服驱动器E7.1和32.3故障报警处理总结 三菱MR-J4系列伺服驱动器出现报警,故障代码为:E7.1和32.3,查阅手册可以看到E7.1和32.3的报警解释信息, 如下图所示,此时简单运动控制模块上的ERROR灯亮, 如下图所示,用GX WORKS3打开备份程序,找到FX5-80SSC-…

3 - 大的国家(高频 SQL 50 题基础版)

3.大的国家 -- 查询属性&#xff1a;国家名称、人口和面积 select name,population,area fromWorld where area>3000000 OR population>25000000;

组件框架信息泄露

后端spring-boot框架 actuator组件信息泄露 Actuator是Spring-Boot提供的服务监控和管理中间件&#xff0c;默认配置会出现接口未授权 访问&#xff0c;部分接口会泄露网站流量信息和内存信息等&#xff0c;使用Jolokia库特性甚至可以远程执行任意代码&#xff0c;获 取服务器…

科技赋能,无障碍出行的新纪元

在现代社会&#xff0c;公共设施的建设不仅是衡量城市文明程度的标尺&#xff0c;更是实现社会公平与包容的重要载体。对于盲人群体而言&#xff0c;一个完善的公共设施网络&#xff0c;意味着他们能够更加独立、自信地融入社会&#xff0c;享受与视力健全者同等的公共服务与便…

使用onnxruntime加载YOLOv8生成的onnx文件进行目标检测

在网上下载了60多幅包含西瓜和冬瓜的图像组成melon数据集&#xff0c;使用 LabelMe 工具进行标注&#xff0c;然后使用 labelme2yolov8 脚本将json文件转换成YOLOv8支持的.txt文件&#xff0c;并自动生成YOLOv8支持的目录结构&#xff0c;包括melon.yaml文件&#xff0c;其内容…

干货!如何在Jmeter中实现对NCR响应的解析

最近做接口测试时发现了一个问题&#xff0c;部分请求的响应是通过NCR编码实现的&#xff0c;这样就导致了无法对这些请求进行断言&#xff0c;为了解决这个问题进行了如下调研&#xff0c;大家可以参考下面两篇文章&#xff1a; 使用Java apache commons包五分钟搞定NCR解析&…

CCIG 2024:大模型技术及其前沿应用论坛深度解析

一、CCIG论坛介绍 中国图象图形大会&#xff08;CCIG 2024&#xff09;是一场备受瞩目的学术盛会&#xff0c;近期在陕西省西安市曲江国际会议中心举行。这次会议以“图聚智生&#xff0c;象合慧成”为主题&#xff0c;由中国图象图形学学会主办&#xff0c;旨在汇聚图像图形领…

ABAP 长文本编辑器弹窗控件

前言 用户想在ALV上编辑长文本&#xff0c;但是ALV只有128个字符肯定是不够用的&#xff0c;所以需要用一个长文本编辑器来输入&#xff0c;本来想自己写的&#xff0c;发现有标准的函数&#xff0c;还挺好用的 代码 在用户双击ALV字段时&#xff0c;触发下述form&#xff0…

使用Rufus工具制作Ubuntu To Go——很详细

一、准备工作 准备工具&#xff1a; 1、下载Rufus(主角)软件 2、准备一个U盘或硬盘&#xff08;小白128G足够&#xff0c;装Ubuntu系统&#xff09; 3、下载Ubuntu系统镜像文件 1、下载软件Rufus 先来看一下官网介绍&#xff1a; Rufus 是一款格式化和创建 USB 启动盘的辅助工…

“GPT-4o深度解析:技术演进、能力评估与个人体验综述“

文章目录 每日一句正能量前言对比分析模型架构性能应用场景用户体验技术创新社区和生态系统总结 技术能力语言生成能力语言理解能力技术实现总结 个人感受关于GPT-4o的假设性观点&#xff1a;关于当前语言模型的一般性观点&#xff1a; 后记 每日一句正能量 又回到了原点&#…

“智能分析赋能等保:大数据技术在安全审计记录中的应用“

智能分析技术在信息安全领域&#xff0c;尤其是等保&#xff08;等级保护&#xff09;合规性方面&#xff0c;发挥了关键作用。特别是结合大数据技术&#xff0c;安全审计记录的处理和分析能力得到了显著增强。以下几点阐述了大数据技术是如何赋能等保安全审计的&#xff1a; …

【Python】 Python中的functools.wraps:装饰器的优雅包装

基本原理 在Python中&#xff0c;装饰器是一种非常强大的工具&#xff0c;它允许我们以一种非常灵活的方式修改或增强函数的行为。装饰器本质上是一个函数&#xff0c;它接收一个函数作为参数&#xff0c;并返回一个新的函数。然而&#xff0c;当我们使用装饰器时&#xff0c;…

【笔记】Sturctured Streaming笔记总结(Python版)

目录 相关资料 一、概述 1.1 基本概念 1.2 两种处理模型 &#xff08;1&#xff09;微批处理 &#xff08;2&#xff09;持续处理 1.3 Structured Streaming和Spark SQL、Spark Streaming关系 二、编写Structured Streaming程序的基本步骤 三、输入源 3.1 File源 &a…

Docker 基础使用 (1) 使用流程概览

文章目录 Docker 软件安装Docker 镜像仓库Docker 仓库指令Docker 镜像指令Docker 容器指令Docker 使用实例 —— 搭建 nginx 服务nginx 概念nginx 使用用 docker 启动 nginx Docker 基础使用&#xff08;0&#xff09;基础认识 Docker 基础使用 (1) 使用流程概览 Docker 基础使…

f-stack和DPDK

GPT-4 (OpenAI) f-stack和DPDK&#xff08;数据平面开发套件&#xff09;都是与高性能网络处理相关的技术。它们的目的是提高数据包的处理速度&#xff0c;优化网络I/O的性能。以下是对这两者的简要解释&#xff1a; 1. **DPDK (Data Plane Development Kit):** DPDK 是一个…

【软件安全国产化替代解决方案】亮相2024澳门万讯论坛

近日&#xff0c;2024万讯论坛在澳门成功举办。本次论坛由万讯电脑科技主办&#xff0c;旨在引进国内尖端科技厂商&#xff0c;提供全方位的信创解决方案&#xff0c;分享信创化过程中所面临的挑战及阶段性转换经验。开源网安作为拥有软件安全领域全链条产品的厂商&#xff0c;…

【网络安全的神秘世界】安装burpsuite

&#x1f31d;博客主页&#xff1a;泥菩萨 &#x1f496;专栏&#xff1a;Linux探索之旅 | 网络安全的神秘世界 | 专接本 java下载地址 burpsuite安装包 安装java 双击打开java安装包——>下一步 在java文件夹下创建jdk和jre文件夹&#xff08;不一定是C盘&#xff0c;根…

云原生下的数据协调艺术:etcd存储系统解析

目录 一、分布式存储简介 二、etcd介绍 三、etcd架构 四、etcd集成实践 一、分布式存储简介 随着云原生与容器化技术的兴起&#xff0c;分布式系统的复杂性大大增加。分布式系统面临一系列问题&#xff0c;比如部署复杂、响应时间慢、运维复杂等&#xff0c;其中最根本的问…

【Redis数据库】命令操作

文章目录 一、连接命令二、键命令 &#x1f308;你好呀&#xff01;我是 山顶风景独好 &#x1f495;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01; &#x1f495;希望您在这里可以感受到一份轻松愉快的氛围&#xff01; &#x1f495;这里不仅可以获得有…