tahovig/poc-osint

GitHub: tahovig/poc-osint

一款Python自动化子域名侦察CLI工具,通过证书透明度日志枚举、并发存活性检查和安全头分析来映射组织外部攻击面,并支持跨时间扫描结果的差异比对。

Stars: 0 | Forks: 0

# poc-osint — 自动化企业资产足迹与子域名侦察工具 [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/ad/ad5834178f7599af9fdda11629d49cae07f2997beec49821b2920eff5bfd50e7.svg)](https://github.com/tahovig/poc-osint/actions/workflows/ci.yml) 一个 Python CLI 工具,可自动化针对目标域名的初始侦察:收集公开的子域名,验证活跃的主机,并提取开源元数据(server/CMS 指纹、缺失的 security headers)。它模拟了威胁情报分析师或渗透测试人员的工作流程,用于映射组织的外部攻击面,并发现被遗忘或恶意的影子 IT 资产。 这是支持从软件工程向网络安全工程转型的系列作品集项目中的第一个。 ## 状态 端到端功能完整:被动子域名枚举 → 并发存活性检查 → header 分析,并输出结构化数据。请参阅 `CLAUDE.md` 获取完整的设计说明和历史记录。 ## 仅限授权使用 除了被动查询外,该工具还会执行主动检查(对发现的主机发送 HTTP 请求)。请仅针对你拥有或明确授权测试的域名运行此工具(例如,范围内的漏洞赏金/VDP 目标)。严禁在未经许可的情况下将其指向任何目标。该工具将目标作为显式参数接收——不附带或使用任何默认目标列表。 ## 工作原理 1. **子域名枚举** — 通过 [crt.sh](https://crt.sh) 查询目标域名的证书透明度日志。仅包含被动的公开数据。由于已知的 crt.sh HTTP 前端不稳定或容易触发限流,因此内置了带有退避机制的重试功能;如果仍然失败,会回退到直接查询 crt.sh 自身的公共只读 Postgres 数据库(数据相同,但传输方式不同且更可靠),而不是在 crt.sh 网站出现状况的第一次就直接报错。 2. **存活性检查** — 在 80/443 端口上并发对每个发现的子域名执行 HEAD 检查。并发数和单次请求延迟均可配置,专门用于避免对目标发起过于频繁的请求。 3. **Header 分析** — 对于存活的主机,检查固定的 security-header 清单(`Content-Security-Policy`、`Strict-Transport-Security`、`X-Frame-Options`、`X-Content-Type-Options`、`Referrer-Policy`),并标记一系列已知的 `Server`/`X-Powered-By` 签名(Apache、nginx、IIS、PHP、ASP.NET、Express、Cloudflare)。 ## 安装说明 ``` cd code python3 -m venv poc-osint-venv poc-osint-venv/bin/pip install -e ".[dev]" ``` ## 用法 ``` poc-osint-venv/bin/poc-osint lookup example.com ``` 示例输出(针对 `example.com` 的真实运行) — CSP/HSTS/XFO/XCTO/RP 列是 security-header 清单,`✓`/`✗`/`-`(不适用,主机已宕机): ``` HOST | PORT | LIVE | STATUS | SERVER | CSP | HSTS | XFO | XCTO | RP | FINGERPRINT ---------------------+------+------+--------+------------+-----+------+-----+------+----+------------ dev.example.com | 80 | no | - | - | - | - | - | - | - | - dev.example.com | 443 | no | - | - | - | - | - | - | - | - example.com | 80 | yes | 200 | cloudflare | ✗ | ✗ | ✗ | ✗ | ✗ | Cloudflare example.com | 443 | yes | 200 | cloudflare | ✗ | ✗ | ✗ | ✗ | ✗ | Cloudflare www.example.com | 80 | yes | 200 | cloudflare | ✗ | ✗ | ✗ | ✗ | ✗ | Cloudflare www.example.com | 443 | yes | 200 | cloudflare | ✗ | ✗ | ✗ | ✗ | ✗ | Cloudflare ``` Flags: - `--max-concurrency N` — 最大同时进行的存活性检查数量(默认:10) - `--delay SECONDS` — 每次存活性检查前的延迟时间,用于进一步降低请求速率(默认:0.0) - `--json` — 输出 JSON 格式以代替上述表格 - `--save PATH` — 同时将结果以 JSON 格式保存到 PATH(无论是否使用 `--json`),以便后续执行 `compare` ### 随时间比较扫描结果 保存两个时间点的扫描结果,然后对它们进行差异比对 — 展示新出现/消失的子域名、存活/宕机状态的变化,以及新的 header/指纹发现。这是该工具对“自上次扫描以来,我们的攻击面发生了什么变化”这一问题的解答,旨在直接服务于发现被遗忘/恶意的影子 IT 资产: ``` poc-osint-venv/bin/poc-osint lookup example.com --save scans/2026-01-01.json poc-osint-venv/bin/poc-osint lookup example.com --save scans/2026-02-01.json poc-osint-venv/bin/poc-osint compare scans/2026-01-01.json scans/2026-02-01.json ``` ``` + ADDED www.example.com:80 + ADDED www.example.com:443 - REMOVED legacy.example.com:80 ~ CHANGED example.com:443 missing headers: 0 -> 5 ``` `--json` 同样适用于 `compare`,方便将其通过管道传递给其他工具。 ## 测试 ``` cd code poc-osint-venv/bin/pytest # unit tests -- fast, no network, no Docker poc-osint-venv/bin/pytest -m integration # integration tests against local Docker fixtures (needs dockerd running) ``` ## 仓库结构 - `code/` — 应用源码 (`src/poc_osint/`)、测试 (`tests/unit/`、`tests/integration/`)、Docker 测试夹具 (`tests/fixtures/`) - `resources/` — 辅助/参考资料(非代码) ## 技术栈 Python(`httpx`、`asyncpg`、asyncio),pytest + respx 用于测试,Docker 用于本地测试夹具,GitHub Actions 用于 CI。请参阅 `CLAUDE.md` 获取完整的设计说明和基本原理。
标签:ESC4, GitHub, OSINT, Python, 子域名枚举, 安全规则引擎, 实时处理, 密码管理, 无后门, 系统安全, 计算机取证, 请求拦截, 资产测绘, 运行时操纵, 逆向工具