【Vulhub靶场】Nginx 中间件漏洞复现

【Vulhub靶场】Nginx 中间件漏洞复现

  • 一、Nginx 文件名逻辑漏洞(CVE-2013-4547)
    • 1. 影响版本
    • 2. 漏洞原理
    • 3. 漏洞复现
  • 二、Nginx越界读取缓存漏洞(CVE-2017-7529)
    • 1. 漏洞详情
    • 2. 影响版本
    • 3. 漏洞复现
  • 三、Nginx 配置错误导致漏洞(insecure-configuration)
    • 1.漏洞复现
      • 1.1 CRLF注入漏洞
      • 1.2 目录穿越漏洞
      • 1.3 add_header被覆盖
  • 四、Nginx 解析漏洞(nginx_parsing_vulnerability)
    • 1. 版本信息:
    • 2. 漏洞详情
    • 3. 漏洞复现

Nginx 概念:

Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
Nginx 是高性能的 HTTP 和反向代理的web服务器,处理高并发能力是十分强大的,能经受高负 载的考验,有报告表明能支持高达 50,000 个并发连接数。
Nginx支持热部署,启动简单,可以做到7*24不间断运行。几个月都不需要重新启动。

一、Nginx 文件名逻辑漏洞(CVE-2013-4547)

1. 影响版本

Nginx 0.8.41 ~ 1.4.3 / 1.5.0 ~ 1.5.7

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解析。
而存在CVE-2013-4547的情况下,我们请求1.gif[0x20][0x00].php,这个URI可以匹配上正则.php$,可以进入这个Location块;但进入后,Nginx却错误地认为请求的文件是1.gif[0x20],就设置其为SCRIPT_FILENAME的值发送给fastcgi。

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

所以,只需要上传一个空格结尾的文件,即可使PHP解析之。

3. 漏洞复现

开启vulhub靶机,启动环境

root@Fly:~/vulhub/nginx/CVE-2013-4547# docker-compose build
root@Fly:~/vulhub/nginx/CVE-2013-4547# docker-compose up -d

在这里插入图片描述
访问靶机的IP地址,如下图:

在这里插入图片描述
这个环境是黑名单验证,我们无法上传php后缀的文件,需要利用CVE-2013-4547。我们上传一个“1.gif ”,注意后面的空格:
在这里插入图片描述
上传成功
在这里插入图片描述
访问http://your-ip:8080/uploadfiles/1.gif[0x20][0x00].php,再次抓包修改,即可发现PHP已被解析:
在这里插入图片描述

二、Nginx越界读取缓存漏洞(CVE-2017-7529)

1. 漏洞详情

Nginx在反向代理站点的时候,通常会将一些文件进行缓存,特别是静态文件。缓存的部分存储在文件中,每个缓存文件包括“文件头”+“HTTP返回包头”+“HTTP返回包体”。如果二次请求命中了该缓存文件,则Nginx会直接将该文件中的“HTTP返回包体”返回给用户。

如果我的请求中包含Range头,Nginx将会根据我指定的start和end位置,返回指定长度的内容。而如果我构造了两个负的位置,如(-600, -9223372036854774591),将可能读取到负位置的数据。如果这次请求又命中了缓存文件,则可能就可以读取到缓存文件中位于“HTTP返回包体”前的“文件头”、“HTTP返回包头”等内容。

2. 影响版本

 Nginx 0.5.6 – 1.13.2

3. 漏洞复现

开启vulhub靶机,启动环境

root@Fly:~/vulhub/nginx/CVE-2017-7529# docker-compose up -d

访问http://your-ip:8080/,即可查看到Nginx默认页面,这个页面实际上是反向代理的8081端口的内容。在这里插入图片描述
在这里插入图片描述
直接在靶场环境中调用python3 poc.py http://your-ip:8080/,读取返回结果:
在这里插入图片描述
可见,越界读取到了位于“HTTP返回包体”前的“文件头”、“HTTP返回包头”等内容。

三、Nginx 配置错误导致漏洞(insecure-configuration)

1.漏洞复现

开启vulhub靶机,启动环境

root@Fly:~/vulhub/nginx/nginx_parsing_vulnerability# docker-compose up -d

运行成功后,Nginx将会监听8080/8081/8082三个端口,分别对应三种漏洞。

1.1 CRLF注入漏洞

Nginx会将$uri进行解码,导致传入%0d%0a即可引入换行符,造成CRLF注入漏洞。
Payload: http://your-ip:8080/%0d%0aSet-Cookie:%20a=1,可注入Set-Cookie头。

错误的配置文件示例(原本的目的是为了让http的请求跳转到https上):

在这里插入图片描述
访问访问http://192.168.111.146:8080/,进行抓包,发现在nginx重定向后,会在http响应头中出现Location字段,如下图所示
在这里插入图片描述
当我们访问http://192.168.111.146:8080/%0d%0atest时,抓包响应头如下图所示。 %0d%0a\r\n,也就是换行符,所以在url中加入一个换行符即可将恶意数据写入http响应头。
在这里插入图片描述
同理加两个换行符可以将数据写入响应体,例如访问 http://192.168.111.146:8080/%0d%0a%0d%0a<script>alert(1)</script>后响应体如下图所示,通过这种注入可实现xss攻击。
在这里插入图片描述

1.2 目录穿越漏洞

Nginx在配置别名(Alias)的时候,如果忘记加/,将造成一个目录穿越漏洞。

错误的配置文件示例(原本的目的是为了让用户访问到/home/目录下的文件):
在这里插入图片描述
在这里插入图片描述
Payload: http://your-ip:8081/files…/ ,成功穿越到根目录:
在这里插入图片描述

1.3 add_header被覆盖

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

如下列代码,整站(父块中)添加了CSP头:

在这里插入图片描述
访问之后http://192.168.111.146:8082/test1,进行抓包,发现CSP头目前还有。
在这里插入图片描述

访问之后http://192.168.111.146:8082/test2,进行抓包,发现CSP头消失
在这里插入图片描述
由此可见,/test2的location中又添加了X-Content-Type-Options头,导致父块中的add_header全部失效:

四、Nginx 解析漏洞(nginx_parsing_vulnerability)

1. 版本信息:

Nginx 1.x 最新版
PHP 7.x最新版

2. 漏洞详情

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

3. 漏洞复现

开启vulhub靶机,启动环境

root@Fly:~/vulhub/nginx/nginx_parsing_vulnerability# docker-compose up -d

访问http://192.168.111.146/uploadfiles/nginx.png可正常显示
在这里插入图片描述
增加/.php后缀,被解析成PHP文件:http://192.168.111.146/uploadfiles/nginx.png/.php
在这里插入图片描述

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

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

相关文章

Spring StringUtils:简洁高效处理文本数据

1. 概述 Spring框架中的StringUtils类是一个功能强大的字符串工具类&#xff0c;它提供了一系列静态方法&#xff0c;用于简化字符串的常见操作&#xff0c;如检查空字符串、分割字符串、拼接字符串等。通过StringUtils&#xff0c;我们可以更便捷地处理字符串数据&#xff0c…

Spring JdbcTemplate实现自定义动态sql拼接功能

需求描述&#xff1a; sql 需要能满足支持动态拼接&#xff0c;包含 查询字段、查询表、关联表、查询条件、关联表的查询条件、排序、分组、去重等 实现步骤&#xff1a; 1&#xff0c;创建表及导入测试数据 CREATE TABLE YES_DEV.T11 (ID BINARY_BIGINT NOT NULL,NAME VARCH…

nest中的ORM

在 Nest.js 中执行 SQL 查询通常涉及使用 TypeORM 或 Sequelize 这样的 ORM&#xff08;对象-关系映射&#xff09;库。这些库使得在 Nest.js 应用程序中连接和操作 SQL 数据库变得更加简单和直观。 以下是一个使用 TypeORM 在 Nest.js 中执行 SQL 查询的示例代码&#xff1a;…

使用zdppy_amauth开发激活用户接口

服务端代码&#xff1a; 1、创建数据库连接对象2、初始化数据库3、声明一个上下文4、挂载用户相关的路由&#xff0c;这里主要由 用户登录接口用户注册注册获取用户列表接口激活指定用户接口 5、启动服务 import mcrud import api import amauth import env import contextli…

修改页签标题 + 页签图表

修改图标 在App.vue下的created()里或者路由守卫中输入 var link document.querySelector("link[rel*icon]") || document.createElement("link"); link.type "image/x-icon"; link.rel "shortcut icon"; link.href require(l…

非模块化 Vue 开发的 bus 总线通信

个人感觉&#xff0c;JavaScript 非模块开发更适合新人上手&#xff0c;不需要安装配置一大堆软件环境&#xff0c;不需要编译&#xff0c;适合于中小项目开发&#xff0c;只需要一个代码编辑器即可开发&#xff0c;例如 vsCode。网页 html 文件通过 script 标签引入 JavaScrip…

探秘艺术之源:DALL-E3与Midjourney 绘画软件深度对照分析

随着人工智能技术的飞速发展&#xff0c;AI绘画软件已经成为了艺术创作的一大助力。在这场融合了技术与艺术的革新浪潮中&#xff0c;DALL-E3和Midjourney无疑是最受瞩目的两位选手。它们不仅改变了艺术家的创作方式&#xff0c;还为平凡人打开了一扇通往艺术殿堂的大门。本文将…

使用Matplotlib绘制正弦和余弦函数曲线

前言 在数据可视化领域&#xff0c;Matplotlib是一个功能强大的Python库&#xff0c;它允许用户创建各种静态、交互式和动画图形。本文将引导您通过一个简单的示例&#xff0c;学习如何使用Matplotlib绘制正弦和余弦函数曲线。 第一步&#xff1a;导入必要的库&#xff1a; …

【漫画版】指挥官的排序战术:快速排序算法解密

作者介绍&#xff1a;10年大厂数据\经营分析经验&#xff0c;现任字节跳动数据部门负责人。 会一些的技术&#xff1a;数据分析、算法、SQL、大数据相关、python&#xff0c;欢迎探讨交流 欢迎加入社区&#xff1a;码上找工作 作者专栏每日更新&#xff1a; LeetCode解锁1000题…

基于自我对弈框架的偏好优化算法SPPO

传统的从人类反馈中进行强化学习&#xff08;RLHF&#xff09;的方法仰赖如Bradley-Terry模型等参数模型,但这样的模型难以充分捕捉人类偏好中的非递移性和非理性。最新的研究进展显示,直接使用偏好机率可以更准确地反映人类偏好,从而实现更灵活、更精确的语言模型对齐。本文提…

教你解决PUBG绝地求生登不进去 无法进入游戏 启动很慢的问题

尽管《绝地求生》&#xff08;PUBG&#xff09;以它那扣人心弦的战术竞技和逼真模拟的战场氛围风靡全球&#xff0c;揽获无数玩家的喜爱&#xff0c;但一些玩家在经历了一场血脉喷张的生存较量后&#xff0c;却不得不面对一个不那么愉悦的后续&#xff1a;游戏在结算阶段后出现…

从某CIM厂12寸项目中止导入谈起

最近在网上开始传播&#xff0c; 两12吋新建Fab中止某CIM导入&#xff0c;CIM国产化路往何方&#xff1f; 从文中我已经知道了这家公司是谁了&#xff0c;看到这个情况&#xff0c;还是感触良多。内部居然还有股权进行内部交易得情况&#xff0c;可见当时多少去博一把了&…

02.02.返回倒数第k个节点

实现一种算法&#xff0c;找出单向链表中倒数第 k 个节点。返回该节点的值。 注意&#xff1a;本题相对原题稍作改动 示例&#xff1a; 输入&#xff1a; 1->2->3->4->5 和 k 2 输出&#xff1a; 4 说明&#xff1a; 给定的 k 保证是有效的。 代码&#xff…

2批!2024年武汉市科技企业孵化器、众创空间申报时间、流程

2024年武汉市科技企业孵化器、众创空间申报时间、流程等内容如下&#xff0c;武汉市各区县的企业单位可以了解一下 申报时间 2024-04-22 至 2024-09-14 支持方式 武汉市2024年度科技企业孵化器认定和众创空间备案申报 申报条件 1、市级认定&#xff08;备案&#xff09;&a…

跨平台应用开发神器Uniapp

Uniapp是一款基于Vue.js框架的跨平台应用开发框架。它可以将同一份代码编译生成多个应用程序&#xff0c;包括iOS、Android、H5、小程序等。在这篇文章中&#xff0c;我们将详细介绍Uniapp的特点、优势以及如何使用Uniapp开发跨平台应用。 一、Uniapp的特点 1、跨平台开发 U…

YOLOv5改进 | 注意力机制 | 理解全局和局部信息的SE注意力机制

在深度学习目标检测领域&#xff0c;YOLOv5成为了备受关注的模型之一。本文给大家带来的是能够理解全局和局部信息的SE注意力机制。文章在介绍主要的原理后&#xff0c;将手把手教学如何进行模块的代码添加和修改&#xff0c;并将修改后的完整代码放在文章的最后&#xff0c;方…

C语言/数据结构——每日一题(分割链表)

一.前言 今天在LeetCode觉得很不错&#xff0c;想和大家们一起分享这道链表题——分割链表&#xff1a;https://leetcode.cn/problems/partition-list-lcci废话不多说&#xff0c;让我们直接进入正题吧。 二.正文 1.1题目描述 1.2题目分析 大致思路&#xff1a;我们可以通过…

从头开始的建材类电商小程序开发指南

在当今数字化时代&#xff0c;小程序已经成为了许多企业推广和销售的重要渠道。对于建筑材料行业来说&#xff0c;开发一个属于自己的小程序商城不仅可以提升产品曝光度&#xff0c;还可以提供更好的用户购物体验。下面&#xff0c;我们将逐步教你如何开发建筑材料行业小程序。…

未来趋势系列 篇一:AI主题全景分析和股票梳理

文章目录 系列文章全景分析算力算力租赁液冷英伟达AI服务器AI芯片光模块AIPC云计算AIGC大模型KIMI、SORA、秘塔AI股票梳理系列文章 未来趋势系列 篇一:AI主题全景分析和股票梳理<

typescript 中的接口及其用途

接口&#xff1a;定义行为动作的规范 属性接口、函数类型接口、可索引接口、类类型接口、 1、属性接口 对JSON的约束 function printLabel(label: string): void {console.log(printLabel); } printLabel(字符串)function printLabel2(labelInfo: { label: string }): void {…