Niks2801/subenumx

GitHub: Niks2801/subenumx

SubEnumX 是一款基于 Python 的被动子域名枚举工具,支持 DNS 解析、HTTP 探测和同主机页面爬取,帮助安全人员在渗透测试前期快速梳理目标资产。

Stars: 0 | Forks: 0

## SubEnumX (子域名 + 页面枚举器) SubEnumX 是一个小型的网络安全/OSINT 风格**子域名枚举器**,并附带针对每个发现子域名的可选**页面 (URL) 爬虫**。 ## 什么是域名 / 子域名枚举? 在 Web 安全中,“目标”通常不是单个网页——而是一个**完整的域名生态系统**。 - **Domain (域名)**:诸如 `example.com` 的根名称。 - **Subdomain (子域名)**:该域名下的主机名,例如 `api.example.com`、`mail.example.com`、`dev.example.com`。 ### 为什么枚举在网络安全中很重要 子域名枚举是侦察 中的核心步骤,因为: - **攻击面发现**:组织通常在不同的子域名下托管多个应用程序(客户门户、管理门户、API、测试环境)。 - **错误配置检测**:被遗忘的测试站点、过时的应用程序、调试端点或暴露的管理面板通常存在于子域名上。 - **资产清单**:安全团队需要一份面向公众的资产列表以进行监控和保护。 ### 被动与主动枚举(重要概念) 主要有两种方法: - **Passive enumeration (被动枚举)**:从公共数据集 (OSINT) 收集子域名,无需暴力破解 DNS。 示例:证书透明度日志、被动 DNS 数据库、公共索引。 - **Active enumeration (主动枚举)**:生成猜测(字典)并查询 DNS 以查看哪些存在(暴力破解)。 这噪音更大且更有可能被封锁;也更容易跨越道德底线。 **SubEnumX 专注于被动枚举**(尽最大努力),然后可选择进行轻度验证(DNS 解析、HTTP 探测)和页面爬取。 ## SubEnumX 的功能(流水线) SubEnumX 分清晰的阶段运行: 1. **被动子域名收集 (OSINT)** 查询多个公共来源并合并结果。(不同来源可能宕机或受限,因此我们使用多个来源。) 2. **DNS 验证(可选)** 使用 `--resolve` 使用 DNS 记录查找检查每个子域名是否实际解析: - A (IPv4) - AAAA (IPv6) - CNAME (别名) 3. **HTTP 探测(可选)** 使用 `--probe` 对于每个主机,尝试: - `https:///` - 然后 `http:///` 记录状态码(如 200/301/403)以及重定向后的最终 URL。 4. **页面枚举 / 爬取(可选)** 使用 `--crawl` 对于每个存活主机,爬虫获取 HTML 页面并提取保留在**同一主机**上的内部链接(``)。 它是**深度受限**(`--depth`)和**页面数量受限**(`--max-pages`)的,因此不会无限运行。 5. **报告生成与产物保存** - `-o output.txt` 保存一个完整的报告文件 - `--out-dir results_name` 保存多个文件(推荐用于提交) ## 使用的技术栈(及原因) - **语言**:Python 3 选择它是因为它在安全工具中很常见,原型制作快,且易于在演示中运行。 - **HTTP 客户端**:`requests` 用于可靠的 GET 请求(OSINT 来源、探测、爬取)。 - **HTML 解析**:`beautifulsoup4` 用于安全地解析 HTML 并提取链接以进行页面枚举。 - **DNS**:`dnspython` 当启用 `--resolve` 时,用于 DNS 记录查找 (A / AAAA / CNAME)。 - **并发**:`concurrent.futures.ThreadPoolExecutor` 用于加速 DNS/探测/爬取,并避免单个缓慢的 OSINT 来源阻塞所有操作。 ## 安装 ``` cd subenumx python3 -m venv .venv source .venv/bin/activate pip install -r requirements.txt ``` ### 使用方法 基本子域名枚举(仅被动 OSINT): ``` python -m subenumx -d example.com ``` DNS 解析 + HTTP 探测: ``` python -m subenumx -d example.com --resolve --probe ``` 同时爬取页面(同主机)至深度 1: ``` python -m subenumx -d example.com --resolve --probe --crawl --depth 1 --max-pages 50 ``` 将输出保存到文本文件: ``` python -m subenumx -d example.com --resolve --probe --crawl -o output.txt ``` 将**所有产物**保存到文件夹中(推荐用于提交): ``` python -m subenumx -d example.com --resolve --probe --crawl --out-dir results_example ``` 如果来源缓慢/受限,增加超时时间: ``` python -m subenumx -d example.com --timeout 30 --crt-retries 4 ``` ## 输出文件(使用 `--out-dir` 时) `--out-dir results_example` 会写入: - `results_example/report.txt`(完整报告) - `results_example/subdomains.txt` - `results_example/resolved.txt` - `results_example/probed.txt` - `results_example/pages.txt` ## 如何在评估中展示(建议的演示流程) 使用您拥有的域名(最好)或安全的演示域名,如 `example.com`。 1. 运行被动枚举: ``` python -m subenumx -d example.com ``` 2. 展示 DNS + HTTP 验证: ``` python -m subenumx -d example.com --resolve --probe ``` 3. 保存所有内容用于报告: ``` python -m subenumx -d example.com --resolve --probe --crawl --out-dir results_example ``` 然后打开 `results_example/report.txt` 并解释每个部分。 ## 注意事项、局限性和道德使用 - **OSINT 来源可能失败**:公共端点可能受到速率限制、被您的网络阻止或暂时宕机。SubEnumX 会打印每个来源的计数,以便您查看哪些来源有效。 - **不是暴力破解器**:此工具不进行主动字典暴力破解;它有意更安全/噪音更小,适合演示。 - **爬取是保守的**: - 仅限同主机(不会爬取整个互联网) - 深度受限 + 最大页面数上限 - 仅跟随 HTML `` 中找到的链接 - **结果并非“地球上所有的子域名”**:没有工具能保证完全覆盖。侦察在于结合多种方法并验证结果。 ## 项目结构(代码概述) - `subenumx/cli.py`:参数解析 + 调度 - `subenumx/sources.py`:被动子域名来源 (OSINT) - `subenumx/crawl.py`:简单的同主机爬虫 - `subenumx/util.py`:URL 辅助工具、DNS 解析、探测辅助工具、格式化
标签:CDN识别, DNS枚举, DNS查询, ESC4, GitHub, OSINT, Python, Snort++, SYN扫描, URL爬虫, 域名解析, 子域名枚举, 无后门, 漏洞挖掘辅助, 系统安全, 网络安全, 网络安全工具, 被动扫描, 证书透明日志, 资产测绘, 隐私保护