0x3xplt1/DNS-AXFR_SubdomainEnumerator
GitHub: 0x3xplt1/DNS-AXFR_SubdomainEnumerator
基于dnspython实现的DNS区域传送(AXFR)子域名枚举命令行工具,用于从配置不当的权威DNS服务器批量获取域内所有子域名记录。
Stars: 0 | Forks: 0
# DNS 区域传送 (AXFR) 子域名枚举器
AXFR 子域名枚举器 —— 源自 Hack The Box Academy 上“使用 Python 进行 DNS 枚举”的小项目。
这是一个教育用途的命令行工具,用于尝试对一个或多个权威名称服务器执行 DNS 区域传送 (AXFR),从区域中枚举所有者名称,将其转换为 FQDN,去重,并打印带有总计的排序列表。
请仅在经授权的环境中使用(实验室、您自己的域,或已获得明确许可)。
## 目录
- 概述
- 功能
- 工作原理
- 环境要求
- 安装
- 用法
- 输出
- 示例
- 技巧与最佳实践
- 故障排除
- 常见问题
- 贡献
- 许可证
- 免责声明
## 概述
区域传送 (AXFR) 在名称服务器之间复制整个 DNS 区域。如果对不受信任的客户端启用,它们可能会大规模泄露子域名。此工具自动化了以下步骤:
- 尝试对一个或多个名称服务器执行 AXFR
- 从区域中收集所有者名称
- 将其转换为 FQDN
- 去重并打印带有唯一计数总量的排序结果
注意:大多数生产环境的名称服务器会正确拒绝 AXFR。成功的传送通常意味着实验室环境或配置错误。
## 功能
- 尝试针对每个提供的名称服务器进行 AXFR,失败时继续执行。
- 跳过区域顶点 “@”,因此不计算裸域。
- 使用集合(set)对结果去重,以实现确定性输出。
- 排序输出并附带最终唯一计数。
- 简单、明确的 CLI 标志。
- 包含版本标志以便快速验证。
## 工作原理
1. 您提供:
- 目标域(区域)
- 逗号分隔的名称服务器列表(主机名或 IP)
2. 该工具尝试通过 TCP/53 从每个名称服务器进行全区域传送 (AXFR)。
3. 对于成功的传送,它会遍历区域所有者名称,过滤掉 “@”,构建 FQDN,并将它们聚合到一个唯一集合中。
4. 打印排序列表和总计数。
## 环境要求
- Python 3.8 或更新版本
- dnspython
## 安装
- 系统/全局:
- pip install dnspython
- 每用户:
- pip install --user dnspython
- 特定 Python 版本:
- python3.10 -m pip install dnspython
可选:
- 创建虚拟环境:
- python3 -m venv .venv
- source .venv/bin/activate (Linux/macOS)
- .\.venv\Scripts\activate (Windows)
- pip install dnspython
- 赋予执行权限:
- chmod +x dns_axfr_enum.py
## 用法
基本语法:
- python3 dns_axfr_enum.py -d -n
或者:
- ./dns_axfr_enum.py -d -n
参数:
- -d Domain (必需)
- 目标区域(例如,example.com)
- -n Nameserver(s) (必需)
- 逗号分隔的权威名称服务器(主机名或 IP)
- 示例:ns1.example.com,ns2.example.com 或 192.0.2.53,198.51.100.12
- -v
- 打印版本并退出
## 输出
- 从名称服务器成功传送时:
- [*] Successful Zone Transfer from
- 最终结果:
- 发现的 FQDN 排序列表
- -------- Total unique subdomains:
- 如果所有传送失败或未产生条目:
- No subdomains found.
退出行为:
- 缺少必需标志会打印帮助信息并退出。
- 未发现结果会打印消息并退出。
## 示例
- 按主机名指定单个名称服务器:
- python3 dns_axfr_enum.py -d inlanefreight.htb -n ns1.inlanefreight.htb
- 多个名称服务器:
- python3 dns_axfr_enum.py -d example.com -n ns1.example.com,ns2.example.com
- 按 IP 指定名称服务器:
- python3 dns_axfr_enum.py -d example.com -n 192.0.2.53,198.51.100.12
## 技巧与最佳实践
- 确保名称服务器是目标域的权威服务器。
- 使用名称服务器的主机名需要您的系统 DNS 来解析它们。
- AXFR 使用 TCP/53;请确认连接性和防火墙规则。
- 如果您的环境中解析不稳定,请使用名称服务器的 IP 地址。
- 对于实验室,请验证 AXFR 是被有意启用的。
## 故障排除
- 传送被拒绝或未授权:
- 服务器禁止 AXFR。尝试其他权威服务器或验证实验室配置。
- 超时:
- 检查 TCP/53 的可达性、VPN 或防火墙规则。
- 显示“成功”但结果为空:
- 区域中除顶点外可能只有很少的标签,或者去重操作移除了重复项。
- 名称解析错误:
- 直接使用名称服务器 IP,或修复本地解析器配置。
### Hack The Box VPN 连接问题与验证
如果 AXFR 请求超时,或者拒绝连接到目标名称服务器,在 HTB 实验室中,请确保您的 VPN 已启动并且正在路由实验室流量。
- 通过 CLI 连接:
- sudo openvpn --config /path/to/your.ovpn
- 如果不稳定,请尝试不同的 .ovpn 配置文件(切换 VPN 服务器或切换 UDP/TCP)
- 有时如果您更换了 VPN 服务器,它就会工作。
- 通过 GUI 连接:
- 使用“OpenVPN Connect”应用程序导入/选择您的 .ovpn 配置文件
- 在 Kali Linux 上,为了确保最快的连接速度,请使用 cli 选项。
连接或切换后,请验证:
- 接口及分配的 HTB IP:
- Linux/macOS: ip addr | grep -E "tun|tap|wg|inet "
- Windows (PowerShell): Get-NetIPAddress | Where-Object {$_.InterfaceAlias -match 'TAP|TUN|WireGuard'}
- 抵达目标名称服务器:
- Linux/macOS: ping -c 4
- Windows: ping
- 检查到名称服务器的 TCP/53 连通性:
- Linux/macOS (netcat): nc -vz 53
- Bash 备用方案: timeout 3 bash -c '/53' && echo "open" || echo "closed"
- Windows (PowerShell): Test-NetConnection -Port 53
- 可选 AXFR 探测:
- dig AXFR @
- 示例:dig AXFR inlanefreight.htb @10.129.184.83
- 如果成功,您应该会看到一个子域名列表。
如果仍然失败:
- 确认 VPN 显示已连接并查看 OpenVPN 日志。
- 使用 Hack The Box 网页实例(浏览器内实验室)交叉检查同一目标
如果设置正确,您应该会看到一个子域名列表,而无需更改 /etc/hosts 文件。
## 许可证
MIT License
## 免责声明
仅供教育和授权测试使用。请负责任且合法地使用。作者和贡献者不对滥用或损害承担责任。
标签:AXFR, dnspython, DNS枚举, Hack The Box, Python, Windows内核, 区域传送, 子域名挖掘, 无后门, 白帽子, 网络安全, 网络安全工具, 逆向工具, 隐私保护, 黑客教程