inject3r/subdomain-finder

GitHub: inject3r/subdomain-finder

一款集成八种子域名发现技术的安全枚举工具,支持交互式控制和状态恢复,用于渗透测试中的目标资产收集。

Stars: 0 | Forks: 0

# 子域名查找器 专业的子域名枚举工具,具备 8 种强大的发现技术、实时进度跟踪、交互式暂停/恢复以及自动状态持久化。 ## 功能 - **8 种发现技术**: - HTML/响应抓取与链接提取 - DNS ANY 查询与区域传送尝试 - 证书透明度日志 (crt.sh) - Wayback Machine 历史数据 - 公共 DNS 数据集 (BufferOver) - 已发现子域名的智能排列组合 - 数字模式检测 - 使用自定义字典的字典爆破 - **交互式控制**: - 使用 Ctrl+C 暂停/恢复 - 跳过当前操作 - 结束检测阶段 - 动态调整详细级别 - 保存状态并强制退出 (按 3 次 Ctrl+C) - **专业功能**: - 使用 atomhttp 的异步 HTTP 请求 - 随机 User-Agent 轮换 - 使用线程池进行 DNS 解析 - 速率限制和重试逻辑 - 用于恢复的完整状态持久化 - 带有文件组织的详细日志记录 - DNS 记录提取和记录 - 子域名验证和分类 ## 安装说明 ``` git clone https://github.com/inject3r/subdomain-finder.git cd subdomain-finder pip install -r requirements.txt ``` ### 前置条件 - Python 3.8 或更高版本 - atomhttp 1.0.1 或更高版本 - beautifulsoup4 4.12.0 或更高版本 - dnspython 2.4.0 或更高版本 - colorama 0.4.6 或更高版本 - build 1.0.0 或更高版本 - twine 4.0.0 或更高版本 ## 用法 ### 基本用法 ``` subdomain.py -d example.com ``` ### 高级选项 ``` subdomain.py -d example.com -t 100 --max-pages 100 --random-agent ``` ### 恢复中断的扫描 ``` subdomain.py -d example.com --resume ``` ### 命令行参数 | 参数 | 描述 | 默认值 | | -------------- | ------------------------------------ | -------- | | -d, --domain | 目标域名(必填) | - | | -t, --threads | 用于 DNS 解析的线程数 | 50 | | -w, --wordlist | 自定义字典文件路径 | list.txt | | --timeout | DNS 超时时间(秒) | 5 | | --resume | 从之前的扫描状态恢复 | False | | --max-pages | 最大抓取页数 | 50 | | --random-agent | 为 HTTP 请求使用随机 User-Agent | False | ## 交互式控制 当使用 Ctrl+C 暂停工具时,将出现以下菜单: | 命令 | 操作 | | ----------- | ------------------------------------ | | S / SKIP | 跳过当前操作并移至下一步 | | E / END | 完全停止当前检测阶段 | | N / NEXT | 跳至下一个技术 | | C / CHANGE | 更改输出详细级别 | | R / RESUME | 恢复当前操作 | | Q / QUIT | 保存状态并退出 | ### 强制退出 在 5 秒内按三次 Ctrl+C 可保存状态并立即强制退出。 ## 输出结构 所有结果均保存在 `logs/` 目录中: ``` logs/ └── example.com/ ├── result.txt # Discovered subdomains with IPs ├── details.json # Complete JSON report ├── state.pkl # Serialized state for resume ├── raw_output.log # Raw log with timestamps ├── crawled_urls.txt # All crawled URLs └── dns_records.txt # All DNS records found ``` ### 结果格式 ``` subdomain.example.com -> 192.168.1.1, 192.168.1.2 [technique] mail.example.com -> 10.0.0.1 [crt.sh] api.example.com -> 203.0.113.5 [bruteforce] ``` ## 发现技术详解 ### 1. HTML 爬虫 从 HTML 响应、JavaScript 代码、JSON 数据和链接属性中提取子域名。抓取至指定深度,并通过 DNS 查找验证发现的结果。 ### 2. DNS ANY 查询 执行 ANY 记录查询以提取所有 DNS 记录,包括 A、AAAA、CNAME、MX、NS、TXT、SOA,并尝试从权威域名服务器进行区域传送。 ### 3. 证书透明度 查询 crt.sh 证书日志,以查找已签发 SSL/TLS 证书的子域名。 ### 4. Wayback Machine 从 Internet Archive 获取历史 URL,以发现旧的或已弃用的子域名。 ### 5. 公共 DNS 数据集 查询如 BufferOver 等公共 DNS 数据集以获取历史 DNS 记录。 ### 6. 智能排列组合 根据已发现的子域名生成智能排列组合(例如:dev-www、api-admin)。 ### 7. 数字模式 测试常见的数字模式,如 ns1、ns2、server01、node02 等。 ### 8. 字典爆破 使用字典文件中的子域名进行测试,支持可配置的线程池和速率限制。 ## 字典 如果未提供字典,该工具会自动创建一个默认字典: ``` www, mail, ftp, admin, blog, dev, test, api, cdn, vpn, ns1, ns2, smtp, pop3, imap, webmail, cpanel, whm, mysql, database, backup, storage, cloud, app, apps, portal, dashboard, status, stats, monitor, monitoring, logs, metrics, trace, jenkins, gitlab, github, jira, confluence, wiki, docs, support, help, forum, community, news, shop, store, checkout, payment, gateway, billing ``` 你可以使用 `-w` 参数提供自己的字典。 ## 详细级别 | 级别 | 输出 | | ---- | -------------------------------------- | | 0 | 仅结果(静默模式) | | 1 | 基本进度信息 | | 2 | 带调试的详细输出(默认) | 在扫描期间使用 Ctrl+C 然后选择选项 C 来更改详细级别。 ## 日志 所有操作均记录到 `logs//` 目录中: - **result.txt**:包含 IP 地址的已发现子域名清晰列表 - **details.json**:包含时间戳和元数据的完整结构化数据 - **state.pkl**:用于恢复功能的序列化状态对象 - **raw_output.log**:带有时间戳的所有活动日志 - **crawled_urls.txt**:已抓取 URL 的完整列表 - **dns_records.txt**:在 ANY 查询期间发现的所有 DNS 记录 ## 错误处理 该工具能够妥善处理各种错误情况: - DNS 超时 - 自动重试最多 2 次 - 网络错误 - 记录日志并继续 - HTTP 错误 - 跳过有问题的 URL - 键盘中断 - 保存状态并干净地退出 ## 法律免责声明 本工具仅供教育和授权测试目的使用。未经事先双方同意而攻击目标是违法的。用户对任何滥用或损坏承担所有责任。在扫描您不拥有的任何域名之前,请务必获得适当的授权。 ## 许可证 MIT License ## 贡献 欢迎各种贡献。请在 GitHub 上提交 pull request 或开启 issue。
标签:Python, 异步编程, 无后门, 网络安全, 进程管理, 逆向工具, 隐私保护