doublegate/CLAWHunter
GitHub: doublegate/CLAWHunter
专为 Hak5 WiFi Pineapple Pager 设计的 OpenClaw AI 网关发现套件,集成多层指纹识别、规避扫描和后渗透数据收集能力。
Stars: 1 | Forks: 0
# ✦ CLAWHunter
一款用于在本地网络发现 [OpenClaw](https://docs.openclaw.ai) AI 网关实例的 [Hak5 WiFi Pineapple Pager](https://docs.hak5.org/wifi-pineapple-pager/) payload **套件**。包含三种 payload 变体 —— 交互式、侦察触发式和警报触发式 —— 共享通用的指纹识别库。完整的硬件集成:彩色显示屏、RGB LED、触觉反馈、音频提示以及交互式结果浏览器。




## v3.0.3 更新内容
| 变更 | 详情 |
|--------|--------|
| **时间抖动** | 每个扫描配置文件现在应用随机的探测间延迟(基数 + 抖动)。打破了有状态 IDS 引擎所依赖的节拍式时间特征。与现有的随机主机顺序(功能 4)协同工作,形成双轴规避策略:*扫描对象*被打乱,*探测时间*被抖动。 |
| **移除无用导入** | `hashlib` 在 `harvest.py` 中被导入但从未调用。已移除。 |
### 各配置文件的抖动值
| 配置文件 | 基础延迟 | 最大抖动 | 总最大值 | 意图 |
|---------|-----------|-----------|-----------|--------|
| GHOST | 0 ms | 0 ms | 0 ms | 仅被动 — 无探测 |
| QUIET | 50 ms | 200 ms | 250 ms | 模拟人工浏览节奏;极低的 IDS 特征 |
| NORMAL | 0 ms | 80 ms | 80 ms | 在不减慢扫描速度的情况下打破节拍式时间特征 |
| FAST | 0 ms | 25 ms | 25 ms | 最小化 — 足以避免精确间隔检测 |
| AGGRESSIVE | 0 ms | 0 ms | 0 ms | 速度优先;接受 IDS 风险 |
抖动使用 `$RANDOM % (max+1)` — bash 内置,无需外部工具。
## v3.0.0 更新内容
| # | 功能 | 描述 |
|---|---------|-------------|
| A1 | **WebSocket 探测** | 通过 `/dev/tcp` 进行原始 WS 升级 — 协议层确认(约 99% 准确率) |
| A2 | **Canvas 路径探测** | `/__openclaw__/canvas/` + `/__openclaw__/a2ui/` — OpenClaw 独有的 HTTP 路径 |
| A3 | **`/agent/status` 情报** | 提取模型、上下文使用率%、活动工具调用数、子代理数、运行时间 |
| B1 | **Recon payload 变体** | RF 优先:读取 Recon 上下文变量,连接,扫描 — 无需选择器 |
| B2 | **Alert payload 变体** | 客户端连接时自动触发 — 单主机探测,<5s,静默 |
| C1 | **持续 mDNS 监控** | 定时 mDNS 循环,带倒计时(可配置驻留时间,默认 30s) |
| C2 | **ARP 缓存收集** | 在 ARP 扫描前检查 `/proc/net/arp` + `ip neigh` — 跳过已知主机的发现 |
| D1 | **JSON 报告输出** | 结构化的 `scan_YYYYMMDD_HHMMSS.json` 与 `.log` 文件并存 |
| E1 | **MAC 随机化** | 随机化扫描器 MAC(macchanger 或 ip link),退出时恢复 |
| F4 | **扫描速度配置** | GHOST / QUIET / NORMAL / FAST / AGGRESSIVE — 取代二元的快/慢模式 |
| F5 | **Watchdog 模式** | 周期性重扫,间隔可配置,仅在变更时发出警报 |
## v2.1.0 功能(全部保留)
| # | 功能 | 描述 |
|---|---------|-------------|
| 1 | **静默模式** | 抑制所有音频和触觉反馈,用于隐蔽操作 |
| 2 | **进度计数器** | 旋转图标中实时显示 `%` 并跟踪主机索引(`n/总数`) |
| 3 | **ARP 主机发现** | 通过 `arp-scan` → `arping` → ping 回退进行二层主机检测 |
| 4 | **随机扫描顺序** | 打乱主机列表以降低 IDS/IPS 检测特征 |
| 5 | **HTTPS 探测** | 对每个开放端口依次尝试 `http://` 和 `https://` 以发现 TLS 封装的网关 |
| 6 | **扩展端口** | 可选扫描 80, 443, 3000, 8080, 8443(反向代理检测) |
| 7 | **mDNS 预扫描** | `avahi-browse` 零探测发现(现已在 user payload 中变为持续模式) |
| 8 | **深度指纹识别** | 从 `/health`, `/status` 等路径提取版本、角色设定、服务器头信息 |
| 9 | **WiFi 客户端模式** | 通过 Recon 或手动 SSID/password 连接目标 AP,自动扫描 |
| 10 | **多子网扫描** | 每次扫描后,循环扫描另一个子网,无需重启 |
| 11 | **跨运行历史/差异** | 浏览所有过往发现;对比新增与消失的实例及先前运行记录 |
## 仓库结构
```
CLAWHunter/
├── lib/
│ └── common.sh ← Shared library (LED, audio, probing, fingerprinting)
├── payloads/
│ ├── user/clawhunter/
│ │ └── payload.sh ← Interactive payload (all features, Pager UI)
│ ├── recon/clawhunter/
│ │ └── payload.sh ← Recon variant (RF-first, auto-connect)
│ └── alert/clawhunter-watchdog/
│ └── payload.sh ← Alert variant (auto-fires, <5s, silent)
├── payload.sh ← Legacy v2.1.0 (kept for reference)
└── README.md
```
## 使用的硬件功能
| 硬件 | 用途 |
|----------|-------|
| **480×222 px 16-bit 彩色显示屏** | 彩色编码的日志输出、交互式选择器、ALERT 弹窗、结果浏览器、历史浏览器、mDNS 倒计时 |
| **RGB LED 阵列(4 颗 LED)** | 蓝色脉冲 = 扫描中,快速绿色 = 已确认,交替闪烁 = 候选,青色 = mDNS/被动,白色 = WiFi 连接中,洋红色 = watchdog 休眠,红色 = 错误 |
| **触觉(振动)** | 候选时轻振(150ms),mDNS/WiFi 时中振(300ms),确认时强振(500ms);alert 变体仅使用振动(强制静默) |
| **音频(RINGTONE / RTTTL)** | 启动、发现、mDNS 发现、候选 ping、完成(有/无)、中止、WiFi 已连接、watchdog 警报 — 静默模式下全部抑制 |
| **5 键导航** | UP/DOWN 用于选择器和配置选择;B 键中止扫描、退出浏览器、退出 watchdog |
## Payload 变体
### User payload — `payloads/user/clawhunter/`
完整的交互式体验。从 Pager UI 中的 **Payloads → user → clawhunter** 启动。包含所有 11 项 v2.1.0 功能及所有 v3.0.0 功能。这是手动现场操作的主要 payload。
### Recon payload — `payloads/recon/clawhunter/`
RF 优先工作流。在 **Recon UI** 中选择目标 AP 后启动。自动读取 `_RECON_SELECTED_AP_*` 上下文变量 —— 无需手动选择子网或端口。仅在 AP 加密时提示输入密码。连接、扫描、显示结果、断开。
**流程:** Recon UI 选择 AP → payload 启动 → 读取 AP 上下文 → 密码提示(如果是 WPA) → 连接 → 一次性 mDNS 预扫描 → ARP 发现 → 端口扫描 → 结果 → 断开
### Alert payload — `payloads/alert/clawhunter-watchdog/`
零交互自动触发。当客户端连接到 Pager 的 AP 时触发。探测连接客户端的 IP 是否具有 OpenClaw 特征 —— 不进行子网扫描。在 <5 秒内完成。默认静默。发现确认时振动。日志记录到 `/root/loot/clawhunter/alert_YYYYMMDD_HHMMSS.log`。
## 部署
### lib/ 目录(所有变体必需)
```
# 复制共享库到 Pager
scp -r lib root@pineapple.lan:/root/payloads/
# Pager 上的结果:
# /root/payloads/lib/common.sh
```
### User payload
```
ssh root@pineapple.lan "mkdir -p /root/payloads/user/clawhunter"
scp payloads/user/clawhunter/payload.sh \
root@pineapple.lan:/root/payloads/user/clawhunter/payload.sh
```
### Recon payload
```
ssh root@pineapple.lan "mkdir -p /root/payloads/recon/clawhunter"
scp payloads/recon/clawhunter/payload.sh \
root@pineapple.lan:/root/payloads/recon/clawhunter/payload.sh
```
### Alert payload
```
ssh root@pineapple.lan "mkdir -p /root/payloads/alert/clawhunter-watchdog"
scp payloads/alert/clawhunter-watchdog/payload.sh \
root@pineapple.lan:/root/payloads/alert/clawhunter-watchdog/payload.sh
```
### 一次性全部部署
```
scp -r lib payloads root@pineapple.lan:/root/payloads/
```
**部署后 Pager 上的目录结构:**
```
/root/payloads/
├── lib/
│ └── common.sh
├── user/clawhunter/payload.sh
├── recon/clawhunter/payload.sh
└── alert/clawhunter-watchdog/payload.sh
```
## 使用方法 — User payload
从 Pager UI 中的 **Payloads → user → clawhunter** 启动。
| 提示 | 默认值 | 描述 |
|--------|---------|-------------|
| 查看扫描历史? | No | 浏览所有扫描日志中的过往发现 |
| 静默模式? | No | 抑制所有音频和振动 |
| 随机化 MAC? | No | 随机化扫描器 MAC,退出时恢复 (E1) |
| 扫描配置文件 | NORMAL | GHOST / QUIET / NORMAL / FAST / AGGRESSIVE (F4) |
| 先连接 AP? | No | WiFi 客户端模式 — 扫描前连接 |
| 目标子网 | 自动检测 | 前三个八位组(例如 `192.168.4`) |
| OpenClaw 端口 | `18790` | 主要目标端口 |
| 高级选项? | No | 进入端口范围、扩展端口、随机化设置 |
| → 宽端口范围? | No | 扫描 `18780–18800` 而非单个端口 |
| → 扩展端口? | No | 同时探测 80, 443, 3000, 8080, 8443 |
| → 随机化顺序? | No | 打乱主机列表 |
| 完整 /24 扫描? | Yes | 254 台主机(约 90s)或快速扫描 `.1–.50`(约 20s) |
| mDNS 驻留时间 (秒) | 30 | 端口扫描前的持续 mDNS 监控时长 |
| Watchdog 模式? | No | 扫描后:周期性重扫并在变更时发出警报 (F5) |
| → 重扫间隔 (分钟) | 5 | watchdog 重扫之间的分钟数 |
## 扫描速度配置 (F4)
| 配置文件 | 行为 | 抖动 (基数 + 抖动) | 备注 |
|---------|----------|----------------------|-------|
| **GHOST** | 仅被动 — mDNS 监控 + ARP 缓存收集,无端口探测 | 无 | 零主动流量 |
| **QUIET** | 顺序探测,50ms 下限,强制静默 | 50ms + 0–200ms | 模拟人工浏览节奏 |
| **NORMAL** | 顺序探测,默认行为 | 0ms + 0–80ms | 打破节拍式时间特征 |
| **FAST** | 并行探测(一次 3 台主机) | 0ms + 0–25ms | 最小抖动,约 3 倍吞吐量 |
| **AGGRESSIVE** | 所有端口 + 扩展端口,5 个并行探测 | 无 | 速度优先,接受 IDS 风险 |
## 控制
| 按键 | 上下文 | 动作 |
|--------|---------|--------|
| UP/DOWN | 选择器,配置选择器 | 调整值 / 更改选择 |
| B | 配置选择器 | 确认选择 |
| B | 任何选择器 | 取消 |
| B | 扫描期间 | 干净地中止扫描 |
| B | mDNS 倒计时 | 提前中止 mDNS 监控 |
| UP/DOWN | 结果浏览器 | 导航发现的主机 |
| RIGHT(或任何未处理的键) | 结果浏览器 | 对当前发现启动 harvest |
| B 或 LEFT | 结果浏览器 | 退出浏览器 |
| UP/DOWN | 历史浏览器 | 导航过往发现 |
| B 或 LEFT | 历史浏览器 | 退出浏览器 |
| B | Watchdog 倒计时 | 退出 watchdog 模式 |
| 任意 | ALERT 弹窗 | 关闭并继续扫描 |
| 任意 | 最终 PROMPT | 退出 payload |
## OpenClaw 指纹识别 (v3.0.0)
### 阶段 0 — mDNS 监控 (C1)
在可配置的驻留期(默认 30s)内持续运行 `avahi-browse`。显示屏上可见倒计时。LED 呈青色脉冲。任何匹配 `openclaw` 或 `clawd` 的服务记录 = 确认发现,在端口扫描前添加。
### 阶段 1 — TCP 连接
通过 `nc -z -w 1` 快速过滤关闭的端口。
### 阶段 2 — HTTP/HTTPS 探测 (功能 5+6)
带 3s 超时的 `curl`。依次尝试 `http://` 和 `://`。确认条件:主体包含 `openclaw|clawd|gateway` 关键词,或在主要目标端口上返回 HTTP 400/401/403。
### 阶段 3 — 协议层确认 (A1)
通过 `/dev/tcp` 进行 WebSocket 升级:
```
GET / HTTP/1.1
Upgrade: websocket
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
```
有效的 OpenClaw 网关会接受 WS 升级 (HTTP 101)。检测置信度:**约 99%**。
### 阶段 4 — Canvas 路径探测 (A2)
`GET /__openclaw__/canvas/` 和 `GET /__openclaw__/a2ui/`。这些路径是 OpenClaw 独有的。任何非 404 的 HTTP 响应 = 几乎确定的确认。
### 阶段 5 — `/agent/status` 情报 (A3)
`GET /agent/status?session=agent:main:main`。如果端点存活,则提取:
- 使用中的模型(例如 `anthropic/claude-opus-4-6`)
- 上下文使用百分比
- 活动工具调用计数
- 子代理计数
- 网关运行时间戳
## Harvest 模块 (v3.0.2)
集成的后渗透模块可直接从 **Results Browser** 中针对已确认的 OpenClaw 发现触发。无需调用单独的工具。
### 它的功能
针对已确认目标的三阶段收集:
| 阶段 | 名称 | 功能 |
|-------|------|--------------|
| 1 | **认证探测** | WebSocket 连接尝试 — 将目标分类为 OPEN, TOKEN_GATED, 或 UNREACHABLE |
| 2 | **HTTP 收集** | 探测 `/__openclaw__/canvas/`, `/__openclaw__/a2ui/`, `/agent/status`, 和 `/` — 记录状态码、头信息和主体内容 |
| 3 | **Agent 利用** | 仅限 OPEN 门户 — 通过 WebSocket 发送 15 条 agent 命令以窃取环境变量、内存、SSH 密钥、凭据、配置文件和系统信息 |
### 要求
Pager 上必须安装 Python3:
```
opkg install -d mmc python3
```
harvest.py 仅使用 stdlib — 无需 pip,无需第三方包。
### 如何触发
1. 运行 CLAWHunter 直到确认的 OpenClaw 实例出现在 Results Browser 中
2. 使用 **UP/DOWN** 导航至目标
3. 按 **RIGHT**(或除 UP/DOWN/B/LEFT 以外的任意键)启动 harvest
harvest 期间的显示:
```
Find 1/1 ← green
192.168.4.100 ← green
port: 18790 ← blue
http:// | HTTP 401 | ...
UP/DOWN=nav B=done >=harvest
```
### 它收集的内容
**在 OPEN 门户上(无需 token):**
- 完整环境转储 (`env | sort`) — 包括 `ANTHROPIC_API_KEY` 和其他机密
- `~/clawd/MEMORY.md`, `USER.md`, `SOUL.md`, `IDENTITY.md` — 角色设定和知识文件
- `~/.openclaw/secrets.json` — 所有网关凭据
- `~/.openclaw/credentials/` — 所有凭据 JSON 文件
- `~/.ssh/id_rsa`, `id_ed25519`, `id_ecdsa` — SSH 私钥
- `~/.openclaw/.env` 和 `openclaw.json` — 配置和机密
- `~/clawd/HEARTBEAT.md`, `TOOLS.md` — 运行上下文
- `whoami`, `id`, `hostname`, `uname -a` — 系统身份
- 主目录列表
**在 TOKEN_GATED 门户上:**
- 仅 HTTP 收集(canvas, a2ui, agent/status, 根路径)
- 没有有效 token 则不进行 agent 利用
### 日志位置
```
/root/loot/clawhunter/harvest__.log
```
### 退出代码
| 代码 | 含义 |
|------|---------|
| 0 | 收集完成 — 已收集 agent 数据 |
| 1 | Token 限制 — 仅 HTTP 收集,无 agent 访问权限 |
| 2 | 不可达 — 目标已离线 |
| 3 | 错误 — 意外失败(请检查日志) |
## 显示行为
**扫描期间:**
```
✦ CLAWHunter v3.0.0 ← blue
OpenClaw Discovery Suite
mDNS monitoring (30s)... ← cyan (C1 countdown)
mDNS: 25s remaining...
Checking ARP cache... ← blue (C2)
Cache: 3 host(s) pre-known
Discovering hosts... ← blue
Live hosts: 47
12% — 192.168.4.6 (6/47) ← blue
✦ FOUND: 192.168.4.100:18790 (http) ← green
HTTP 401 — token-gated gateway
Model: claude-opus-4-6 | Ctx: 44% ← (A3 intel)
```
**配置选择器:**
```
Profile: FAST ← green
Parallel probes (3 at a time)
UP/DOWN=change B=confirm
```
**Watchdog 休眠:**
```
Watchdog: next scan in 240s ← magenta LED pulsing
B to exit watchdog
```
## LED 状态
| 状态 | 模式 | 颜色 |
|-------|---------|-------|
| 扫描中 | 慢脉冲 (600ms / 400ms) | 蓝色 |
| 候选端口开放 | 交替 250ms | 蓝 ↔ 绿 |
| 已确认 OpenClaw | 快速闪烁 (120ms) | 绿色 |
| mDNS 命中 | 青色双闪(前 2 颗 LED) | 青色 |
| 被动 mDNS 监控 | 慢脉冲 (800ms / 600ms) | 青色 |
| WiFi 连接中 | 慢脉冲 (500ms / 300ms) | 白色 |
| Watchdog 休眠 | 慢脉冲 (1000ms / 800ms) | 洋红色 |
| 错误 / 中止 | 常亮 5s | 红色 |
| 完成 — 有发现 | 慢脉冲 (700ms / 500ms) | 绿色 |
| 完成 — 无发现 | 慢脉冲 (700ms / 500ms) | 蓝色 |
| 退出中 | 关闭 | — |
## 端口参考
| 端口 | 描述 |
|------|-------------|
| `18790` | OpenClaw 网关默认端口(agent 端口) |
| `18789` | OpenClaw 控制平面(WebSocket 探测目标) |
| `18780–18800` | 宽范围(非默认配置) |
| `80, 443` | 常见反向代理端口 |
| `3000, 8080, 8443` | 常见开发/备用代理端口 |
## 日志输出
### 文本日志 (`.log`) — 保留 v2.1.0 格式
```
/root/loot/clawhunter/scan_YYYYMMDD_HHMMSS.log
/root/loot/clawhunter/alert_YYYYMMDD_HHMMSS.log ← alert variant
```
示例:
```
==================================================
CLAWHunter v3.0.0 — OpenClaw Discovery
Hak5 WiFi Pineapple Pager
==================================================
Scan ID : 20260307_143512
Date/Time : Sat Mar 7 14:35:12 UTC 2026
Scanner IP : 192.168.4.150
Subnet : 192.168.4.1-254
Port(s) : 18790
Wide range : NO
Extended ports : NO
Randomized : NO
Silent mode : NO
Scan profile : NORMAL
MAC randomized : YES
ARP available : YES
avahi available: YES
==================================================
── mDNS MONITOR (30s) ──
[MDNS] 192.168.4.100 via mDNS | record: ...
── PORT SCAN ──
[14:35:42] C2: ARP cache harvest: 3 host(s)
[14:35:44] Probing: 192.168.4.100 (12/47, 25%)
[FOUND] 192.168.4.100:18790 | http | HTTP 401 | HTTP 401 — token-gated gateway
[14:35:44] A1: WebSocket upgrade accepted — protocol-layer confirmed
[14:35:44] A2: canvas path HTTP 200 — OpenClaw-unique path confirmed
[14:35:45] A3: model=anthropic/claude-opus-4-6 ctx=44.5% tools=2 subagents=1
[14:35:45] Detail: Version: 2026.3.2 | Persona: Undertow | Model: anthropic/claude-opus-4-6 | Ctx: 44.5%
── DIFF vs PREVIOUS SCANS ──
New instances : 1
Gone instances: 0
==================================================
SUMMARY
Hosts scanned : 47
OpenClaw found : 1
Elapsed : 95s
Status : COMPLETE
DISCOVERED INSTANCES:
✦ 192.168.4.100:18790
==================================================
Log : /root/loot/clawhunter/scan_20260307_143512.log
JSON: /root/loot/clawhunter/scan_20260307_143512.json
==================================================
```
### JSON 报告 (`.json`) — v3.0.0 新增 (D1)
```
{
"scan_id": "20260307_143512",
"payload_version": "3.0.0",
"subnet": "192.168.4.1-254",
"hosts_scanned": 47,
"elapsed_seconds": 95,
"timestamp": "2026-03-07T14:37:47Z",
"instances": [
{
"ip": "192.168.4.100",
"port": "18790",
"detail": "http:// | HTTP 401 — token-gated gateway | Version: 2026.3.2 | Persona: Undertow | Model: anthropic/claude-opus-4-6 | Ctx: 44.5% | Canvas: confirmed | WS: confirmed",
"fingerprint": {
"version": "2026.3.2",
"persona": "Undertow",
"model": "anthropic/claude-opus-4-6",
"context_percent": "44.5%",
"canvas_confirmed": true,
"websocket_confirmed": true
}
}
]
}
```
## 许可证
MIT — 详见 [LICENSE](LICENSE)
标签:AI网关, C2日志可视化, Hak5, OpenClaw, WebSocket, WiFi Pineapple, 依赖分析, 侧信道检测, 密码管理, 局域网扫描, 应用安全, 指纹识别, 插件系统, 时间抖动, 物联网安全, 硬件植入, 网络安全, 规避检测, 隐私保护