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内核, 区域传送, 子域名挖掘, 无后门, 白帽子, 网络安全, 网络安全工具, 逆向工具, 隐私保护, 黑客教程