Bluto 源码解析:DNS 侦察工具的模块化架构与核心实现原理
【免费下载链接】BlutoDNS Recon | Brute Forcer | DNS Zone Transfer | DNS Wild Card Checks | DNS Wild Card Brute Forcer | Email Enumeration | Staff Enumeration | Compromised Account Checking项目地址: https://gitcode.com/gh_mirrors/bl/Bluto
Bluto 是一款开源的DNS 侦察工具(DNS Recon Tool),它把子域名暴力枚举、DNS 区域传送(Zone Transfer)、通配符检测、邮箱枚举、员工信息收集与泄露账户核查等功能整合在一个命令行工具中。本文将从源码角度拆解 Bluto 的模块化架构,带新手看懂这套 DNS 侦察核心代码的实现原理,帮助你理解安全测试工具的设计思路。
⚠️ 提示:Bluto 基于 Python 2.7 开发,适合安全研究人员在授权范围内进行信息收集学习。
一、Bluto 是什么?核心功能一览
Bluto 的目标很简单:尽可能多地收集目标域名的信息。它的能力清单包括:
- 🔍DNS 侦察:查询 NS、MX 记录
- 🧨子域名暴力枚举:基于 Top 20000 子域名列表
- 🚨DNS 区域传送检测:判断 NS 是否配置错误
- 🌀通配符检测与绕过:识别
*.domain通配记录 - 📧邮箱枚举:Google / Bing / LinkedIn / EmailHunter
- 🔓泄露账户核查:对接 HaveIBeenPwned API
- 📄文档元数据挖掘:从公开文档提取用户名、软件版本
二、模块化架构总览:一目了然的代码组织
Bluto 的代码目录结构非常清晰,modules/目录下每个文件只负责一类职责,这是它最值得学习的架构设计:
| 文件 | 职责 |
|---|---|
bluto | 主入口,命令行解析与任务调度 |
Bluto/modules/get_dns.py | DNS 侦察核心:查询、枚举、区域传送 |
Bluto/modules/search.py | 搜索引擎与 API 信息收集 |
Bluto/modules/general.py | whois、国家识别、域名校验 |
Bluto/modules/get_file.py | 读取字典文件与 User-Agent 列表 |
Bluto/modules/output.py | 结果输出与 HTML 证据报告 |
Bluto/modules/data_mine.py | 文档元数据挖掘 |
Bluto/modules/bluto_logging.py | 本地日志记录 |
Bluto/modules/update.py | 版本更新检查 |
这种"一个模块一个职责"的拆分方式,让后续扩展新功能(如新增搜索引擎)时无需改动主流程。
三、主入口调度原理:多线程并行任务编排
打开主文件 bluto,你会看到 Bluto 的调度逻辑非常清晰。它先用 docopt 解析命令行参数(-d指定域名、-e使用大字典、-api填入 EmailHunter 密钥),然后依次执行:
- 域名合法性校验
- whois 查询获取公司名
- DNS 详情收集(NS / MX)
- NetCraft 被动子域名收集
- 区域传送漏洞检测
最巧妙的是,Bluto 用Python 多线程 + Queue 队列并行执行 Google、Bing、LinkedIn 搜索和文档挖掘任务,例如:
t1 = threading.Thread(target=action_google, args=(domain, userCountry, userServer, q1, user_agents, prox)) t2 = threading.Thread(target=action_bing_true, args=(domain, q2, user_agents, prox)) t3 = threading.Thread(target=action_linkedin, args=(domain, userCountry, q3, company, user_agents, prox))四个任务同时跑,各自把结果放进独立队列,最后统一汇总去重——这就是 Bluto 速度快的原因之一。
四、DNS 侦察核心代码:get_dns.py 深度拆解
get_dns.py 是整款工具的灵魂,实现了四个关键算法:
1. NS/MX 记录查询:侦察第一步
get_dns_details()使用 dnspython 库查询目标域名的 NS 和 MX 记录,并将每条记录解析出 IP 地址。它捕获了 5 种异常(NoNameservers、NoAnswer、NXDOMAIN、Timeout 等),保证单个查询失败不影响整个流程。
2. 通配符检测:随机域名探测法
action_wild_cards()的原理非常聪明:生成一个 15 位随机字符串(如A3K9X...),查询随机串.目标域名的 DNS 记录。如果返回 NXDOMAIN 说明没有通配符;如果返回了解析结果,说明该域名配置了*.domain通配记录,所有子域名都会解析到同一个 IP。
3. 子域名暴力枚举:8 线程并行爆破
action_brute_start()使用multiprocessing.dummy的 ThreadPool 开启 8 个线程,对字典中的每个子域名并发发起 DNS 查询,命中就记录子域名 IP的格式。
面对通配符时,action_brute_wild()会先生成 10 个随机子域名,收集所有通配返回的 IP 集合,再过滤掉解析到这些"假 IP"的枚举结果——实现通配符欺骗的自动绕过,这也是 Bluto 应对通配符场景的核心技巧。
4. DNS 区域传送检测:最危险的配置错误
action_zone_transfer()对每个 NS 服务器尝试 AXFR 请求。若dns.zone.from_xfr()成功,说明该 NS 存在区域传送漏洞,攻击者可获得整份 DNS 区域数据(所有主机记录)。源码中会 dump 全部记录并排序去重,输出为Raw Zone Dump。
五、被动信息收集:search.py 与情报聚合
search.py 实现了被动收集层:
- NetCraft 被动收集:爬取 searchdns.netcraft.com 的公开子域名记录
- Google / Bing 邮箱枚举:用
@"域名"语法搜索,正则提取邮箱 - LinkedIn 员工枚举:按公司名搜索员工信息
- EmailHunter API:传
-api参数可获得更多邮箱来源 - HaveIBeenPwned 核查:
action_pwned()对每个邮箱查询泄露记录
值得留意的是,所有请求都会从 user_agents.txt 中随机选取 User-Agent,并通过 countries.txt 匹配就近的 Google 服务器,降低被验证码拦截的概率。
六、结果输出与 HTML 证据报告
output.py 负责把分散的数据汇总为一份证据链:
- 去重合并所有邮箱与来源 URL
- 统计主机数、邮箱数、员工数、泄露账户数
- 调用
write_html()生成Bluto-Evidence-域名.html证据报告,包含邮箱证据表、LinkedIn 资料、泄露账户详情和元数据挖掘结果
七、上手体验与总结
想体验这套 DNS 侦察工具,可以克隆仓库后运行:
git clone https://gitcode.com/gh_mirrors/bl/BlutoBluto 的源码价值在于它演示了一条完整的被动 + 主动侦察流水线:先被动收集(NetCraft、搜索引擎),再主动验证(枚举、区域传送),最后交叉去重并输出证据报告。对安全初学者而言,读懂 get_dns.py 的通配符绕过算法和 bluto 的多线程调度,就等于掌握了 DNS 信息收集工具的核心设计思想。💡
📌 提醒:DNS 侦察与枚举工具请务必仅用于自己拥有或已获授权的目标,合法合规地使用技术能力。
【免费下载链接】BlutoDNS Recon | Brute Forcer | DNS Zone Transfer | DNS Wild Card Checks | DNS Wild Card Brute Forcer | Email Enumeration | Staff Enumeration | Compromised Account Checking项目地址: https://gitcode.com/gh_mirrors/bl/Bluto
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考