mhzabet/watch

GitHub: mhzabet/watch

watchrecon 是一个以 PostgreSQL 为后端的持续子域名枚举与服务发现守护进程,整合多个 ProjectDiscovery 工具实现自动化资产监控与差异告警。

Stars: 0 | Forks: 0

# watchrecon `watchrecon` 是一个以 PostgreSQL 为后端的 CLI 和守护进程,用于持续的、已授权的资产发现。每个目标都有独立的扫描历史记录、稳定的 artifact 文件、首次/最后发现时间戳、来源归属以及 Discord 差异警报。 ## Pipeline 1. 从公共 `crt.sh` PostgreSQL 服务、Chaos 以及 `subfinder -all` 枚举名称。 2. 规范化并强制执行配置的根域边界。 3. 使用 `dnsx` 解析 A 记录。 4. 使用 `dnsx -ptr` 对发现的 IP 进行反向解析。 5. 使用内置的 Nuclei SSL 模板提取证书 SAN/CN 名称。 6. 再次解析新获取的范围内名称。 7. 使用 `cdncheck` 分类 CDN 范围;分类失败的结果将保持为 `unknown`,绝不会将其误标为 origin。 8. 使用 `httpx` 发现 HTTP 服务,包括配置的 `User-Agent` 和 `Referer` 标头。 9. 持久化资产和观测结果,发布每个目标的专属文件,并仅针对数据库中的新增资产发出警报。 相关的证书名称不会被扫描。只需设置 `pipeline.allow_related_hostnames: true` 即可将它们存储为仅用于发现的观测结果。 ## 环境要求 - Go 1.26+ - PostgreSQL 14+ - `psql` - `chaos` - `subfinder` - `dnsx` - `cdncheck` - `nuclei` - `httpx` 可以使用以下命令安装 ProjectDiscovery 工具: ``` go install github.com/projectdiscovery/chaos-client/cmd/chaos@latest go install github.com/projectdiscovery/subfinder/v2/cmd/subfinder@latest go install github.com/projectdiscovery/dnsx/cmd/dnsx@latest go install github.com/projectdiscovery/cdncheck/cmd/cdncheck@latest go install github.com/projectdiscovery/nuclei/v3/cmd/nuclei@latest go install github.com/projectdiscovery/httpx/cmd/httpx@latest ``` ## 本地设置 启动 PostgreSQL: ``` docker compose up -d export WATCHRECON_DATABASE_URL='postgres://watchrecon:watchrecon-dev@127.0.0.1:5432/watchrecon?sslmode=disable' export CHAOS_KEY='your-projectdiscovery-key' export DISCORD_WEBHOOK_URL='your-discord-webhook' ``` 构建并初始化: ``` make build ./bin/watchrecon init-db ./bin/watchrecon doctor ``` 添加并运行目标: ``` ./bin/watchrecon target add \ --name example \ --domain example.com \ --schedule '0 */6 * * *' ./bin/watchrecon run --target example ./bin/watchrecon daemon ``` 首次完成的扫描属于基准扫描,默认情况下不会发出警报。如果需要发送初始资产清单,请设置 `discord.notify_on_baseline: true`。 ## 命令 ``` watchrecon init-db watchrecon doctor watchrecon target add --name NAME --domain DOMAIN [--schedule CRON] watchrecon target list watchrecon target schedule --name NAME --schedule CRON watchrecon target enable|disable|delete --name NAME watchrecon run --target NAME watchrecon run --all watchrecon daemon [--run-now] ``` Cron 计划任务使用五个字段,并支持诸如 `@daily` 和 `@every 30m` 这样的描述符。守护进程在启动时会加载目标计划;在更改目标或计划后请重启守护进程。 ## Artifacts 每次扫描的结果都保留在以下位置: ``` data//runs/-/ ``` 最新的稳定文件使用目标名称: ``` data//-subdomains.txt data//-a-records.jsonl data//-non-cdn-ips.txt data//-cdn-ips.txt data//-unknown-ips.txt data//-httpx.jsonl data//-latest-manifest.json ``` 每个外部工具的原始 stdout 和 stderr 保留在不可变的运行目录中,以供调试。 ## 服务器部署 请使用专用的服务账户和 PostgreSQL 角色。构建二进制文件,将其安装在 `/usr/local/bin/watchrecon`,将仓库资产放置在 `/opt/watchrecon` 下,并使用: - `deploy/watchrecon.service` 作为 systemd unit - `deploy/watchrecon.env.example` 作为环境文件模板 - `/etc/watchrecon/config.yaml` 包含: ``` paths: data_dir: /var/lib/watchrecon nuclei_ssl_template: /opt/watchrecon/templates/ssl-dns-names.yaml ``` 该 unit 设置了 `HOME=/var/lib/watchrecon`,以便 ProjectDiscovery 工具可以在 systemd 主目录保护保持启用的情况下创建其用户专属配置文件。 然后初始化数据库一次并启用守护进程: ``` sudo -u watchrecon /usr/local/bin/watchrecon \ --config /etc/watchrecon/config.yaml init-db sudo systemctl enable --now watchrecon journalctl -u watchrecon -f ``` 仅针对您获得授权评估的域名和基础设施运行扫描。
标签:EVTX分析, GitHub, Go, Ruby工具, 子域名枚举, 日志审计, 测试用例, 系统安全, 自动化侦察, 请求拦截