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工具, 子域名枚举, 日志审计, 测试用例, 系统安全, 自动化侦察, 请求拦截