Consul 未授权 KV 读取与快照利用
HashiCorp Consul 默认在 8500 端口提供 HTTP API,并在 8600/udp 提供 DNS 接口。未启用 ACL 时,任何人都能递归读取全部 KV 存储——其中常存服务配置、数据库密码与功能开关;/v1/snapshot 甚至能下载包含证书与 CA 私钥的集群快照。
仅限授权环境
读取与下载目标 Consul 数据仅在授权测试或靶场环境进行。
服务识别
curl http://<target>:8500/v1/agent/self
返回版本与配置信息即说明没有 ACL 拦截。8600/udp 是 DNS 接口,需发送合法 DNS 查询(dig -p 8600)才有响应,普通端口扫描看不出服务身份。
方法 A:递归拉取 KV
curl http://<target>:8500/v1/kv/?recurse
值为 base64 编码,用 base64 -d 解码后查看。KV 中常见内容:
| KV 内容 | 价值 |
|---|---|
| 服务配置 | 内部地址、端口、账号 |
| 数据库密码 | 直接复用到对应服务 |
| 功能开关 | 判断安全机制是否启用 |
方法 B:下载集群快照
curl -o snapshot.bin http://<target>:8500/v1/snapshot
快照内含证书与 CA 私钥等敏感材料,拿到后可作为进一步伪造身份与建立信任的基础。
方法 C:KV 作为离线载荷中转站
拥有 KV 写权限时,可把它当作离线载荷中转站:大值分块存放到多个 key,内网主机之间经 KV 交换数据,规避直接的点对点连接。
复核要点
/v1/agent/self结果记录 Consul 版本与配置,判断后续可用能力。- KV 递归结果全部解码后逐条查看,注意嵌套路径中的凭据。
- 快照文件属于高敏感材料,留档并安全存放。
防御建议
- 启用 ACL,默认策略拒绝匿名读取。
- HTTP API 只绑定 127.0.0.1,必要时经反代加认证暴露。
- 启用 gossip 加密。
- 快照接口加鉴权,下载行为纳入审计。