mk2514k/DNS-Recon-Tool

GitHub: mk2514k/DNS-Recon-Tool

一款结合 AXFR 区域传送与字典暴力破解的 DNS 侦察工具,用于枚举域名记录并发现子域名。

Stars: 0 | Forks: 0

# DNS 侦察工具 **工具:** Python 3, `dnspython` **环境:** 日常使用设备 - Fedora Linux, Niri 合成器 **属于:** 安全工具集项目,与 CompTIA Network+ 学习同步构建 ## 这是什么 当我第一次对一个故意配置错误的测试域名运行 AXFR 区域传送,并看着 35 条 DNS 记录——子域名、内部主机名等所有信息——通过单个请求就被倾倒在终端上时,我立刻明白了为什么这是一项如此经典的侦察技术。AXFR 是一项合法的 DNS 功能,旨在同步域名自身 nameserver 之间的记录,但如果服务器配置错误允许任何人查询,它就会在收到请求时直接交出整个区域文件。此工具将其与基于字典的子域名暴力破解结合在一起,因此在一个脚本中同时涵盖了“礼貌询问并看看服务器是否会把一切都告诉你”的方法,以及“不断猜测直到有解析结果”的方法。 ## 它的功能 大多数域名底下绝不仅仅是 `www` —— `mail`、`vpn`、`staging`、`internal` 等大量记录都很常见。此工具通过两种方式找到它们: - **AXFR 区域传送**- 向域名的 nameserver 请求其记录的完整副本。如果服务器配置足够糟糕允许了该请求,只需一次请求就能获得域名的完整映射。 - **暴力破解**- 获取一个包含常见子域名的字典,构建每一个域名(`mail.example.com`、`vpn.example.com` 等),并向其发送 DNS 查询。任何能解析的记录都是真实存在的。 这两种 DNS 查找都通过线程并发运行,一次最多 50 个——而不是在开始下一个查询之前等待每一个查询完成。 ``` pip install dnspython ``` 你还需要一个子域名字典,我使用了 [SecLists](https://github.com/danielmiessler/SecLists/tree/master/Discovery/DNS) 中的 `subdomains-top1million-5000.txt`,由于文件太大无法直接包含在仓库中,因此需要单独下载。 ## 我是如何构建它的 我首先构建了 AXFR 尝试,因为它是这两种技术中较简单的一种——查询域名的 NS 记录以找到其 nameserver,然后向每一个请求区域传送,看看是否有服务器真正允许它。接下来是暴力破解部分,结合了 `ThreadPoolExecutor`,这样几十个子域名猜测可以同时运行,而不是串行执行——如果每次请求一个子域名并加上真实的超时时间,5000 个单词的字典逐个进行将耗时太长,不切实际。 针对 `zonetransfer.me`(一个特意配置为允许 AXFR 的域名,专门用于测试此类工具)的测试返回了完整的区域转储——包括 `vpn`、`staging`、`internal`、`cmdexec` 和 `owa` 等子域名在内的 35 条记录。针对同一域名的暴力破解过程返回了零命中,因为字典猜测根本与实际使用的子域名不匹配。这个结果并不是 bug——这正是将两种技术结合到一个工具中的意义所在:区域传送在可用时拥有压倒性的强大能力,而暴力破解则是不可用时的后备手段。 ## 我从中收获了什么 零命中的暴力破解结果比一次完美的成功教会了我更多。它直接证明了为什么 AXFR 配置错误在 2026 年仍然被视为真正的漏洞发现,而不是二十年前淘汰的产物。允许区域传送的服务器只需一次请求就会交出一切;而不允许的服务器则迫使攻击者陷入缓慢且不完整的猜测中。正是这种差距说明了为什么这是外部侦察期间最值得优先检查的事项之一,而且从攻击者的角度来看,这种发现确实非常有趣,而不仅仅是扫描报告上的一个勾选框。 ## 此仓库中的文件 | 文件 | 是什么 | |------|-----------| | `Subdomain_finder.py` | 主脚本 | | `bruteforce_only.txt` | 仅暴力破解运行 — 无 AXFR,20 个线程,找到 8 个子域名 | | `more_threads.txt` | 50 个线程的完整运行 — AXFR + 暴力破解 | | `bruteforce_axfr.txt` | 标准运行输出 | | `subdomains-top1million-5000.txt` | 使用的字典(从 SecLists 下载 — 见上文) |
标签:DNS枚举, Python, 无后门, 特征匹配, 网络安全工具