查一个域名下的所有子域名,只靠一种手段很难查全,最实用的做法是先用证书透明日志和搜索引擎做被动收集,再用字典枚举做主动补全,最后统一验证解析状态。
在网站安全测试、资产梳理、漏洞排查场景里,子域名就像同一栋楼里的各个房间,门牌号不同但都归属一个园区,只要把门牌号逐个列出来,外立面才能看得完整,下面这套方法,是我实际干活时用得比较顺手的组合拳。
如何批量收集子域名?被动与主动的思路对比
动手之前,先搞清楚“被动”和“主动”的区别,被动收集是去公开数据源里翻信息,不直接触碰目标;主动枚举则是向目标域名发起解析请求,根据响应判断是否存在子域名,行业共识认为,被动和主动结合才能覆盖绝大多数可见资产。
被动收集:先翻公开资料
被动收集的核心价值在于“不接触目标”,适合在测试初期隐蔽侦查,常见的数据来源有以下几类:
- 证书透明日志:CA机构签发的SSL证书都会记录在公开日志中,比如crt.sh,输入域名就能看到历史证书里关联的子域名,这是目前最可靠的信息源之一。
- DNS记录与历史解析:一些商业平台如SecurityTrails、微步在线会保存DNS解析历史,能从过去的A记录、TXT记录里找到蛛丝马迹,国内常用微步在线的免费版,不过较新的记录可能不全。
- 搜索引擎与网页爬虫:在百度、必应等搜索引擎里用
site:example.com,能搜到被公开收录的子域名页面,这招对老站点有效,但收录新子域名有延迟。 - 威胁情报平台:像VirusTotal、AlienVault的OTX,会从恶意样本和公开情报里提取子域名,直接查相关域名即可。
主动枚举:补上没公开的那部分
被动数据总有盲区,比如某些子域名只在内部DNS使用,或者新建后还没来得及被收录,这时候就需要主动枚举:
- 字典枚举:准备一份子域名词典,包含常见前缀如
www、mail、oa、api、test、dev等,然后对每个前缀发起DNS查询,推荐用dnsx或ffuf,效率很高。 - 递归枚举:针对已经发现的子域名,再对其本身做一次子域名枚举,比如发现
dev.example.com后,继续找api.dev.example.com。 - 排列组合:根据命名习惯生成候选列表,比如
uat1、uat2或new、old这种变体,能命中不少漏网之鱼。
被动和主动并不是非此即彼,多数情况下先拿被动结果当底稿,再用主动枚举去补漏,最后统一验证。
子域名扫描工具哪个好?常用工具实战对比
工具这块没必要争论“最强”,每个工具的侧重点不同,下面这几个是行业内用得较多的,我也都实际跑过,直接说感受。
| 工具 | 定位 | 优点 | 缺点 |
|---|---|---|---|
| Sublist3r | 被动收集 | 安装简单,一条命令出结果 | 依赖公开接口,结果覆盖有限 |
| Amass | 综合型 | 集成被动+主动,可自定义数据源,支持多种输出格式 | 配置繁琐,跑完耗时较长 |
| OneForAll | 被动收集+API接入 | 数据源较多,支持国内接口,中文文档友好 | 需要自己申请部分API密钥,默认配置偶尔触发限流 |
| ffuf | 模糊测试 | 极高性能,可指定字典和过滤规则 | 需要自己搭命令行参数 |
| dnsx | DNS验证 | 批量解析快,支持通配符过滤 | 本身不生成子域名,要配合其他工具 |
如果你是做国内企业资产盘点,OneForAll会顺手一些,因为它的数据源里包含较多国内平台接口,不用额外折腾网络,如果是为了
深度渗透测试,Amass更全面,但建议留出足够时间去跑,刚入门的话,先玩转Sublist3r和dnsx这对组合就够了:前者负责收集,后者负责验证。
再举一个实际场景:我在复测某个金融站点时,先从crt.sh拉出了一大批历史证书子域名,再用OneForAll补充了一些,最后用dnsx解析,发现其中有相当一部分已经解析到CDN或停用,真正能访问的,只有一小部分,这个筛选过程很关键,不能图省事。
查子域名之后,怎么确认这些域名还活着?
收集到一堆子域名只是开始,下一步是“清洗”,你需要逐一确认哪些还能解析、哪些能访问、哪些可能不是目标资产。
- DNS解析验证:用
dnsx -l subdomains.txt -a -resp-only批量查询A记录,过滤掉无法解析的,注意看有没有泛解析,如果所有不存在的子域名都有解析结果,那就说明配了通配符。 - HTTP状态检测:用
httpx -l valid_domains.txt -status-code -title -web-server -tech-detect,批量请求80/443端口,根据状态码和标题判断哪个是有效Web服务,这一步还能顺带识别出一些“假资产”,比如默认页或登录页。 - 对比:如果遇到泛解析,需要对比多个子域名的响应内容,当两个子域名返回的HTML完全一致,大概率是同一虚拟主机或CDN兜底,可以剔除。
这个验证步骤建议写进自动化流程里,不然查出来的子域名列表只能当收藏夹用。
查子域名时别掉进这些坑,不然忙活半天全白费
顺着上面的验证,几个高频坑单独拎出来说,基本上每个踩过的人都抓狂过。
- 泛解析干扰:目标域名配置了
.example.com的A记录,字典里随便一个不存在的子域名都能解析到同一个IP,这时需要过滤响应体或IP一致性的记录,或者用更严格的规则,比如比较TTL值。 - CDN和WAF伪装:很多子域名挂在Cloudflare或简米云CDN后面,解析出来的是CDN节点IP,不是源站,判断方法很简单:看响应头里的
Server字段,或者用nslookup看看返回的解析地址是否属于已知CDN网段。 - DNS缓存不一致:公网递归DNS和本地DNS解析结果可能不一样,有些刚配置的子域名,本地能解析,但换一个公共DNS就失败,建议用
dig @8.8.8.8和dig @114.114.114.114交叉验证。 - 接口限流:crt.sh、VirusTotal等平台对免费调用有频率限制,短时间大量请求容易封IP,最好在工具里设置延迟,比如
Amass -timeout 3,或者使用代理池。
常见问题:域名查子域名的几个疑问
Q:为什么我在线查子域名总是漏很多?
在线子域名查询网站通常就是被动数据聚合,拿的也是别人缓存的结果,存在明显滞后,并且很多网站为了控制服务压力,对单次查询返回的结果数量做了限制,建议把在线查询当作快速筛选,别当成完整答案。
Q:子域名扫描工具哪个好,适合新手用?
新手优先考虑Sublist3r,因为要做的配置最少,装完直接跑python sublist3r.py -d example.com就能看到结果,等你想探索更底层机制时,再换Amass或OneForAll,没有哪个工具能包打天下,同一个目标换个时间跑,结果都可能不一样。
Q:免费查到子域名和付费服务差距大吗?
有一定差距,但不代表免费不够用,付费服务主要在数据源覆盖广度和实时性上更优,比如能看到更早的DNS历史记录,对于个人安全测试或普通资产梳理,免费方式加上主动枚举,已经能覆盖相当一部分有效资产。
说到底,查子域名拼的不是工具数量,而是收集、验证、过滤的完整流程,把被动信息当线索,主动枚举当补充,再用严格的解析验证收尾,手里的子域名列表才真正靠得住。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/623201.html





