精准查询一个域名的全部子域名,本质上是信息收集与资产测绘的过程,没有单一百发百中的工具,需要组合被动收集与主动枚举策略,并交叉验证。
先搞懂子域名查询的基本逻辑
子域名不是藏起来的,而是暴露出来的
很多人以为子域名是隐藏资产,实际上它们时刻在互联网上产生流量和记录,每一个子域名解析,都会在DNS服务器留下痕迹;每一次访问,都可能被第三方记录,子域名查询的核心,就是利用这些公开的、半公开的痕迹反推完整的域名列表。
行业共识认为,被动收集能覆盖约70%的常见子域名,而主动枚举能挖掘剩余部分,两者结合才能接近完整,搞懂这个逻辑,你就明白为什么单一工具永远不够用。
你需要分清两种查询路径
| 查询方式 | 原理 | 优点 | 缺点 |
|---|---|---|---|
| 被动收集 | 从第三方数据源抓取历史记录 | 不接触目标服务器,安全隐蔽 | 依赖数据源覆盖范围 |
| 主动枚举 | 直接向DNS服务器发起爆破请求 | 能发现从未被访问过的记录 | 可能触发安全告警 |
多数情况下,先用被动收集摸清底数,再用主动枚举查漏补缺是最稳妥的策略。
被动收集:让第三方数据源替你干活
证书透明度日志是最大金矿
每个HTTPS证书签发时,必须公开记录在证书透明度(CT)日志中,这意味着任何为子域名申请过证书的域名,都会留下永久公开的记录,这是目前覆盖面最广、最可靠的子域名信息来源。
具体查询方式:
- 访问
crt.sh,输入域名即可看到所有历史证书记录 - 使用
Censys平台,检索证书中的 commonName 和 SAN 字段 - 利用
Google Transparency Report查询特定域名下的证书
在线子域名查询工具有哪些值得用
被动收集工具的核心价值在于数据积累量,目前主流的在线工具包括:
- SecurityTrails:拥有多年DNS历史数据,支持子域名导出,但免费版每日查询次数有限
- Virustotal
:聚合了多家安全厂商的DNS数据,输入域名后在“Relations”标签页能看到子域名列表
- AlienVault OTX:威胁情报平台,其被动DNS数据对子域名发现很有帮助
- Riddler.io:支持按域名搜索所有关联子域名和IP
这些工具的数据源各不相同,交叉使用至少三款工具,合并去重后,才能得到相对完整的被动收集结果。
搜索引擎也能当子域名收集工具用
搜索引擎的爬虫会抓取网页中的每一个链接,其中包括大量子域名地址,利用Google搜索指令,可以在被动阶段补充不少遗漏:
site:example.com -www:搜索该域名下排除www的所有页面site:example.com .dev:针对性查找dev子系统域名site:example.com filetype:xml:部分站点地图文件会列出完整子域名列表
百度站长平台也提供类似功能,但覆盖度不如Google全面,这一方法不需要任何技术门槛,适合快速摸底。
主动枚举:可控范围内的暴力美学
子域名收集方法哪个好用?字典爆破决定下限
主动枚举的思路很简单猜,用字典文件中的字符组合,逐个拼接尝试DNS解析,但爆破效率取决于字典质量,通用字典(如 subdomains-top1million.txt)包含约100万条常见子域名前缀,对多数中小站点已经够用。
实操步骤:
- 下载高质量子域名字典
- 使用
subfinder结合被动API先跑一轮 - 再用
amass enum -active -d example.com跑主动爆破 - 用
puredns resolve -r resolvers.txt对爆破结果做递归验证,过滤虚假DNS记录
别忽略泛解析问题,部分站点配置了.example.com的泛解析,导致爆破结果全是假阳性,应对策略是先用一个随机不存在的子域名(如zzx9kqba.example.com)测试是否存在泛解析,如果存在,需要编写脚本过滤掉解析到相同IP的记录。
利用DNS历史记录挖掘被删除的子域名
已删除的子域名可能依然指向旧IP,而该IP可能被其他站点接管,形成子域名劫持,这类子域名在被动收集阶段往往查不到,但通过DNS历史记录能发现。
两个重要数据源:
- DNSDumpster:可查看某个域名的完整DNS拓扑图,包括已失效的A记录、MX记录
- ViewDNS.info:提供IP历史记录与域名历史记录交叉查询
这类查询对渗透测试特别重要,被遗忘的子域名往往是安全防护最薄弱的部分,也是子域名收集方法中技术含量最高的一环。
爆破工具效率对比
| 工具 | 请求速度 | 协议支持 | 推荐场景 |
|---|---|---|---|
| Amass | 较慢,但数据全面 | DNS/HTTP/API | 深度渗透测试 |
| MassDNS | 极快,每秒万级 | DNS | 大规模字典爆破 |
| Subfinder | 中速,偏被动 | API/DNS | 日常快速收集 |
| OneForAll | 中速,集成度高 | 多引擎 | 新手综合使用 |
验证与去重:查询结果必须过这三关
第一关:解析验证
爆破出来的子域名不一定真实存在,将结果保存为文本,使用 massdns -r resolvers.txt -o S -w result.txt 批量解析,只需保留返回状态为 NOERROR 的记录,这一步能过滤掉不少泛解析和DNS污染产生的假数据。
第二关:Web指纹确认
部分子域名虽然能解析,但可能指向CDN或云服务商的共享IP,并非真实业务系统,通过HTTP请求查看返回的标题、响应头、favicon哈希,能快速判断这些子域名是否承载独立应用。
第三关:关联数据分析
子域名之间存在关联性。api.example.com 和 graphql.example.com 往往指向同一套后端服务,通过IP反查,可以扩展到同IP段上的其他未发现子域名。这一步是高手和新手之间的分水岭。
构建自己的子域名自动化发现体系
定义你的查询需求
个人站长和渗透测试人员对子域名查询的需求完全不同:
- 站长需求:了解自己域名暴露面,防止被恶意利用
- 渗透测试需求:找出未防护的弱资产作为突破口
- 资产测绘需求:企业安全团队统计整体IT资产,这类需求往往需要配合离线数据批量处理
先明确需求,再选择策略,站长只需被动收集加简单验证,渗透人员则必须全流程覆盖。
用脚本串联整个流程
以下是一个轻量级自动化思路,适合在Linux服务器或云函数上运行:
#!/bin/bash
domain=$1
subfinder -d $domain -silent | tee -a passive.txt
amass enum -passive -d $domain -o active.txt
cat passive.txt active.txt | sort -u > all_subs.txt
massdns -r resolvers.txt -o S -w final.txt all_subs.txt
cat final.txt | grep -v '^#' | awk '{print $1}' | sed 's/.$//'
将这套流程设定为每日定时任务,持续积累数据,子域名资产的完整度会随时间推移越来越高,单次查询是快照,持续监控才能掌握全部资产变化趋势。
查询子域名时的合规边界
子域名查询需要区分授权范围,对于自己拥有或获得书面授权的域名,主动枚举是合法的安全测试手段,但对他人域名进行大规模爆破,可能违反《网络安全法》和《数据安全法》相关条款。
被动收集阶段本身处于灰色地带,数据来自第三方公开平台,一般不涉及违规,但主动爆破行为会被目标服务器的安全设备记录,规模化攻击会触发云厂商的安全告警。务必只在授权测试或自有资产上执行主动枚举。
Q&A:子域名查询常见问题
免费子域名查询工具有没有查询次数限制?
大多数免费工具都有明显额度限制,SecurityTrails每日免费查询约50次,Virustotal每分钟有请求限制,cURL自动抓取crt.sh则没有明确次数限制但应控制请求频率,若需批量查询,建议自行部署开源工具或申请多平台API密钥轮询。
被动收集和主动枚举结果不一致怎么办?
正常现象,被动数据源反映的是历史记录,主动枚举反映的是当前解析状态,某子域名可能已被删除但依然存在于CT日志中,也可能刚配置解析但尚未被任何数据源索引,标准做法是以主动枚举的解析结果为准,但保留被动收集的完整列表作为历史参考。
处理泛解析后的子域名收集还有效吗?
泛解析会显著增加干扰,但并非无解,常用技巧是使用随机子域名探测泛解析IP段,然后在爆破结果中过滤掉该IP段的所有记录,更精细的做法是比对DNS响应TTL值,泛解析记录的TTL通常全局一致,而真实子域名往往各不相同。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/620063.html





