高效获取域名下所有子域名,需要将被动信息收集与主动爆破验证结合:先通过证书透明度日志、DNS历史记录等公开数据源做全量收集,再用字典爆破补充未公开的子域名,最后用DNS解析验证存活状态,安全检测工具方面,Amass、OneForAll、subfinder是当前最主流的组合方案。
为什么常规方法查不全子域名?
很多人在查子域名时只想到用搜索引擎或在线工具,输入域名点查询,出来几十条就算完事,但这种方式漏掉的比例相当大,主域名下的子域名分布在各处:有的只在证书日志里出现过,有的写在了第三方服务的JS文件中,还有的历史上解析过现在已删除。
行业共识认为,单一数据源最多只能发现目标域名下三到四成的子域名,要想接近全量,必须同时从多个渠道交叉采集,高效的核心不在单个工具的扫描能力,而在数据源的覆盖广度,收集到的子域名还需要验证存活状态,否则拿到的只是历史记录,其中相当一部分已无法访问。
被动收集:不接触目标也能拿到大部分子域名
被动收集指不向目标域名发送任何探测请求,只从公开数据源中提取信息,优势是不会触发目标的安全告警,也不易被封锁IP。
证书透明度日志查询
CA机构签发的每一张SSL证书都会被记录到公开的CT日志中,一张证书里往往包含多个子域名,域名所有者每次申请证书都会留下痕迹。
主流查询方式有几种,直接访问crt.sh网站,输入域名查看所有包含该域名的历史证书,这种方式覆盖范围广,查询免费,无需注册,也可以用命令行工具查询,更适用于批量操作:
curl -s "https://crt.sh/?q=%25.target.com&output=json" | jq -r '.[].name_value' | sort -u
这条命令会从crt.sh拉取所有包含target.com的证书记录,过滤重复后输出,实际使用中,CT日志通常能贡献六成以上的子域名发现量。
第三方DNS数据集与威胁情报平台
多个安全研究机构长期爬取全网DNS数据并对外开放查询接口,比较有代表性的有:
- fofa、quake、hunter等测绘空间平台,支持通过域名关联资产查询
- SecurityTrails
提供历史DNS解析记录,能看到某域名曾经的A记录指向
- VirusTotal的域名关联报告中也会聚合子域名信息
- DNSDumpster等在线工具会展示域名解析图谱
这类平台多数提供API接口,在SecurityTrails申请免费API Key后,一条curl请求就能拉取目标域名的完整子域名列表。
搜索引擎与网页源码中的资产线索
利用site语法搜索:在搜索引擎中输入site:target.com,能发现被索引的子域名,更进阶的方式是搜索JS文件中的API接口地址,前面提到的那种main.js文件,用gitleaks或LinkFinder提取其中包含的子域名。
微信公众号历史文章和App反编译包里也常有子域名线索,多数企业会在技术文档中暴露测试环境地址。
主动爆破:把没公开的子域名挖出来
被动收集覆盖的是出现过或仍在用的子域名,还有一部分子域名存在于DNS记录中,但从未在公开渠道露过面,主动爆破通过构造大量常见子域名字典,逐个向DNS服务器发起解析请求,存在就返回记录。
字典质量决定爆破效果
爆破能否有成果,核心因素是字典,通用字典一般包含一万到十万个常见前缀,能覆盖多数企业的命名习惯,但无法识别特定行业风格,金融企业酷爱用cctp、ebank等缩写做前缀,游戏公司会有login、pay这样的分段域名,使用gobuster、dnsx配合多个字典跑会更有效果。
常见爆破工具的效率对比
| 工具 | 速度表现 | 适用场景 | 特点 |
|---|---|---|---|
| dnsx | 极快,可每秒上万次查询 | 大规模批量验证 | 支持通配符过滤、递归查询 |
| gobuster | 较快,支持多线程并发 | 单目标深度爆破 | 配置简单,依赖外部字典 |
| puredns | 快,支持泛解析过滤 | 配合massdns使用 | 准确性高,能处理DNS污染 |
| OneForAll | 中等,但覆盖最全面 | 普通运营人员日常使用 | 自带字典丰富,有效降低使用门槛 |
爆破完后要处理一个关键难点:泛解析,部分域名会将未匹配的子域名统一解析到某个IP,导致爆破结果中塞满无效记录,dnsx和puredns内置了泛解析过滤机制,当发现多个随机前缀解析到同一IP时,会自动剔除该IP对应的记录。
清理与验证:拿到解析结果后的操作要点
爆破结果中会有一批解析到CDN或云服务商的子域名,这类记录是真实的,但无法直接定位到源站,验证存活时建议用如下操作:
- 解析验证:筛选返回正常IP的域名,剔除非存在的NXD域
- HTTP探测:用httpx批量请求这些域名,记录状态码、标题、服务器指纹对比:相同IP下多个域名如果返回首页内容一致,多半是空闲虚拟主机
这三个环节做完,输出一个干净的存活域名列表用于后续测试。
自动化和数据整合:用Amass将多源数据串起来
单靠手工收集效率有限,用Amass可以将上述多数数据源整合到一条命令中执行。
Amass的安装与基础用法
Amass是OWASP推出的开源攻击面映射工具,整合了CT日志、搜索引擎、证书透明度、whois等多种数据源的API,同时内置多个常见字典,支持主动被动两种模式。
安装方式根据操作系统略有不同,Kali Linux中直接使用apt install amass命令即可,macOS用户使用brew install amass。
基础枚举命令:
amass enum -passive -d target.com
这条命令只做被动收集,适合不想暴露自身IP的渗透场景,若要包含主动爆破,加 -active 参数:
amass enum -active -brute -d target.com -o output.txt
OneForAll:适合国内使用的备用方案
国内安全从业者使用较多的工具是OneForAll,它在数据源整合方面做了不少针对性优化,覆盖了多数国内DNS数据源和在线测绘平台的接口,OneForAll基于Python开发,在Windows和Linux上都能运行,克隆代码后通过python3 oneforall.py运行,结果会以csv格式输出到results目录。
子域名收集工具哪个好用?场景决定选择
各类工具的侧重点明显不同,若要给一个通用建议:
- CTF比赛或快速收集:直接用crt.sh配合搜索引擎,零成本,几分钟出结果
- 企业授权渗透测试
:Amass + subfinder + dnsx 组合,兼顾覆盖率和效率
- 日常资产梳理:OneForAll足够,内置字典基本满足需求,输出格式友好
- SRC漏洞挖掘:建议在被动收集基础上多花时间在JS文件、GitHub仓库中寻找线索
在子域名爆破工具对比中,如果追求速度感且DNS服务器性能充裕,选dnsx更合适,如果更看重准确性且目标网络环境相对稳定,puredns的表现更佳。
GitHub仓库收集:容易忽视的信息源
企业为了开发便利,经常把代码推送到GitHub公开仓库,在仓库代码中搜索域名关键词,用git clone拉取代码后,通过grep指令匹配子域名模式,常常能发现staging、dev、test前缀的隐藏资产。
移动端App反编译提取
逆向一个目标企业的App,将apk文件放入jadx工具中反编译,搜索URL字符串和域名关键词,往往能拿到只有App端才调用的接口子域名,这些子域名通常未在Web端出现,属于容易被忽略的边缘资产。
子域名接管风险验证
收集到子域名后,如果CNAME指向的第三方服务已过期(比如指向的S3存储桶已被删除),攻击者可以注册该存储桶名称进而控制子域名,使用subjack或nuclei的fuzz-templates来验证这类接管风险,写入渗透测试报告前重点检查。
常见问题集中解答
子域名收集会触发目标告警吗?
被动模式不会,纯被动收集只访问公开数据源和DNS解析服务器,目标服务器不产生任何日志,主动爆破模式会向目标DNS服务器发起大量解析查询,对配置了DNS威胁检测的目标会触发告警。
免费的子域名收集工具够用吗?
对多数场景够用,Amass、OneForAll、subfinder均为开源免费工具,通过配置API Key可解锁更全的数据覆盖能力,付费工具主要体现在速度、稳定性以及少数商业数据源接口的对接上,不看数据质量的核心差异。
子域名收集结果在渗透测试中的权重如何?
子域名收集属于信息收集的一个环节,结果直接影响后续攻击面分析的质量,一份完整可靠的子域名清单能让测试者在后续漏洞挖掘中及时定位系统边界,将收集到的子域名批量导入nuclei验证常见漏洞,能快速感知目标的整体安全水位。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/631009.html





