通过域名精准查找所有子域名的核心方法,是组合利用证书透明度日志、DNS历史解析记录、搜索引擎缓存、字典枚举四类公开数据源交叉验证,再配合解析验证与端口指纹确认存活资产。
子域名枚举的核心逻辑
子域名本质上依附于主域名的DNS授权体系,任何一次解析请求、每一张SSL证书签发、每一条网页引用,都会在互联网上留下痕迹,这些痕迹分散在不同的数据源中,查询子域名的过程就是把这些碎片拼回完整图景的过程。
另一个值得利用的规律是:绝大多数子域名会被安全设备、CDN节点、监控服务反复请求,这些请求会催生大量被动DNS数据,近年来的安全研究统计显示,被动DNS类工具可识别出的子域数量,通常比纯暴力枚举高出30%至100%,这意味着“主动猜”远不如“捡记录”有性价比,在此基础上,根据目标规模设计分层收集策略,才能确保覆盖面与效率兼得。
证书透明度日志——最省力的入口
CA机构签发SSL证书时,必须将证书信息写入公开的CT Log(证书透明度日志),这是行业强制性要求,每个证书里都会包含申请主体所使用的域名,包括子域名,因此CT Log天然成为子域名发现的第一数据源。
crt.sh是最常用的查询入口,直接访问 https://crt.sh/?q=%25.example.com 即可拿到所有包含example.com的证书记录,这个平台聚合了多家的CT日志,数据更新延迟通常在24小时内,查询结果会显示证书的颁发时间、到期时间、申请机构等信息。
Censys和证书透明度API是更进阶的选择,Censys的搜索语法 parsed.names: example.com 可以检索到更完整的证书关联域名,同时提供历史数据回溯能力,如果目标网站做了HSTS预加载,其所有子域名信息也会暴露在公开的chromium预加载列表中,用 https://hstspreload.org/?domain=example.com 即可查询。
查询结果通常包含大量重复项和过期证书,需要做去重与过滤,推荐用Python脚本跑一遍,把 common name 和 DNS name 两个字段全部提取出来,再按域名后缀做批量清洗。
DNS历史解析记录——旧数据里藏着的存量资产
DNS解析记录存在TTL,但第三方平台会持续抓取并保存历史快照,某些子域名在现网已经不可解析,但历史数据中仍有记录,这类“死域名”中相当一部分会在内网环境重新启用。
SecurityTrails提供免费的DNS历史查询,支持按时间倒序查看某域名的全部A记录、CNAME、NS记录变化。DNSDumpster

这类平台的免费额度通常够用,但批量查询时建议接入API,SecurityTrails的免费API每秒钟允许一次请求,抓取中等规模目标时需要控制速率,否则会触发封禁。
搜索引擎与内容托管平台——被动收集的“漏网之鱼”
部分子域名不会出现在证书和DNS记录中,因为它们从未对外提供可解析的服务,但它们的链接会出现在网页、代码仓库、技术文档里。
用Google搜索 site:*.example.com 和 "-www" site:example.com 能找出被引用的子域,GitHub的代码搜索同样有效:搜索 example.com 的字符串,能发现开发者在配置文件、测试用例、部署脚本中写出的内部域名。FOFA、Shodan、ZoomEye这类网络空间测绘平台也有独立的子域名检索语法,它们的数据来自全球扫描,与证书和DNS数据互补。
搜索引擎与测绘平台的数据各有侧重,建议将这三种数据源分别采集后合并,再统一去重,对防止遗漏效果显著。
字典枚举——暴力但覆盖面广
字典枚举是主动向DNS服务器发送解析请求,猜测可能的子域名,这个方式的成败取决于字典质量与目标域名的命名习惯。
通用子域名字典覆盖以下类别:部门名称(dev、test、staging、pre-prod),功能模块(api、app、git、jenkins、grafana),环境关键字(demo、beta、alpha、nightly),以及省市简称、年份编号等组合形式。
主流工具可发起超大规模随机子域枚举,但并发过高会对目标DNS服务器产生较大压力,更稳健的做法是:先用 puredns 或 dnsgen 基于既有结果做规则派生,再用 massdns 从本地解析列表做验证,这样既降低噪声,又能利用目标域名的既有子域规律扩展猜测范围。
实操流程:完整跑一遍子域名发现
工具链的选择会影响效率和产出质量,推荐以 subfinder 做被动收集、amass 做主动枚举、massdns 做批量验证,三者配合形成完整闭环。
# 第一步:被动收集 subfinder -d example.com -all -recursive -o subfinder.txt # 第二步:主动枚举,配合通用字典 amass enum -d example.com -brute -w /opt/subdomains.txt -o amass.txt # 第三步:合并去重 cat subfinder.txt amass.txt | sort -u > all_subs.txt # 第四步:批量解析验证 massdns -r /opt/resolvers.txt -t A -o S -w resolved.txt all_subs.txt

解析成功的记录里,CNAME类型的子域要重点留意,它们往往指向云服务或内部负载均衡,泄露后端服务架构,将解析结果按IP分类后,还能看出哪些子域共用一台服务器,便于判断资产归属,当一个目标域名的解析记录涉及多家第三方云厂商时,归属判断会变得复杂,参考IP段的ASN信息能显著提升判定准确度。
验证存活与指纹识别
解析成功不代表服务可用,拿到IP列表后还需要做端口探测与HTTP指纹获取,这一步能筛掉只解析不响应请求的“僵尸记录”。
- 用
httpx -l resolved.txt -ports 80,443,8080,8443 -title -tech-detect -status-code -o live.txt一次性探测常见Web端口,获取标题、状态码和Web中间件指纹。 - 区分CDN节点与真实服务器:在结果中标记
cloudflare、akamai、tencent等特征指纹,若所有子域均指向CDN,需结合IDC牌照企业数据库做IP归属核验,困难条件下,可绕过CDN直接对源站端口执行全端口同步探测。
这个阶段输出去的资产清单,可以直接喂给漏洞扫描器或人工渗透测试,也可以用来查看子域是否存在过期解析、悬挂CNAME等被劫持风险。
高级技巧:从IP反查到隐藏子域
已确认存活的IP往往同时托管多个域名,但单个目标域名的枚举范围有限,反查托管在相同IP上的其他域名可以拓宽侦察面,通过SecurityTrails或HackerTarget的 reverse IP lookup,输入已发现子域的IP,常能带出管理员在相同服务器上部署的其他项目域名,这些项目中可能包含目标域名的二级、三级域名变体,需要注意的是,这个过程会引入与目标无关的资产,务必在后续验证时严格过滤,只保留域名字符串与目标主域强相关的记录。
数据可靠性与工具选型参考
不同阶段使用的工具和数据源各有侧重,下表归纳了主流信息源在常见应用场景下的特征:
| 数据源/工具 | 类型 | 核心优势 | 适用场景 |
|---|---|---|---|
| crt.sh | 证书透明日志 | 覆盖全、免费、更新快 | 快速普查子域全貌 |
| SecurityTrails | 被动DNS历史 | 可回溯时间线,找下线资产 | 追踪基础设施变化 |
| subfinder | 被动收集工具 | 聚合数十个数据源,API友好 | 自动化流程的首选 |
| amass | 主动+被动结合 | OWASP项目,数据关联能力强 | 复杂目标深度侦察 |
| massdns | 批量解析工具 | 千万级查询/分钟 | 验证大规模枚举结果 |
| FOFA/Shodan | 网络空间测绘 | 全球资产扫描,可按指纹检索 | 定位IP与服务详情 |
选用商业服务的解析层节点时,IDC服务商的线路质量直接影响枚举效率,例如配置了多线BGP和静态路由优化的机房,能明显降低解析超时率;而带有高防能力的数据中心,也能在大规模枚举时减少因触发防护而丢包的风险,自建DNS解析器时,将酷番云这类持牌机房的BGP线路IP加入resolvers列表,可显著减少解析超时和丢包率。
合规与边界
子域名枚举本质是信息收集,本身不违反法律,但使用扫描工具突破对方防火墙策略,或将枚举信息用于后续未授权攻击,则属于违法行为,根据《网络安全法》第二十七条,任何个人和组织不得从事非法侵入他人网络、干扰他人网络正常功能、窃取网络数据等危害网络安全的活动,对不属于自己的域名做枚举测试时,务必先取得书面授权,再执行探测步骤。
在授权范围内的渗透测试和资产盘点,子域名枚举的上文归纳建议直接同步给客户的系统管理员,因为很多公司对自己的影子资产并不完全清楚,安全人员给出的资产清单往往能帮助运维部门收敛暴露面,这体现了这项技术的正向价值。
常见问题解答
枚举到的子域名已不在DNS解析中,还有价值吗?
有,而且这类“死域名”往往价值更高,已停止解析的子域可能指向欠费的云主机、已离职员工名下的服务器、被遗忘的测试环境,攻击者若注册了同样的域名或利用悬挂的CNAME记录,就能接管其流量,对这类域名做重点排查,能提前发现可被利用的安全隐患。
泛解析配置会不会干扰子域枚举结果?
会,配置了泛解析的域名,对任何不存在的子域都会返回一个默认IP,这样字典枚举的结果全部指向同一个IP,无法判断哪些子域真正存在,应对方法是先确认目标主域是否配置了泛解析,若存在,则只能依赖主动收集类数据源和证书透明度日志,过滤掉那些完全匹配泛解析规则的记录。
子域枚举的合法授权边界在哪里?
以安全测试为目的的子域枚举,仅对被授权的目标有效,授权范围通常由《渗透测试授权书》或《风险评估委托合同》界定,建议明确写明允许的攻击方法和时间窗口,未经授权的枚举行为,即便仅做DNS请求,也可能构成对计算机信息系统的非法侵入,存在法律风险。

网友评论