jenishs524/Subdomain-Enumeration
GitHub: jenishs524/Subdomain-Enumeration
结合暴力破解、被动 DNS 和排列变异的多层子域名发现工具,用于渗透测试侦察阶段自动化映射目标攻击面。
Stars: 0 | Forks: 0
# 子域名枚举
📘 子域名枚举工具
这是一款高级侦察和攻击面映射工具,能够系统地发现与目标域相关的子域名。子域名枚举是渗透测试和漏洞赏金挖掘中的关键阶段,因为它通常会暴露被遗忘、未修补或处于开发阶段的系统,而这些系统往往比主域更容易受到攻击。该工具结合了暴力破解、被动 DNS 和第三方情报来自动化发现过程,从而提供组织外部数字足迹的全面视图。
🎯 目标
自动化发现属于目标域的子域名。手动发现子域名——使用搜索引擎、DNS 暴力破解和公开数据集——既耗时又往往不完整。该工具将多种发现技术整合到一个单一、高效的 pipeline 中,使安全专业人员能够:
```
Uncover hidden assets (e.g., dev.internal.company.com, staging.api.target.com).
Identify exposed admin panels, test environments, and forgotten services that may be vulnerable.
Map the attack surface of an organisation before launching further penetration testing activities.
Enrich intelligence for threat hunting and continuous security monitoring.
```
🧠 工作原理 – 技术概述
该工具采用多层方法来最大化子域名发现:
1. 暴力破解解析(主动发现)
使用精心整理的常见子域名(例如 www、mail、ftp、admin、api、dev、test、staging、dashboard、remote、git、jenkins、jira、confluence、nexus、sonar)wordlist。
对于每个子域名,该工具使用高性能的 DNS 解析器执行 DNS A 记录查询(IPv4)。
如果查询返回有效的 IP 地址,则确认该子域名处于活动状态并将其记录下来。
这种方法速度快,对于发现标准命名约定非常有效。
2. 被动 DNS 与 OSINT 集成(被动发现)
(可选)查询公开的 DNS 数据集(例如 SecurityTrails、VirusTotal、Censys 或本地历史 DNS 数据库),以发现过去曾观察到但目前可能无法解析的子域名。
被动 DNS 来源汇集了来自全球解析器的历史 DNS 记录,提供了一个丰富的子域名库,这些子域名可能已下线或被移动——这对于发现遗留的攻击面非常有价值。
3. 排列与变更(高级发现)
使用现实世界命名约定中观察到的常见模式,生成已知子域名的排列组合(例如 www → www1、www2、www-dev、www-test)。
这可以捕捉到标准 wordlist 可能会遗漏的细微变体。
4. 并行执行
利用多线程或异步 I/O 同时执行数百或数千次 DNS 查询,从而大幅缩短扫描时间。
对大型 wordlist(10,000+ 个条目)的全量扫描可以在几分钟内完成,而不是几小时。
✨ 高级功能(实战升级)
功能 实现
多源整合 结合暴力破解、被动 DNS(SecurityTrails、VirusTotal)和排列攻击,实现最大覆盖率。
大型 Wordlist 支持 支持数万个条目的 wordlist(包括来自现实世界子域名集合的泄露,如 SecLists 的 subdomains.txt)。
通配符检测 自动检测并忽略通配符 DNS 条目(例如 *.target.com 返回相同的 IP),防止误报。
实时验证 对发现的子域名执行 HTTP/HTTPS 探测,以验证它们是否正在积极托管 Web 服务,从而减少因过期 DNS 记录导致的误报。
Banner 抓取 (可选)获取 HTTP 响应头(Server、X-Powered-By)以指纹识别底层技术(例如 Apache、Nginx、Tomcat),用于进一步的漏洞评估。
多种格式导出 将结果保存为纯文本(.txt)、JSON(.json)或 CSV,促进与其他工具(nmap、nuclei、eyewitness)的集成。
进度跟踪与恢复 保存中间结果,以便在扫描中断时能够恢复,这对于极其庞大的目标域非常有用。
递归发现 (可选)探测已发现的子域名以寻找额外的次级子域名(例如 api.dev.target.com → v1.api.dev.target.com)。
威胁情报丰富化 将发现的子域名与已知的威胁情报源进行交叉比对,以识别它们是否与已知的恶意软件/网络钓鱼活动相关联。
🛠️ 工具与技术
```
Python 3 – core logic, threading, and asynchronous DNS resolution.
dnspython – robust DNS query library for reliable A, AAAA, CNAME lookups.
requests – for passive DNS API calls (SecurityTrails, VirusTotal) and optional HTTP probes.
threading / asyncio – for high‑performance parallel scanning.
Public Wordlists – curated from SecLists, Assassins‑Subdomain‑Discovery, and common‑names lists.
JSON / CSV – for structured output.
```
🔬 测试与用例
场景:
一名渗透测试人员受雇对 example.com 进行评估。客户担心被遗忘的开发系统暴露了内部数据。
过程:
```
Run the enumeration tool against example.com:
bash
```
python3 recon_pipeline.py example.com --wordlist subdomains.txt --passive --threads 50
```
Discovery phase:
Brute‑force discovers: www.example.com (93.184.216.34), mail.example.com (93.184.216.35), admin.example.com (203.0.113.5).
Passive DNS (SecurityTrails) reveals: old-dev.example.com (198.51.100.10), staging-api.example.com (198.51.100.20).
Permutation engine finds: www2.example.com (93.184.216.36).
Validation:
HTTP probe on admin.example.com returns a 200 OK with an X-Powered-By: PHP/5.6.40 header – an outdated and potentially vulnerable PHP version.
staging-api.example.com responds with a 404, indicating the host is still resolvable but likely taken down – however, its existence reveals the organisation's naming pattern.
```
结果:
```
The tester prioritises: admin.example.com (high potential due to outdated PHP), staging-api.example.com (could be a back‑end API with weak security).
The client receives a complete list of exposed subdomains, enabling them to:
Decommission or secure admin.example.com.
Review staging-api.example.com access controls.
Implement a consistent subdomain naming policy to avoid leakage of internal naming conventions.
```
这展示了子域名枚举如何将一个简单的域名转化为组织面向互联网资产的详细映射,从而为所有后续的渗透测试活动奠定基础。
📁 输出示例(JSON 结构)
一个典型的结果文件(JSON)包含一系列已发现的子域名及其相关元数据:
```
Subdomain – The full subdomain (e.g., api.target.com).
IP Address – The resolved IPv4 address (if available).
Discovery Source – bruteforce, passive, or permutation.
HTTP Status – (Optional) Status code from HTTP probe (200, 403, 404, etc.).
Server Header – (Optional) The server software identified (e.g., nginx/1.18.0).
Response Time – Time to resolve and/or respond, useful for performance analysis.
```
📝 结论
子域名枚举工具是任何侦察或渗透测试工作流程中不可或缺的资产。它可以自动化发现隐藏的、遗忘的或配置错误的子域名,这些子域名可能代表了组织安全态势中最薄弱的环节。通过结合主动暴力破解、被动 DNS 情报和智能排列技术,它提供了比任何单一方法都更全面的视图。在测试期间,它成功发现了通过标准 DNS 无法解析的子域名(揭示了遗留系统和开发 endpoint),突显了分层枚举的重要性。该工具使安全团队能够了解其外部攻击面并主动修复暴露问题,使其成为现代安全运营的基础能力。
标签:DNS解析, ESC4, GitHub, OSINT, 子域名枚举, 实时处理, 开源项目, 攻击面测绘, 服务器安全, 系统安全