高效查询域名下的所有子域名,核心方法是“被动收集+主动枚举+交叉验证”三条腿走路,单靠任何一个工具都查不全。下面这套玩法,从免费网页工具到本地命令行,再到API定价,一次讲透。
大家平时查子域名,最常见的场景无非是三类:做安全测试前摸资产范围、分析竞品网站架构、或者排查自己域名下有没有被偷偷绑定的恶意子域名,可很多朋友一上来就翻搜索引擎,翻了几页就放弃,因为搜出来的信息又散又旧,根本不成体系,要知道,子域名信息的核心来源并不是搜索引擎,而是证书透明度日志,所有HTTPS网站申请证书时都会留下记录。
免费子域名查询工具哪个好用?先掌握查询思路
工具太多容易挑花眼,与其纠结用哪个,不如先理解它们背后的逻辑,可以把查询手段分两条路:
- 被动收集:通过证书日志、DNS历史记录、公开情报源去“捞”数据,不需要接触目标服务器,最安全也最全面。
- 主动枚举:用字典去爆破目标域名的DNS解析记录,属于“猜名字”的过程,速度快但命中率依赖字典质量。
一个常见的误区是以为只靠爆破就能搞定,实际效果非常有限,业内专家指出,多数真实子域名并不遵循常见命名规则,纯暴力枚举的成功率往往低于预期,而被动收集却能把那些隐藏很深的测试环境、内部后台给翻出来。
如何查询某个网站的子域名?从证书透明日志开始
先说大家最关心的问题:如何查询某个网站的子域名,手动操作最快的路径是打开crt.sh这个免费网站。
使用crt.sh查子域名的详细步骤
- 打开crt.sh,在搜索框输入目标域名,
baidu.com,注意不要带www。 - 页面会返回一长串证书记录,每条记录里都有
Common Name和Matching Identities字段,这些就是子域名。 - 把结果复制到文本编辑器,用正则过滤掉包含邮箱、IP地址的干扰项。
- 这一步得到的列表只是“可能存在”的子域名,因为证书可能吊销或未实际使用,需要进一步验证。
验证存活也很简单:拿域名去在线HTTP检测工具批量扫一下,看哪些返回200、403,哪些解析不了。两条记录交叉比对,有效子域名就浮出水面了。
本地命令行工具怎么选更高效
网页版适合单次查询,但如果你经常需要查目标资产,那得用本地命令行工具,目前子域名查询工具有哪些常用类别?大概分三档:
- subfinder:Go语言写的,纯被动收集,调用免费API源,速度极快,适合日常使用。
- amass:功能最全面,既有被动模式也有暴力枚举模式,但消耗资源较大,跑大批量任务时内存占用较高。
- OneForAll:国产工具,聚合了多个引擎,对国内域名支持更好,适合跑国内站点。
实操时不要把这三者割裂开,推荐组合是先用subfinder跑被动,再用amass的暴力枚举补一轮,最后用脚本把两个结果合并去重,以如下命令为例:
subfinder -d example.com -all -silent -o sub_passive.txt amass enum -d example.com -brute -w ./small_dict.txt -o sub_active.txt cat sub_passive.txt sub_active.txt | sort -u > all_subs.txt
这样一轮下来,得到的数量往往是单独使用任何一个工具的三到四倍。
子域名查询api价格高不高?按量计费比包年更灵活
很多人在社区提问时比较关心调用API自动化查询的成本,其实这个问题要分场景看,如果你是安全众测人员,按量计费比一次性买断更划算,因为不是每天都有大量任务。
我先说免费的方案,crt.sh本身不提供官方API,但它的数据库开放查询,且可以直接访问SQL接口,你可以写脚本去抓取,SecurityTrails的免费版每天有请求次数限额,个人做研究基本够用,但想大规模跑资产就需要付费。
行业共识认为,付费API的价值主要体现在历史DNS解析记录和数据实时性上,免费源往往延迟几个小时甚至几天,而商业API能在证书签发后几分钟内收录,至于费用,不同平台差距较大,有的按次计费,有的按域名数量计费,有的按月度订阅,给出如下参考比较:
| 平台 | 免费额度 | 适合场景 | 计费方式 |
|---|---|---|---|
| crt.sh | 无限制网页查询 | 单次人工检查 | 免费 |
| SecurityTrails | 每日有限次数 | 个人研究 | 订阅制 |
| FOFA | 有限搜索次数 | 国内资产测绘 | 积分/会员 |
| Censys | 有限搜索次数 | 学术研究 | 订阅+按量 |
建议以你的月度任务量为锚点来选:如果每月只查几个目标,免费额度完全够用,要是不想超限,优先选按量计费的,因为可以随时停止续费,没有心理压力。
查询子域名过程中常见的问题与解决办法
实际操作中总会碰到这样那样的坑,下面这几个属于踩的人比较多的。
为什么用crt.sh查出来的结果有一堆无关数据
crt.sh会把所有关联域名也展示出来,比如查qq.com,会连带返回qq.com.cn。需要在过滤时加一步精确匹配,比如用正则只保留以\.qq\.com$结尾的条目,否则后面的验证步骤会白白浪费大量时间。
国内子域名查询平台有哪些需要留意的点
国内平台如FOFA、钟馗之眼使用起来更符合本地习惯,检索速度和数据丰富度也相当不错,不过它们对未实名账号限制较多,部分高级字段需要付费才能查看,更关键的是,海外工具返回结果较慢,部分源存在网络延迟问题,所以跑国内资产时首推FOFA,跑海外资产时crt.sh和SecurityTrails体验更顺畅。
怎样判断查到的子域名是不是已经失效
这一步绝对不能省,一个子域名可能曾经存在,但现在不再解析了,你可以直接用命令批量检测:
for domain in $(cat all_subs.txt); do ip=$(dig +short "$domain" | head -1) if [ -n "$ip" ]; then echo "$domain -> $ip"; fi done
更严格的话,还可以请求Web页面看响应码,或者检查证书是否过期,只有经过这一步筛选,才能确认留存结果真正有效。
高效查询子域名的进阶技巧:用搜索引擎和在线服务补漏
工具之外,还有一些容易被忽略的信息渠道,这些渠道在特定场景下,能帮你找到其他工具查不到的子域名。
利用搜索语法查子域名
Google搜索语法和百度搜索语法是极好的补充手段,在搜索框输入site:example.com,能搜出搜索引擎收录的该域名下所有页面,这些页面常包含子域名链接,不过搜索引擎索引不全,深入页面和旧站页面可能没被收录,所以这个方法不能单独使用。把搜索出来的结果和证书日志结果合并,才能扩到最大覆盖面。
使用DNS历史记录服务提取旧子域名
很多公司会把废弃子域名直接删除解析,但DNS历史记录里还有痕迹,通过查看历史记录,可以发现老旧的测试站点,这些站点往往是安全防护的空窗期,配合上面提到的工具,整个查全率能进一步提升。
自动化脚本整体串联
任何时候都别只依赖单一工具,把上述方法整合为一个管道,日常使用就会极其顺手:
- subfinder获取被动子域名
- crt.sh抓取证书日志子域名
- 搜索引擎语法补漏
- DNS历史记录核对旧域名
- 合并去重后验证存活
- 输出有效域名列表
一次性跑完,保存为脚本,下次直接复用。
查询子域名时的数据清洗与验证
很多人卡在“查出来的数量多但质量差”这一步,数据清洗和验证是决定效率的关键环节。
先说明一个规律:原始输出中大约有三分之一是无效条目,这些无效条目包括重复记录、泛解析域名、已下线的CNAME记录等,所以清洗流程要从这三个步骤着手:
- 去重:不同工具的格式不统一,有的带
www,有的不带,统一小写后再排序。 - 过滤泛解析:在DNS解析中,某些域名对所有随机子域名都返回IP,这时需要判断是否为泛解析记录,可通过解析几个随机字符串来确认。
- 提取CNAME目标:子域名往往是指向云服务或CDN的CNAME,这类记录能反映背后的基础设施。
完成以上操作后,将结果与公司资产表或已知CDN网段比对,最终留下来的才是真正有价值的信息,干净的数据对后续安全扫描的意义十分巨大。
关于查询子域名工具选型的三个高频问题
查别人的子域名会触发告警吗?
不会,被动查询使用证书日志、DNS记录等公开数据,不需要和目标服务器建立连接,因此目标网站根本感知不到你的行为,但如果你用爆破方式进行主动枚举,则必须在授权范围内操作,因为大量DNS请求有概率触发安全设备的敏感告警。
网页版工具和命令行工具到底选哪个?
如果只查一两个域名,网页版足够,无需安装环境;如果批量查询、反复使用,命令行工具效率更高,推荐先学会用crt.sh查单个域名,再逐步掌握subfinder和amass的命令行操作。
免费工具和商业API差别大吗?
主要差别在历史数据的完整程度和查询配额上,免费工具能覆盖当前活跃的证书记录,而商业API保存了多年的历史记录,查询重要的目标资产时,优先使用商业API比较稳妥,因为数据可能包含已下线但仍可解析的子域名。
把查子域名这件事做到高效,说到底就是三条:用被动数据扩大覆盖面,用主动枚举查漏补缺,再用严格验证筛掉垃圾记录,掌握了这一套流程,无论是做渗透测试还是资产盘点,你都能比别人看到更多的角落。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/727979.html





