John0n1/CamSniff

GitHub: John0n1/CamSniff

这是一款专注于 IP 摄像头和网络视频设备的自动化侦察工具包,提供从设备发现、指纹识别到快照捕获的一站式解决方案。

Stars: 90 | Forks: 13

# CamSniff
[![最近提交](https://img.shields.io/github/last-commit/John0n1/CamSniff?style=flat-square\&logo=github\&color=red)](https://github.com/John0n1/CamSniff/commits/main) [![Shell](https://img.shields.io/badge/language-bash-black?logo=gnubash\&style=flat-square)](#) [![Python](https://img.shields.io/badge/language-python-black?logo=python\&style=flat-square)](#) [![许可证: MIT](https://img.shields.io/badge/License-MIT-yellow.svg?style=flat-square)](LICENSE) **当前版本:** `2.2.3` · CamSniff logo
# 目录 1. [概述](#overview) 2. [为什么选择 CamSniff?](#why-camsniff) 3. [功能矩阵](#feature-matrix) 4. [架构与流程](#architecture--flow) 5. [项目布局](#project-layout) 6. [扫描模式](#scanning-modes) 7. [安装与快速开始](#install--quick-start) 8. [命令行示例](#command-line-examples) 9. [输出格式与产物](#output-format--artifacts) 10. [发现与画像逻辑(简述)](#discovery--profiling-logic-short) 11. [凭据探测行为](#credential-probing-behavior) 12. [配置与扩展字典](#configuration--extending-dictionaries) 13. [分析助手与 IVRE 集成](#analysis-helper--ivre-integration) 14. [依赖项](#dependencies) 15. [故障排除与技巧](#troubleshooting--tips) 16. [加固、道德与负责任的使用](#hardening-ethics--responsible-use) 17. [贡献与路线图](#contributing--roadmap) 18. [许可证](#license) # 概述 **CamSniff** 是一个模块化侦察工具包,专注于在*本地网络*上发现、画像 IP 摄像头和网络视频源,并伺机获取快照/流。它融合了主动扫描(Nmap,可选 Masscan)、被动发现(Avahi/mDNS/SSDP)、短时流量采样(TShark)、HTTP/ONVIF Banner 抓取,以及供应商模板(`data/catalog/paths.csv`),以产生结构化、可复现的结果。 关键设计点: * 模式感知:可在 **stealth** → **nuke** 之间调节,以权衡噪音与覆盖范围 * 多协议:RTSP, ONVIF, HLS, WebRTC, SRT, RTMP, CoAP 探测等 * 输出:结构化 JSON(`discovery.json`, `credentials.json`)+ 缩略图与日志 * 离线友好:无需外部查询 —— 供应商情报位于 `data/` 中 # 为什么选择 CamSniff? * 减少重复的手动侦察:一条命令即可生成一致、可审计的数据集。 * 模板化的供应商情报加速了可能快照/RTSP 端点的发现。 * 可调节的凭据探测使操作可追溯,并受所选模式限制。 * 旨在与 IVRE 集成,构建持久、可查询的侦察数据库。 # 功能矩阵 | 区域 | 亮点 | | ------------------- | ---------------------------------------------------------------------------------- | | 发现 | Nmap TCP/UDP 扫描, NSE RTSP 暴力破解, 可选 Masscan + SSDP 广播扫描 | | 目标指定| 自动检测本地网络或使用 `--targets` 从 JSON/文本文件加载 | | 被动 | Avahi/mDNS & SSDP 过滤摄像头/服务关键词; HTTP Banner 收集 | | 流量采样 | 针对性 TShark 捕获以提取观察到的 URI | | 协议 | ONVIF (含设备信息), RTSP, HLS, WebRTC/STUN, RTMP, SRT, CoAP `/.well-known/core` | | 供应商画像 | `data/catalog/paths.csv` 映射 OUI/启发式规则 → RTSP/HTTP 模板 + CVEs | | 凭据策略 | 模式限制的精选用户名/密码列表,默认组合 | | 获取 | ffmpeg RTSP 抓取, HTTP 快照请求, 可选 ASCII 预览 (chafa) | | 输出 | `discovery.json`, `credentials.json`, 缩略图, HTTP/ONVIF/SSDP 元数据日志 | | 额外功能 | IVRE 同步脚本, 扫描后分析脚本, 丰富器 | # 架构与流程(简述) 1. 通过 `scripts/core/mode-config.sh` 决定模式(时间、广度、凭据上限)。 2. 主动扫描:Nmap(脚本化 RTSP 暴力破解 NSE);可选 Masscan 合并端口。 3. 被动发现:SSDP 广播扫描 + Avahi/mDNS 查找摄像头/服务关键词。 4. 流量采样:对观察到的主机进行 TShark 捕获以查找候选 URI。 5. UDP 微扫描用于 STUN/WS-Discovery/SRT 指示符。 6. CoAP 探测 `/.well-known/core` 以查找受限设备。 7. HTTP 元数据 & ONVIF 设备信息拉取,用于 Banner/Realm 关联。 8. 使用 `data/catalog/paths.csv` 进行供应商匹配 → 生成候选 RTSP/HTTP 模板。 9. 组装 `discovery.json` 并运行凭据/媒体获取阶段。 10. 可选,使用 `--extra ivre` 推送到 IVRE。 # 项目布局 * `scripts/camsniff.sh` — 每个扫描阶段的启动器/编排器。 * `scripts/core/` — 模式/端口配置逻辑及其他共享调节参数。 * `scripts/setup/` — 依赖/引导助手(libcoap 构建,包安装)。 * `scripts/probes/` — SSDP, ONVIF, 凭据探测及相关主动模块。 * `scripts/helpers/` — 用于目录丰富、HTTP 解析、RTSP 摘要的 Python 工具。 * `scripts/integrations/` — IVRE 同步和管理工具。 * `scripts/tools/` — 分析/报告助手。 * `scripts/ui/` — Banner 和终端渲染助手。 * `data/catalog/` — 供应商模板 + CVEs。 * `data/dictionaries/` — 凭据,HTTP/RTSP 字典。 * `data/examples/` — 示例目标列表。 * `data/protocols/` — NSE RTSP 暴力破解脚本和协议资产。 # 扫描模式(摘要) 每种模式调整端口配置、时间、Masscan 使用、NSE 广度和最大凭据尝试次数。 | 模式 | Masscan | Nmap 速度 | 凭据 (最大) | TShark (秒) | 用例 | | -----------: | :-----: | :------------------: | :---------: | :--------: | ----------------------- | | `stealth+` | 否 | -T1 | 8 | 15 | 最低噪音,最慢 | | `stealth` | 否 | -T2 | 12 | 20 | 安静的本地扫描 | | `medium` | 是 | -T4 | 32 | 35 | 默认平衡 | | `aggressive` | 是 | -T4 -A | 64 | 45 | 更多脚本/版本探测 | | `war` | 是 | -T5 -A | 96 | 55 | 广泛的供应商覆盖 | | `nuke` | 是 | -T5 -A --script vuln | 128 | 75 | 全端口扫描 (1–65535) | 默认:`--mode medium`。示例:`sudo camsniff --mode stealth`。 # 安装与快速开始 ## A — 从 Release 安装(Debian 包) ``` # 下载最新 .deb 版本 sudo apt install ./camsniff_*amd64.deb # 运行 sudo camsniff --mode medium ``` ## B — 从源码安装(开发者 / 实时编辑) ``` git clone https://github.com/John0n1/CamSniff.git cd CamSniff chmod +x scripts/*.sh data/*.sh sudo scripts/camsniff.sh # first run bootstraps dependencies if needed ``` # 命令行示例 ``` # 快速平衡扫描(默认强度) sudo camsniff --mode medium # 静默扫描(低占用) sudo camsniff --mode stealth+ # 激进模式,包含 IVRE 摄取 sudo camsniff --mode aggressive --extra ivre # 跳过确认(非交互式) sudo camsniff --yes # 固定输出位置并标记运行 sudo camsniff --output-root /mnt/scan-results --run-name office # 强制指定 tshark 的捕获接口 sudo camsniff --interface eth0 # 跳过自动凭证探测 sudo camsniff --skip-credentials # 跳过依赖项安装(假定工具已存在) sudo camsniff --skip-install # 生成 markdown 或 HTML 报告 sudo camsniff --report markdown sudo camsniff --report html # 智能目标整形与置信度排名 sudo camsniff --smart --smart-min 35 --smart-max 60 # 使用设备描述丰富 SSDP 结果 sudo camsniff --ssdp-describe # 加密结果(自动选择 age/gpg) sudo camsniff --encrypt-results --encrypt-recipient "age1example..." # 强制使用密钥 ID 进行 gpg 加密 sudo camsniff --encrypt-results gpg --encrypt-recipient "KEYID" # 从 JSON 文件扫描指定 IP 范围 sudo camsniff --mode medium --targets /path/to/targets.json # 从文本文件扫描指定 IP 范围 sudo camsniff --mode war --targets /path/to/targets.txt # 显示帮助 / 版本 sudo camsniff --help sudo camsniff --version ``` # 输出格式与产物 所有运行输出默认位于 `dev/results//`: 您可以使用 `--output-root` 覆盖基础目录,并使用 `--run-name` 追加标签。 示例:`/mnt/scan-results/20250101T000000Z-office/`。 报告以 `report.md` 或 `report.html` 形式写入每次运行的目录中。 当启用 `--encrypt-results` 时,会创建一个加密的 `.tar.gz.age` 或 `.tar.gz.gpg` 存档 与运行目录并存(明文仍保留在磁盘上)。 若要无提示进行 GPG 对称加密,请设置 `CAM_ENCRYPT_PASSPHRASE`。 * `discovery.json` — 包含丰富元数据 + 置信度评分的规范主机数据集 * `credentials.json` — 每台主机的凭据尝试与成功记录 * `thumbnails/` — 成功抓取的 JPEG 快照(按运行组织) * `logs/` — 原始阶段日志(`nmap-output.txt`, `masscan-output.json`, `avahi-services.txt`, `tshark-traffic.csv`, `coap-probe.log`, `http-metadata.jsonl`, `ssdp-discovery.jsonl`, `onvif-discovery.jsonl`) * `analysis/` — 来自 `scripts/tools/analyze.sh` 的可选汇总统计 `discovery.json` 快照示例(已修剪): ``` { "ip": "192.168.1.42", "mac": "AA:BB:CC:DD:EE:FF", "sources": ["Nmap","TShark","Avahi"], "ports": [80,554,8443], "observed_paths": ["/onvif/device_service", "rtsp://..."], "profile_match":{ "vendor":"VendorX", "model":"ModelY", "matched_by":"oui", "rtsp_candidates":[...], "http_snapshot_candidates":[...], "cve_ids":["CVE-2024-XXXX"] }, "confidence": { "score": 78, "level": "high", "classification": "camera", "reasons": ["rtsp url discovered", "onvif detected"] } } ``` # 发现与画像逻辑(简述) * **观察到的证据**:Nmap + TShark + Avahi 合并到主机记录中。 * **启发式规则**:端口指纹、OUI 正则、观察到的 HTTP/RTSP URI、ONVIF/SSDP/HTTP Banner。 * **供应商模板**:`data/catalog/paths.csv` 包含 OUI 及端口启发式规则 → RTSP/HTTP 模板 + CVEs。 * **丰富化**:小型 Python 后处理器对候选进行排名并注释 `discovery.json`。 * **智能定位**:`--smart` 利用早期信号优先进行更深层探测并打印置信度排名。 * **SSDP 描述**:`--ssdp-describe` 获取设备描述以增强指纹。 # 凭据探测行为 `scripts/credential-probe.sh` 使用: 1. 供应商默认组合(来自 `data/catalog/paths.csv`)+ 空白/空密码检查。 2. 精选的、受模式限制的用户名/密码对列表(`data/dictionaries/usernames.txt`, `data/dictionaries/passwords.txt`)。 3. 枚举的 RTSP 路径(画像 + 暴力破解 + 从 TShark 观察)。 4. HTTP 快照模板端点(`data/dictionaries/http-paths.txt`)。 成功的尝试记录:凭据对、使用的端点、缩略图路径、时间戳。**凭据以纯 JSON 格式存储** —— 请将其视为敏感材料并相应地保护结果目录。 # 目标文件格式 CamSniff 可以使用 `--targets` 标志从外部文件摄取 IP 地址和 CIDR 范围。这允许预定义目标列表并与其他侦察工具集成。 ## JSON 格式 ``` { "targets": [ "192.168.1.0/24", "10.0.0.1", "172.16.0.0/28" ] } ``` JSON 文件必须包含一个 `targets` 数组,其中包含作为字符串的 IP 地址和/或 CIDR 范围。 ## 文本格式 ``` # 以 # 开头的注释行将被忽略 192.168.1.0/24 10.0.0.1 # 另一个网络 172.16.0.0/28 ``` 文本文件支持每行一个 IP 地址或 CIDR 范围。空行和以 `#` 开头的行将被忽略。空白将自动修剪。 ## 使用示例 ``` # 从 JSON 文件扫描目标 sudo camsniff --mode medium --targets /path/to/targets.json # 从文本文件扫描目标 sudo camsniff --mode war --targets /path/to/targets.txt # 使用附带的示例文件 sudo camsniff --mode medium --targets data/examples/example-targets.json ``` `data/` 目录中提供了示例目标文件: - `data/examples/example-targets.json` — JSON 格式示例 - `data/examples/example-targets.txt` — 文本格式示例 使用 `--targets` 时,脚本将绕过自动网络检测并仅扫描指定的目标。 # 配置与扩展字典 所有字典位于 `data/` 且可编辑: * `catalog/paths.csv` — 供应商 OUI 正则 → 默认凭据, RTSP/HTTP 模板, CVE IDs * `dictionaries/rtsp-urls.txt` — 扩展 NSE 的 RTSP 暴力破解字典 * `dictionaries/http-paths.txt` — 后备 HTTP 快照端点(模板化) * `dictionaries/usernames.txt` / `dictionaries/passwords.txt` — 精选凭据列表(忽略注释) * `vendors//http-paths.txt` — 特定供应商的 HTTP 快照模板 * `vendors//rtsp-paths.txt` — 特定供应商的 RTSP 模板 * `core/port-profiles.sh` — 每种扫描模式使用的逻辑命名端口集 编辑后,下次运行将使用更新后的文件。保持添加内容简洁、可验证且有文档记录(理想情况下每个供应商一行)。 供应商字典格式: - HTTP: `template|port|channel|stream|label` - RTSP: `template|port|channel|stream|transport|label` 模板可包含 `{{ip_address}}`, `{{username}}`, `{{password}}`, `port}}`, `{{channel}}`, 和 `{{stream}}` 占位符。 # 分析助手与 IVRE 集成 * `scripts/tools/analyze.sh` — 打印主机数量、供应商多样性、RTSP 发现量、凭据成功率。 * `scripts/integrations/ivre-manager.sh` — 可选地引导带有 IVRE + pymongo 的 Python venv 并将丰富后的主机推送到 IVRE(使用 `--extra ivre`)。 # 依赖项 核心运行时(尽可能自动安装): * nmap, masscan (可选), tshark (wireshark/tshark), avahi-utils, ffmpeg, curl, jq, python3 (+ venv), chafa (可选, 用于 ASCII 预览), libpcap. * libcoap / `coap-client` 的构建工具(`git`, `cmake`, `build-essential`, `pkg-config`) — 脚本 `scripts/setup/build-coap.sh` 将在缺失时尝试构建。 # 故障排除与技巧 * **`discovery.json` 为空** — 检查接口、ARP 可见性,运行非隐蔽模式进行测试。 * **Masscan 被跳过** — 确保 `--mode` 允许(例如 `medium`+)。 * **无缩略图** — 检查 `ffmpeg` 可用性及 `dev/results//logs/` 中的每主机日志。 * **ONVIF 假阴性** — SSL/证书重定向或非标准端口可能隐藏端点 — 针对可疑端点手动尝试 `curl -k`。 * **CoAP 探测失败** — 通过 `scripts/setup/build-coap.sh` 构建 `coap-client`,检查 `logs/coap-probe.log`。 * **性能** — 如果 `nuke` 耗时过长,请使用 `medium` 或自定义端口配置。 环境开关: * `NO_ANIM=1` — 跳过 ASCII/介绍动画(在 CI 中有用)。 * `CAM_MODE_PORT_PROFILE` — 以编程方式覆盖端口配置(高级)。 # 加固、道德与负责任的使用 * **授权** — 切勿在未经明确书面许可的情况下对网络/设备使用 CamSniff。 * **数据保护** — 捕获的图像、设备元数据和凭据属于敏感信息 —— 加密并限制访问。 * **最小影响** — 发现阶段从 `stealth` 模式开始,仅在获得授权时升级。 * **CVE 数据** — 视为建议;需要手动验证和安全披露实践。 * **避免不受控制的凭据喷洒** — 凭据尝试受模式限制;尊重目标运营稳定性。 # 路线图(简述) * Web 仪表板:实时 JSON + 缩略图。 * 实时马赛克/时间线捕获模式。 * 加密凭据存储与基于角色的访问。 * 可插拔导出器:Markdown/HTML 摘要报告。 * 更多协议签名(MQTT, SIP, 更多专有 API)。 有功能想法?请开一个 Issue 描述用例。 # 许可证 MIT — 见 [LICENSE](LICENSE)。 © 2025 John Hauger Mitander. 作者不对滥用负责。请践行合乎道德的安全研究。
标签:Bash, CTI, IP摄像头, Kali工具, ONVIF协议, Python, RTSP协议, Shodan替代, SOC, 加密文件系统, 安防监控, 应用安全, 插件系统, 数据统计, 无后门, 物联网安全, 端口扫描, 红队评估, 网络安全审计, 网络视频流, 足迹分析, 逆向工具