@[TOC](内容预览 ≧∀≦ゞ
信息收集系列(三):子域名收集——工具篇
前言
在信息收集系列的前两篇文章中,我们分别介绍了基础概念、工具配置以及使用 ASN 分析、证书查询和关联域名收集来扩大攻击面的方法(信息收集系列(一):基础概念与工具配置和信息收集系列(二):ASN 分析及域名收集)。这些方法帮助我们识别目标的基础网络结构,并提取与组织相关的初步资产。
在本篇文章中,我们将聚焦于子域名收集工具。子域名收集是信息收集中的重要环节之一,通过高效地收集和爆破子域名,可以更全面地发现目标的外部资产,为后续渗透测试中的漏洞挖掘提供方向。本文将深入探讨一些主流的子域名收集工具及其使用技巧,进一步提升信息收集的全面性和效率。
一、主动信息收集:Chaos
Chaos-client 是一款高效的主动信息收集工具,操作简单,响应迅速,适合用于快速获取目标子域名信息。其主要依赖公开数据源,因此在信息收集的全面性上略有不足,但对于众测等需要迅速收集资产的场景非常适用。
功能选项
-key string:输入 ProjectDiscovery Cloud API Key (pdcp)。-d string:指定要搜索子域名的目标域。-count:显示指定域的统计信息。-silent:静默输出模式。-o string:指定输出文件(可选)。-dL string:从文件中读取多个域名并进行子域名搜索(可选)。-json:将输出以 JSON 格式打印。-version:显示 Chaos 版本信息。-v, -verbose:启用详细输出模式。-up, -update:更新 Chaos 至最新版本。-duc, -disable-update-check:禁用自动更新检查。
使用示例
运行以下命令以静默模式查找 uber.com 的子域名:
chaos -d uber.com -silent
输出示例如下:
restaurants.uber.com
testcdn.uber.com
approvalservice.uber.com
zoom-logs.uber.com
eastwood.uber.com
meh.uber.com
webview.uber.com
kiosk-api.uber.com
utmbeta-staging.uber.com
getmatched-staging.uber.com
logs.uber.com
dca1.cfe.uber.com
cn-staging.uber.com
frontends-primary.uber.com
eng.uber.com
guest.uber.com
kiosk-home-staging.uber.com
Chaos-client 在需要快速、简便的资产发现和子域名收集任务中有独特优势,简直是”懒人的福音“。
二、子域名爬取
子域名爬取是指通过第三方 API、开源情报(OSINT)、历史 DNS 记录等多种渠道,从互联网上收集目标域名的子域信息。与字典或字母表爆破不同,这类方法无需主动探测目标,主要依赖公开的数据源,因此得到的子域名通常称为“种子域名”或“初始域名”。
使用这些工具时,为提升数据获取的全面性,建议在配置中尽可能填入多个可用的 API Key。
工具推荐
Amass
Amass 是一款功能强大的被动信息收集工具,适用于大规模的子域名爬取,但相较于其他工具而言运行时间较长。它通过多个被动数据源整合收集目标域名的公开子域数据,是进行深度信息收集的利器。
-
用法示例:
amass enum --passive -d tesla.com
Subfinder
Subfinder 是一款速度较快的子域名收集工具,支持多种数据源,包括 Shodan、Censys、VirusTotal 等。它以较高的速度和灵活的数据源集成优势,适合于快速构建初步的子域资产清单。
-
用法示例:
subfinder -d tesla.com -all
OneForAll
OneForAll 是一款功能丰富的子域名收集工具,支持多个数据源整合,还具备基于字典的子域名爆破能力,适合深度的子域名信息收集。不过,由于其会产生大量数据,包含部分冗余信息,因此需要额外的数据过滤和清洗。
-
用法示例:
oneforall --target tesla.com --full
在实际操作中,建议根据任务的具体需求选择不同的工具组合。例如,在前期快速构建目标域资产清单时,可以先用 Subfinder 获取初步结果,然后再通过 Amass 和 OneForAll 进行更全面的深度收集和数据验证。此外,使用不同工具的结果交叉验证可以提高收集结果的完整性和准确性,为后续的漏洞扫描和渗透测试打下坚实的基础。
三、子域名爆破
子域名爆破是深入挖掘目标域名下潜在子域名的核心步骤。通过对域名的不同层级进行逐层爆破,可以深入挖掘到难以通过其他方式收集的域名信息,使得渗透测试的覆盖面更广。
情形一:基础爆破
针对根域名(如 example.com)进行全量的子域名爆破,适用于查找常见的二级子域名。此方法可采用规模较大的字典,以提升发现的全面性。
-
推荐字典:可使用 jhaddix 的 200 万级子域字典 下载链接。
-
PureDNS 使用示例:
puredns bruteforce all.txt example.com -r resolvers.txt -
ShuffleDNS 使用示例:
shuffledns -d example.com -w all.txt -r resolvers.txt -mode bruteforce
建议:确保
resolvers.txt文件的解析器列表保持更新,可参考 trickest 的解析器列表 以提高解析效率和准确性。
情形二:精准爆破
有些子域名可能具有特定的业务功能和结构(如 sso-admin.v2.test.example.com 或 uat-test.dev.example.com),这类多级子域名通常不在常规字典中。为此,可以使用小规模的自定义字典来对特定子域进行精准爆破。
-
Ffuf 精准爆破:
ffuf -w words.txt -u https://sso-FUZZ.example.com -c -t 50 -mc all -fs提示:如目标域名对请求量有限制,可调整
-t参数中的线程数量来控制请求频率。 -
动态生成特定前缀字典:通过
sed命令生成带有指定前缀的自定义字典(如sso-前缀),再用 PureDNS 进行解析。sed 's/^/sso-/' words.txt > new_words.txtpuredns bruteforce new_words.txt example.com -r resolvers.txt
此外,可以使用图形化工具 FuzzDomain 进行子域名爆破,支持直观的操作与可视化输出。 FuzzDomain 项目地址:https://github.com/Chora10/FuzzDomain。
如图,成功fuzz出来一个 sso-dev.tesla.com 域名:

情形三:规则生成
在获取到部分种子域名后,常能观察到目标子域命名规律。例如,某些系统的测试环境、开发环境域名可能具有类似的命名模式。可以基于已有域名自动生成更多符合规律的候选子域。
-
示例:
- 已有
admin.example.com可以推测出test-admin.example.com、dev-admin.example.com等。 - 已知
app01.example.com可尝试生成app02.example.com等连续子域。
- 已有
-
DNSGen 配合 PureDNS 使用:
cat subs.txt | dnsgen - | puredns resolve --resolvers resolvers.txt说明:
DNSGen会自动生成更多符合命名模式的域名组合,再由PureDNS解析。可以重复多次生成与解析过程,最大化发现潜在子域。
情形四:正则推断爆破
当已收集到大量种子域名且发现其命名存在一定规律时,可以采用自动生成正则表达式来推断并生成可能存在的子域名。正则推断爆破通过分析子域的命名模式生成推测的候选子域,再逐一验证其解析状态,进一步扩展收集范围。
-
Regulator 工具:Regulator 利用机器学习归纳子域名的特征模式,并基于模式生成新的潜在子域,适合处理大规模的已知子域名数据。
python3 main.py -t example.com -f example.subs.txt -o example.output.txt说明:最后一种和情形3有点像,但是又不完全一样,自动归纳出可以表示这个域名的正则表达式,然后自动推断出可能存在的子域名,然后进行DNS解析,重复刚才的操作,再次生成,再次解析。整个过程最好重复2到3次。
结语
本文通过详细讲解多个工具的使用与适配情形,为渗透测试人员在子域名收集阶段提供多样化的思路和方法。资产收集是信息收集的关键步骤之一,通过合理应用上述工具,可以显著提升测试效率与目标资产的覆盖率,为后续的渗透测试打下坚实基础。
原文 https://blog.csdn.net/2301_79518550/article/details/143726489