使用 Gobuster 执行基础 DNS 子域名扫描

Beginner
立即练习

引言

在网络安全和渗透测试领域,发现子域名是侦察过程中的关键一步。子域名通常托管着不同的应用程序、服务或开发环境,这些可能暴露主域名上不存在的额外攻击面或漏洞。Gobuster 是一个流行的工具,用于暴力破解 URI(目录和文件)、DNS 子域名、Amazon S3 存储桶和虚拟主机名。

本实验将指导你完成使用 Gobuster 执行基本 DNS 子域名扫描的过程。你将学习如何选择目标、选择有效的单词列表、构建带有必要标志的 Gobuster 命令、执行扫描以及解释结果以识别活动的子域名。在本实验结束时,你将对如何利用 Gobuster 进行子域名枚举有一个基础的了解,这是任何安全专业人士或爱好者的一项重要技能。

选择目标域名

在此步骤中,你将为子域名扫描选择一个目标域名。出于教育目的,我们将使用 scanme.nmap.org 作为目标。该域名由 Nmap 提供用于测试目的,扫描它是安全的。

首先,请确保 Gobuster 已安装。如果未安装,你可以使用 apt 进行安装。

sudo apt update
sudo apt install -y gobuster

安装完成后,你可以通过检查其版本来验证安装:

gobuster -v

你应该会看到类似以下的输出,表明 Gobuster 已安装:

gobuster v3.x

现在,让我们确认我们的目标域名。我们将使用 scanme.nmap.org

echo "Our target domain is: scanme.nmap.org"

此命令仅将目标域名打印到你的终端,以确认你的选择。

选择子域名单词列表

在此步骤中,你将为子域名扫描选择一个合适的单词列表。单词列表是一个包含常见子域名列表的文件(例如 wwwmaildevadmin)。Gobuster 将尝试解析单词列表中的每个名称与你的目标域名组合(例如 www.scanme.nmap.orgmail.scanme.nmap.org)。

在本实验中,我们将使用一个在渗透测试发行版中常见的单词列表,或者我们可以下载一个。我们将使用 SecLists 项目中的 dns.txt 单词列表,这是一个用于 DNS 枚举的通用列表。

首先,请确保我们已克隆 SecLists 仓库或拥有类似的单词列表。如果没有,我们可以下载一个特定的单词列表。

wget -nc https://raw.githubusercontent.com/danielmiessler/SecLists/master/Discovery/DNS/dns.txt -P ~/project/

-nc 标志确保如果文件已存在,wget 不会重新下载它,这在你多次运行命令时很有用。-P ~/project/ 标志指定了保存文件的目录。

下载后,请验证单词列表文件是否存在于你的 ~/project/ 目录中:

ls -l ~/project/dns.txt

你应该会看到类似以下的输出,确认文件的存在:

-rw-r--r-- 1 labex labex XXXX Month Day HH:MM ~/project/dns.txt

这确认 dns.txt 已准备好作为我们的单词列表使用。

构建基础的 gobuster dns 命令

在此步骤中,你将构建一个用于执行 DNS 子域名扫描的基础 Gobuster 命令。Gobuster 使用不同的模式进行不同类型的暴力破解。对于 DNS 子域名枚举,我们使用 dns 模式。

DNS 扫描的基本标志是:

  • -d: 指定目标域名。
  • -w: 指定单词列表的路径。

因此,基本命令结构将是 gobuster dns -d <target_domain> -w <wordlist_path>

让我们使用我们选择的目标 scanme.nmap.org 和单词列表 ~/project/dns.txt 来组装命令。

echo "The Gobuster command will be: gobuster dns -d scanme.nmap.org -w ~/project/dns.txt"

此命令将打印出你即将执行的完整 Gobuster 命令。在运行任何工具之前理解命令是有效使用的关键。

使用 -d 和 -w 标志执行扫描

在此步骤中,你将使用上一步构建的命令执行 Gobuster DNS 子域名扫描。这将启动暴力破解过程,Gobuster 会尝试将单词列表中的每个条目解析为目标域名的子域名。

在你的终端中执行以下命令:

gobuster dns -d scanme.nmap.org -w ~/project/dns.txt

扫描运行时,Gobuster 将显示它成功解析的子域名。输出将显示解析出的子域名及其 IP 地址。

示例输出:

===============================================================
Gobuster v3.x
===============================================================
[+] Url: scanme.nmap.org
[+] Threads: 10
[+] Wordlist: /home/labex/project/dns.txt
[+] Status codes: 200,204,301,302,307,401,403,405,500
[+] Timeout: 10s
===============================================================
2024/01/01 12:00:00 Starting gobuster in DNS mode
===============================================================
Found: www.scanme.nmap.org (XXX.XXX.XXX.XXX)
Found: test.scanme.nmap.org (XXX.XXX.XXX.XXX)
Found: mail.scanme.nmap.org (XXX.XXX.XXX.XXX)
...

扫描可能需要一些时间,具体取决于单词列表的大小和网络状况。让它完成,以获取找到的子域名的完整列表。

分析找到的子域名列表

在最后一步中,你将分析 Gobuster 扫描的输出。输出中的 Found: 行表示成功解析的子域名。这些是存在的且具有相应 DNS 记录的子域名。

回顾上一步的输出。查找以 Found: 开头,后面跟着子域名及其 IP 地址的行。

例如,你可能会看到:

  • Found: www.scanme.nmap.org (XXX.XXX.XXX.XXX)
  • Found: test.scanme.nmap.org (XXX.XXX.XXX.XXX)
  • Found: mail.scanme.nmap.org (XXX.XXX.XXX.XXX)

每一项都代表一个潜在的入口点或与目标域名相关的有趣资产。在实际场景中,你随后会进一步调查这些子域名,例如在浏览器中访问它们、执行端口扫描或查找 Web 漏洞。

为了确认你已分析了输出,让我们检查一个常见的子域名,如 www

echo "Look for 'www.scanme.nmap.org' in the Gobuster output."

此步骤强调了审查侦察工具结果的重要性。Gobuster 的原始输出提供了宝贵的信息,可以指导你后续的安全评估。

总结

在此实验中,你成功使用 Gobuster 执行了基本的 DNS 子域名扫描。你学会了如何:

  • 选择目标域名 (scanme.nmap.org)。
  • 选择并下载合适的单词列表 (dns.txt)。
  • 使用 dns 模式以及 -d (domain) 和 -w (wordlist) 标志构建 Gobuster 命令。
  • 执行扫描并观察已发现子域名的实时输出。
  • 分析结果以识别活动的子域名并理解其重要性。

这项基础技能对于网络安全中的侦察至关重要,它能让你扩展对目标攻击面的理解。你可以通过尝试不同的单词列表、增加线程数 (-t) 或指定自定义 DNS 服务器 (--resolver) 来进一步增强你的 Gobuster 扫描。