第4章 阶段3主动探测本篇定位子域名挖掘流程的第三阶段。被动发现用公开数据覆盖了 60-80% 的子域但剩下 20-40% 的盲区——内部子域、未收录子域、新上线子域、非标准命名的子域——被动方法覆盖不到。主动探测就是向目标的 DNS 服务器发查询敲门发现这些子域。阅读建议如果你做过 DNS 爆破可以跳到 4.3 排列扫描看变体生成方法。如果是新手按顺序读——4.1 到 4.3 风险递增、方法递进前面的概念是后面的基础。4.0 方法论框架主动探测在全局流程里的位置阶段2被动发现子域名列表60-80% 覆盖 ──→ 【阶段3主动探测】 ──→ 阶段4进阶发现 │ ├── DNS 字典爆破 ├── DNS 域传送AXFR └── DNS 排列扫描什么是主动探测主动探测Active Probing指的是直接向目标的 DNS 服务器发送查询请求根据响应判断子域名是否存在。整个过程中你的 IP 会出现在目标 DNS 服务器的查询日志里——目标知道有人在查。为什么在被动后面原因说明被动有盲区内部子域、未收录、新上线——被动方法覆盖不到风险后置被动零风险先跑主动有风险后跑互补被动覆盖大头主动补盲区——两者结合覆盖率最高主动探测的本质主动探测是在三个维度之间做权衡维度含义矛盾覆盖率能发现多少子域覆盖率高 → 字典大、查询多速度多快跑完速度快 → 并发高 → 触发限速隐蔽性目标发现你的概率隐蔽性高 → 并发低、限速严 → 速度慢关键认知主动探测没有既要又要——高覆盖率意味着大量查询大量查询意味着高并发高并发意味着容易被发现。你能做的是在三个维度之间找到适合当前目标的平衡点。三个方法概览主动探测DNS 字典爆破字典选择查询方式并发与限速多级爆破DNS 域传送识别权威 DNS发送 AXFR解析 Zone 文件DNS 排列扫描提取词根生成变体查询验证主动探测的风险主动探测和被动发现的根本区别主动探测接触目标。风险类型说明被检测目标 DNS 服务器记录你的 IP 和查询模式被封禁高并发查询触发限速IP 被临时或永久封禁被限速查询被降速处理返回空结果假阴性法律风险未授权的主动探测可能触犯法律风险管理在 4.4 节单独讲踩坑案例在第8章。4.1 DNS 字典爆破前置知识暴力枚举Brute Force暴力枚举是一种穷举策略——不依赖猜测或线索把所有可能的候选值逐个尝试。在子域名挖掘里暴力枚举的具体形式是字典爆破把字典里的每个前缀拼到根域名上逐个查 DNS看哪个存在。DNS 查询基础回顾基础知识02讲过 DNS 解析流程——你输入dev.example.comDNS 服务器返回这个域名是否存在、对应的 IP 是什么。主动探测就是利用这个机制——你主动构造大量子域名查询从 DNS 服务器的响应里判断哪些子域存在。DNS 响应码语义每次 DNS 查询服务器会返回一个响应码RCODE告诉你查询结果的状态。和子域名挖掘相关的有三个响应码名称含义判断NOERROR无错误域名存在有解析记录子域可能存在NXDOMAIN域名不存在域名在 DNS 里没有记录子域不存在SERVFAIL服务器失败DNS 服务器处理出错或被限速不确定要重试关键认知NOERROR 不等于子域一定存在。通配符 DNS基础知识04讲过会让所有子域都返回 NOERROR——即使你查的子域根本不存在。判断通配符是阶段5 DNS 清洗的工作这里只管查询→收响应码。ANY 查询基础知识04讲过 DNS 记录类型A、CNAME、MX 等。常规查询是查一种记录如只查 A 记录。ANY 查询是查所有记录——一次请求拿到 A、CNAME、MX、TXT 等所有记录。理论上 ANY 查询效率高但实际上很多 DNS 服务器对 ANY 查询做了限制或返回不全。是什么用字典里的前缀拼到根域名上如devexample.comdev.example.com逐个向 DNS 服务器查询根据响应码判断子域是否存在。为什么字典爆破能覆盖被动方法的盲区被动盲区字典爆破怎么补内部子域字典里有internal、dev、test等常见内部命名未收录子域不依赖搜索引擎收录直接查 DNS新上线子域主动探测是实时的不等收录非标准命名部分能通过定制字典覆盖剩下的靠排列扫描怎么做第一步字典选择回顾阶段1第2章准备的字典。字典爆破的命中率取决于字典质量字典类型特点命中率通用高频字典常见子域名词汇中等——大家都用目标也都知道通用全量字典收录了大量词汇低——大量无效查询定制字典基于目标业务特征定制高——目标特有命名第二步查询方式查询方式查什么特点A 记录查询域名→IPv4 地址最常用响应快AAAA 记录查询域名→IPv6 地址补充 IPv6 子域CNAME 记录查询域名→别名暴露 CDN、第三方服务ANY 查询所有记录理论上一次拿全实际常被限第三步并发与限速回顾阶段1准备的环境配置参数。字典爆破是批量查询并发和限速直接决定能不能跑完参数作用参考值并发数同时发多少个查询50-200QPS每秒查询数10-50超时单次查询等待时间3-5 秒重试超时后重试次数2-3 次Jitter查询间随机延迟50-200ms第四步多级爆破层级示例字典策略二级子域dev.example.com通用字典 定制字典三级子域api.dev.example.com基于已发现的dev.example.com用小字典爆破四级子域v2.api.dev.example.com通常不爆破靠网页爬取技巧技巧做法价值分层爆破先跑二级子域拿结果后再跑三级避免对不存在的二级子域跑三级浪费查询高频词优先字典按词频排序高频词先跑前面就能拿到大部分命中后面是长尾自适应并发遇到超时增多时自动降并发防止被限速后继续打导致封禁重试策略NXDOMAIN 不重试SERVFAIL 重试NXDOMAIN 是确定答案SERVFAIL 是不确定注意事项事项说明通配符 DNS 干扰通配符 DNS 会让所有子域返回 NOERROR——爆破前要先检测通配符DNS 限速/封禁高并发查询会被 DNS 服务器限速或封禁 IP假阴性被限速后返回空结果你以为没这个子域其实是被限了字典过时旧字典收录了已不常见的词汇浪费时间4.2 DNS 域传送AXFR前置知识Zone 文件基础知识04讲过 Zone区域的概念——Zone 是 DNS 服务器管辖的一段域名空间。Zone 文件Zone File是记录这个 Zone 里所有 DNS 数据的文本文件。一个 Zone 文件长这样$ORIGIN example.com. ; 这个 Zone 管理的域名 $TTL 3600 ; 默认缓存时间秒 ; SOA 记录Zone 的元信息 IN SOA ns1.example.com. admin.example.com. ( 2026100401 ; 序列号 3600 ; 刷新时间 1800 ; 重试时间 604800 ; 过期时间 86400 ; 最小 TTL ) ; NS 记录这个 Zone 的权威服务器 IN NS ns1.example.com. IN NS ns2.example.com. ; A 记录域名→IPv4 IN A 1.2.3.4 www IN A 1.2.3.4 api IN A 1.2.3.5 dev IN A 10.0.0.5 ; CNAME 记录别名 blog IN CNAME example.github.io.Zone 文件里的每一行就是一条 DNS 记录。如果一个 Zone 里有 200 个子域Zone 文件就有 200 条记录——拿到 Zone 文件等于拿到全量子域名列表。关键认知Zone 文件是 DNS 服务器的内部账本。正常情况下外部用户只能一条一条查记录你查www.example.com的 A 记录服务器返回 IP。AXFR 是一种特殊机制让你一次性拿到整个账本。AXFR区域传送Zone TransferAXFR 是 DNS 协议的一个功能——允许从 DNS 服务器向主 DNS 服务器请求整个 Zone 文件的完整副本。它的设计初衷是主从同步主 DNS 服务器Master更新了记录后从 DNS 服务器Slave通过 AXFR 拉取最新 Zone 文件保持数据一致。为什么会有 AXFR一个 Zone 通常有多台权威 DNS 服务器如ns1.example.com和ns2.example.com——一台主、多台从做冗余。主服务器改了记录后从服务器要知道改了什么。AXFR 就是从服务器向主服务器拉取整个 Zone 文件的机制。AXFR 的安全风险AXFR 的设计年代1980 年代 DNS 早期没有考虑安全——任何客户端都可以向 DNS 服务器发 AXFR 请求拿到整个 Zone 文件。这意味着任何人都能一次性拿到目标的所有子域名列表。现代 DNS 服务器通常会配置 ACLAccess Control List访问控制列表只允许从服务器发 AXFR拒绝其他客户端。但如果管理员配置错误忘了限制或限制过宽AXFR 就能成功——这就是它的挖掘价值。是什么向目标的权威 DNS 服务器发送 AXFR 请求尝试一次性获取整个 Zone 文件——包含这个 Zone 里所有子域名的完整列表。为什么AXFR 是主动探测里性价比最高的方法——一次请求就能拿到全量子域名列表不用跑字典爆破。但它有前提目标 DNS 服务器必须配置错误允许任意客户端传送 Zone。怎么做第一步识别权威 DNS 服务器先查目标的 NS 记录找到权威 DNS 服务器步骤做法说明查 NS 记录dig NS example.com返回目标的权威 DNS 服务器列表记录服务器如ns1.example.com、ns2.example.com这些是 AXFR 要请求的目标第二步发送 AXFR 请求向权威 DNS 服务器的 TCP 53 端口发送 AXFR 请求。AXFR 用 TCP 而不是 UDP——因为 Zone 文件可能很大UDP 的 512 字节限制装不下必须用 TCP。第三步解析返回的 Zone 文件如果 AXFR 成功服务器返回整个 Zone 文件。从 Zone 文件里提取所有记录的 owner 名称如www、api、dev拼上根域名就是子域名列表。技巧技巧做法价值多权威服务器都试NS 记录可能返回多个每个都试 AXFR不同服务器配置可能不同有的禁用了有的没禁用TCP 53 端口AXFR 必须用 TCP 53UDP 53 装不下 Zone 文件工具辅助用dig AXFR ns1.example.com example.com手动构造 AXFR 请求复杂查所有 Zone如果目标有多个 Zone如example.com和internal.example.com每个 Zone 都试 AXFR注意事项事项说明大部分服务器已禁用现代 DNS 服务器基本都配置了 ACL拒绝外部 AXFR只对配置错误有效AXFR 成功意味着管理员忘了限制——是配置错误不是常规方法AXFR 成功率低不能作为主力方法只能试一下碰运气成功后数据可能过时Zone 文件是当前快照不是实时的——子域可能已变更4.3 DNS 排列扫描前置知识子域命名规律开发者给子域名命名时通常基于一定的规律——用缩写、加数字版本、加环境后缀、合并多个词。比如目标已有api.example.com可能还有apiv1、apiv2、api-dev、api-staging、internal-api、api-internal。这些变体不在通用字典里但如果从已发现子域里提取词根就能生成这些变体。排列组合生成Permutation排列组合生成是指——基于已有的词根通过插字符、换顺序、加数字、合并等操作生成新的候选子域名。和字典爆破的区别字典爆破用的是固定词汇表通用字典 定制字典排列扫描用的是从已发现子域提取的词根做组合生成。是什么基于已发现的子域名提取词根通过排列组合生成变体如api→apiv1、api-dev、internal-api再对变体做 DNS 查询验证。为什么字典爆破用的是通用词和定制词但目标可能有自己的命名习惯——用dev还是develop用staging还是stage还是stg用api还是apiv1还是apiv123。这些命名习惯只有从已发现的子域里才能看出规律。方法候选词来源覆盖什么字典爆破通用字典 定制字典常见命名排列扫描已发现子域提取的词根目标特有命名变体怎么做第一步提取词根从被动发现和字典爆破已发现的子域里提取词根已发现子域提取的词根api.example.comapiapi-dev.example.comapi、devapiv2.example.comapi、v2internal-api.example.cominternal、api第二步生成变体用排列组合规则生成新候选规则做法示例加版本号词根 数字api→api1、api2、api3加环境后缀词根 环境词api→api-dev、api-staging、api-test加前缀环境词 词根api→internal-api、dev-api合并词根词根 词根apidev→apidev、devapi插字符词根中间插字符api→a-pi、ap-i第三步查询验证对生成的变体做 DNS 查询判断哪些存在。技巧技巧做法价值工具辅助用 altdns / dnsgen / gotator 等工具自动生成变体手动生成不现实变体数量是指数级多轮迭代把第一轮排列扫描发现的新子域作为输入再跑一轮新子域可能又有新的词根词根质量只从确信存在的子域里提取词根假阳性子域的词根会生成更多假阳性限制变体数量控制生成规则数量和词根数量变体数量爆炸 → 查询量爆炸 → 被限速注意事项事项说明变体数量爆炸几十个词根的排列组合可能生成几万到几十万个变体命中率取决于词根质量词根太少或太泛 → 变体大多不存在仍受通配符干扰和字典爆破一样通配符 DNS 会让所有变体返回 NOERROR查询量大排列扫描的查询量比字典爆破更大限速风险更高4.4 主动探测的风险管理风险类型风险触发条件后果被检测任何主动查询都会被目标 DNS 服务器记录目标知道有人在侦察被封禁高并发、大量查询、固定模式IP 被临时或永久封禁被限速超过 DNS 服务器 QPS 限制查询被降速返回空结果假阴性法律风险未授权的主动探测可能触犯相关法律控制原则原则做法说明先低并发试水开始用低并发跑小字典观察响应摸清目标的限速阈值监控成功率实时统计查询成功率低于 90% 自动降速早期发现限速遇阻降速遇到超时增多、SERVFAIL 增多立即降并发防止从限速升级到封禁合规授权只在授权范围内做主动探测法律风险控制三个方法的风险等级方法风险等级原因DNS 字典爆破高查询量大、模式明显顺序查询容易被识别DNS 域传送AXFR低一次请求查询量极小DNS 排列扫描高变体数量大查询量比字典爆破还大关键认知AXFR 风险最低一次请求但成功率也最低大部分服务器已禁用。字典爆破和排列扫描风险高但覆盖率高。主动探测的风险管理本质是在覆盖率和隐蔽性之间找平衡。与第8章的区分本章只讲风险类型和控制原则。具体的踩坑案例——通配符假阳性、DNS 静默丢包、IP 封禁、管道数据丢失——在第8章踩坑实录里讲。4.5 阶段输出输出1新增子域名列表字段说明示例子域名新发现的子域名internal-api.example.com发现方法从哪个方法发现的字典爆破 / AXFR / 排列扫描DNS 响应码查询时的响应码NOERROR发现时间什么时候发现的2026-10-04备注补充信息AXFR 成功 / 排列扫描第二轮输出2与被动发现合并后的总列表字段说明子域名所有发现的子域名发现阶段被动 / 主动发现方法具体方法CT、搜索引擎、字典爆破等是否多源多个方法都发现了吗来源数几个方法发现了它输出3覆盖率统计阶段发现数量新增贡献总覆盖率被动发现200—80%主动探测-字典爆破3010%92%主动探测-AXFR00%92%主动探测-排列扫描156%98%合计24518%98%4.6 与其他阶段的衔接输出流向新增子域名列表 ──→ 阶段4进阶发现作为递归和排列扫描的种子 合并总列表 ──→ 阶段5DNS 清洗做 DNS 验证和通配符过滤主动探测补了什么盲区被动盲区主动探测补的补的效果内部子域字典爆破的internal、dev、test部分覆盖未收录子域字典爆破不依赖收录全覆盖新上线子域主动探测是实时的全覆盖非标准命名排列扫描基于已发现子域生成变体部分覆盖递归时回到主动进阶发现阶段阶段4发现新的根域名或新子域时要回到这里重跑主动重新做的为什么重跑字典爆破新根域名用新字典爆破重跑排列扫描新发现子域提供新词根生成新变体调整并发参数新根域名的 DNS 服务器可能不同限速阈值不同关键认知主动探测是挖得深的关键。被动发现覆盖广但浅——它找到的是目标愿意公开的子域。主动探测深入一层——它找到的是目标没意识到暴露的子域。但主动探测有成本——时间成本、风险成本。每次递归都要权衡再跑一轮主动值不值。下一篇第5章——进阶发现以已发现的子域为跳板递归扩大发现范围。
阅读完成 · 觉得有帮助?