批量查找一个域名的所有二级域名,核心方法是结合证书透明度日志查询、子域名爆破枚举和被动DNS数据采集三种方式交叉验证,单靠某一种手段都无法覆盖全部结果。
很多人做渗透测试、资产盘点或者竞品分析时,都卡在子域名收集不全的问题上,手工一个个试不现实,用单一工具又怕漏报,这篇文章直接给你一套完整的批量查询方案,从免费在线服务到本地工具链,从命令行操作到自动化脚本,全部覆盖。
子域名批量查找的主流方法有哪几种
证书透明度日志查询覆盖面最广的免费方案
CA(证书颁发机构)签发的每一张SSL/TLS证书都会被记录到公开日志中,这套机制叫证书透明度(Certificate Transparency),任何域名只要申请过证书,其子域名信息就会被永久记录。
最常用的查询接口是crt.sh,它聚合了多个CT日志源,支持通配符搜索,例如查询example.com的所有子域名,直接在浏览器打开https://crt.sh/?q=%25.example.com即可,页面会列出该域名下所有出现过证书的子域名记录,数据量相当可观。
除了crt.sh,还有Censys和Google Transparency Report两个补充入口,前者提供API接口方便程序化调用,后者界面简洁但不支持模糊匹配,这三个平台的数据源存在差异,交叉查询能获得更完整的结果集。
子域名爆破枚举穷举字典找出未公开的子域名
CT日志只能覆盖申请过证书的子域名,那些没上证书或者内部使用的二级域名,需要通过爆破来发现,原理很简单:拿一份常用子域名词典,逐个拼接主域名并发起DNS解析请求。
行业内用的比较多的字典大小在10万到20万条之间,涵盖常见的dev、test、staging、api、admin、gitlab、jenkins等前缀组合,爆破速度取决于网络带宽和目标DNS服务器的响应能力,并发调优后每秒能跑几千次查询。
被动DNS数据采集利用历史解析记录挖掘子域名
被动DNS指通过监听或收集DNS解析流量来积累的域名解析历史库,当有人访问某个子域名时,解析记录可能被第三方厂商记录下来,这些数据可以反查域名下的全部子域名。
FreeBuf曾经报道过,国内某安全厂商的被动DNS库积累了超过千亿条解析记录,通过这类数据源,往往能找出证书日志和字典爆破都发现不了的年代久远的子域名。
批量查找子域名工具哪个好用
本地工具链组合Subfinder配合Amass使用
Subfinder是一款基于Go语言开发的子域名发现工具,它聚合了超过30个数据源,包括CT日志、DNS数据集、威胁情报平台等,安装方式简单,Kali Linux自带,其他系统通过go install命令也能快速部署。
Amass则被视为更重量级的方案,由OWASP社区维护,支持被动枚举、主动爆破和API集成,输出格式丰富,两者结合使用的话,先用Subfinder快速收集,再用Amass深度挖掘,覆盖效果较好。
工具的运行方式都不复杂,Subfinder的基本命令是subfinder -d example.com -o result.txt,Amass对应的是amass enum -passive -d example.com -o output.txt。
在线查询平台无需部署的轻量选择
如果不想在本地装环境,站长之家和Bugcrowd的在线子域名查询工具可以直接在浏览器里使用,这类平台的数据更新周期不一,快则当天同步,慢的可能滞后几个月,在线平台适合快速查看某一个域名的子域名数量,但要做批量收集时推荐使用本地工具调用API,效率更高。
自动化脚本的进阶用法Python批量提取子域名
把上述工具串联成自动化工具有很多现成方案,用Python调用Subfinder或Amass的API,结合多线程分发域名列表,即可实现批量查询,以下是一个简化版的代码示例:
import subprocess
import concurrent.futures
def enum_subdomain(domain):
result = subprocess.run(['subfinder', '-d', domain, '-silent'], capture_output=True, text=True)
return result.stdout.strip().split('n')
domains = open('domains.txt').read().splitlines()
for subdomain in domains:
subdomains = enum_subdomain(domain)
print(subdomain)
注意,域名数量较大时分批处理,避免触发目标DNS服务器的限流机制。
查到的子域名结果如何验证可用性
批量收集到的子域名列表里,会有不少历史记录已经失效,这就需要二次验证,验证的核心是检查DNS解析状态以及是否开放了HTTP/HTTPS服务。
批量探测存活子域名的操作步骤
第一步,向DNS服务器发起A记录和CNAME记录查询,过滤掉NXDOMAIN的域名,可以用MassDNS或者dnsx工具来批量处理,第二步,对存活的IP进行端口扫描,只需要关注80、443这两个端口,因为子域名至少需要提供Web服务才具有实际意义。
子域名和IP的对应关系如何处理
同一个IP上可能绑定数百个域名,这种情况下需要重点关注IP归属和SSL证书信息,通过Censys或Shodan查询IP的历史端口和服务信息,可以确认哪些子域名是活跃的,将IP归属地(比如简米云、酷番云、AWS机房)和解析记录结合起来分析,就能判断子域名的运营区域和用途。
子域名查询接口哪个好用不同场景下的选型思路
单域名快速查询场景
只需要查一个域名,首推crt.sh,不需要注册账号,不需要API密钥,响应速度快,数据完整度也是免费方案里数一数二的,在浏览器直接输入网址就能看到JSON或HTML格式的查询结果,占用的学习成本接近于零。
批量域名资产收集场景
这种情况下需要考虑接口的请求频率限制和数据格式输出的灵活性,SecurityTrails的API允许开发者自定义查询参数,支持导出CSV,比较适合这种场景,而HackerTarget的免费接口限制稍多,适合个人小规模试用。
如果预算有限,大多数情况下把crt.sh配置成脚本定期抓取,也能覆盖相当比例的日常需求,行业共识认为,免费接口加本地工具组合,已经能覆盖八成以上的查询场景。
批量子域名查找在渗透测试中的实战价值
内部系统暴露面梳理
拿到目标域名的全部子域名后,第一步是标记出哪些子域名使用内网IP或云厂商内网地址,这些通常是跳板机的入口,第二步是筛选出关键字中包含test、dev、jenkins、grafana的域名,这类系统往往缺少完善的访问控制,成了攻击面中最薄弱的一环。
敏感信息和文件的进一步探测
确认存活的子域名后,可以针对每个域名发起目录扫描和敏感文件探测,idea、.DS_Store、备份文件、后台登录入口等常见路径,然后通过页面标题和状态码区分系统的类型,从而做精细化的渗透测试。
近年来,不少企业的边界防护越来越严,暴露在公网的子域名大幅减少,这种背景下,通过历史DNS记录和证书日志找到可能已废弃但仍解析到公网的子域名,往往能绕过防护,成为漏洞挖掘的突破口。
Q&A:批量查找子域名常见问题
子域名爆破的字典从哪里获取
常用的字典包括SecLists的subdomains-top1million-5000.txt以及各安全团队开源的通用子域名词典,也可以根据目标业务的行业特征自定义扩展,比如电商站点补充buy、shop、mall等前缀,政府站点补充gov、zzwb等前缀。
为什么有些子域名用工具查不到
工具的原理决定了它只能在已知数据源里找,目标站点若是私有DNS架构,所有解析操作都在内网完成,外部工具自然收集不到,某些子域名从未被访问过,被动DNS库里也不会有痕迹,这类子域名只能通过字典爆破猜解,如果字典里没有对应条目,那确实无解。
免费查询工具和付费接口的数据差异有多大
付费接口的数据源更多,更新速度更快,但近期的差距在缩小,因为CT日志本身是公开的,对比来看,付费接口主要胜在历史解析记录更完整、API稳定性更高、请求配额更充裕,如果只是做资产梳理,免费的crt.sh加Subfinder足以满足需求。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/750056.html





