这个房间重点介绍 Gobuster,这是一种用于枚举的进攻性安全工具。
任务1:介绍
这个房间专注于进攻性安全工具 Gobuster,通常用于侦察。我们将探索此工具如何枚举 Web 目录、子域和虚拟主机。此房间将采用动手实践方法,您可以按照解释的命令进行操作,并自行执行这些命令以查看结果。
学习目标
- 了解枚举的基础知识
- 如何使用 Gobuster 枚举 Web 目录和文件
- 如何使用 Gobuster 枚举子域
- 如何使用 Gobuster 枚举虚拟主机
- 如何使用 wordlist
任务2:环境和设置
对于此房间,我们将使用 Ubuntu 20.04 VM 作为 Web 服务器。此 Web 服务器托管多个子域和虚拟主机。Web 服务器还安装了两个内容管理系统 (CMS)。它们是 Wordpress 和 Joomla。
在这个房间里,我们将使用已经安装了 Gobuster 的 AttackBox 来枚举 Web 服务器目录和子域。但是,如果您更喜欢使用自己的机器而不是 AttackBox,则必须连接到 TryHackMe VPN 并安装 Gobuster。您可以在自己的机器上找到 Gobuster 的安装说明,请访问 Gobuster 的官方 GitHub 存储库。
您可以通过单击下面的按钮启动 Web 服务器。VM 大约需要 2 分钟才能启动。不需要直接访问此 Web 服务器。要启动 AttackBox,请单击页面顶部的按钮。Start Machine
Start AttackBox
重要提示:我们在本地网络中工作,并在 Web 服务器上设有 DNS 服务器。要确保我们可以解析整个聊天室中使用的域,您需要更改文件:/etc/systemd/resolved.conf
- 在 AttackBox 上打开一个终端并输入命令: 。
sudo nano /etc/systemd/resolved.conf
- 删除前面的 the 并在其后添加。
#
DNS=
MACHINE_IP
- 按 Ctrl+O,然后按 Enter,然后按 Ctrl+X 退出编辑器,保存文件。
- 输入命令 。
sudo systemctl restart systemd-resolved
这里我直接用的自己kali,kali上没有gobuster,所以的安装
apt install gobuster
我kali的域名解析文件位置是在/etc/resolv.conf
这里是错误的修改,修改正确的在下面有。
重启服务,这里kali中使用的是传统的resolv.conf
文件而不是 systemd-resolved
,你可以检查并重启 networking
服务:
systemctl restart network.service
任务3:Gobuster:简介
Gobuster 是用 Golang 编写的开源进攻工具。它使用特定的单词列表并处理传入的响应,通过暴力列举 Web 目录、DNS 子域、虚拟主机、Amazon S3 存储桶和 Google Cloud Storage。许多安全专业人员使用此工具进行渗透测试、漏洞赏金搜寻和网络安全评估。看看道德黑客的阶段,我们可以将 Gobuster 置于侦察和扫描阶段之间。
在探索 Gobuster 之前,我们先简单讨论一下 enumeration 和 Brute Force 的概念。
Enumeration列举
枚举是列出所有可用资源的行为,无论它们是否可访问。例如,Gobuster 枚举 Web 目录。
Brute Force蛮力
蛮力是尝试所有可能性直到找到匹配项的行为。这就像有十把钥匙,然后把它们都放在一把锁上,直到一把适合。Gobuster 为此使用单词列表。
Gobuster:概述
默认情况下,Gobuster 包含在 Kali Linux 等发行版中。让我们先看看 Gobuster 的帮助页面。此帮助页面为我们提供了其功能和选项的良好概述。
输入以下命令:。您应该获得 Gobuster 工具的帮助页面,如下所示:gobuster --help
dir:使用目录/文件枚举模式。这通常用于扫描目标站点的目录或文件,帮助发现未公开的资源或页面。
dns:使用 DNS 子域名枚举模式。该模式会尝试枚举与给定域名相关的子域,寻找可能的子域(如
subdomain.example.com
)并帮助发现网络基础设施。fuzz:使用模糊测试模式。该模式会在 URL、请求头和请求体中替换 "FUZZ" 关键字,用于发现潜在的漏洞,通常用于渗透测试和漏洞扫描。
gcs:使用 Google Cloud Storage(GCS)存储桶枚举模式。这种模式用于枚举 Google Cloud Storage 中的存储桶,帮助发现可能暴露的云存储资源。
help:显示帮助信息,列出所有可用的命令和用法说明。
s3:使用 AWS S3 存储桶枚举模式。该模式用于扫描并枚举 AWS S3 存储桶,以发现可能的公共存储桶,帮助检测存储桶配置是否暴露敏感数据。
tftp:使用 TFTP(Trivial File Transfer Protocol)枚举模式。TFTP 是一个简单的文件传输协议,通常用于设备配置和系统管理。这个模式用于扫描 TFTP 服务,找出是否有未授权访问的文件。
version:显示当前版本信息。该命令会显示正在使用的工具或软件的版本。
vhost:使用虚拟主机枚举模式。这通常用于识别服务器上的虚拟主机(vHost),通常你需要使用目标的 IP 地址作为 URL 参数。通过枚举不同的虚拟主机,可以发现隐藏的或未公开的网站。
帮助页面包含多个部分:
- 用法:显示有关如何使用该命令的语法。
- 可用命令:可以使用多个命令来帮助我们枚举目录、文件、DNS 子域、Google Cloud Storage 存储桶和 Amazon AWS S3 存储桶。在整个房间里,我们将重点介绍 、 和 命令。我们将在以下任务中介绍它们中的每一个。
dir
dns
vhost
- 标志:这些是我们可以配置以自定义命令的特定选项。让我们看看我们在这个房间里经常使用的标志:
-
短标志 长旗 描述 -t
--threads
此标志配置用于扫描的线程数。这些线程中的每一个都以轻微的延迟发送请求。默认线程数为 10。使用大型单词列表时,此数字可能会很慢。您可以根据可用的系统资源增加或减少线程数。 -w
--wordlist
该标志配置用于迭代的 wordlist。每个单词列表条目都附加到您在命令中包含的 URL。 --delay
此标志定义在发送请求之间等待的时间。一些 Web 服务器包括通过查看在特定时间段内收到的请求数来检测枚举的机制。我们可以增加后续请求之间的延迟,使其看起来像正常的 Web 流量。 --debug
此标志可帮助我们在命令给出意外错误时进行故障排除。 -o
--output
此标志将枚举结果写入我们选择的文件。
例
让我们看一个示例,说明我们如何同时使用这些命令和标志来枚举 Web 目录:
gobuster dir -u "http://www.example.thm/" -w /usr/share/wordlists/dirb/small.txt -t 64
gobuster dir
表示我们将使用 directory and file 枚举模式。-u "http://www.example.thm/"
告诉 Gobuster 目标 URL 是 http://example.thm/。-w /usr/share/wordlists/dirb/small.txt
指示 Gobuster 使用 small.txt wordlist 来暴力破解 Web 目录。Gobuster 将使用 wordlist 中的每个条目来形成一个新的 URL 并向该 URL 发送 GET 请求。如果单词列表的第一个条目是图像,Gobuster 将向 http://example.thm/images/ 发送 GET 请求。-t 64
将 Gobuster 将使用的线程数设置为 64。这大大提高了性能。
现在我们已经快速了解了 Gobuster,让我们在以下任务中探索不同的模式及其使用案例。
任务4:用例:目录和文件枚举
Gobuster 有一种模式,允许用户枚举网站目录及其文件。
当您执行渗透测试并希望查看网站的目录结构是什么以及它包含哪些文件时,此模式非常有用。
通常,网站和 Web 应用程序的目录结构遵循特定的约定,这使得它们容易受到使用单词列表的暴力破解。例如,托管 WordPress 的 Web 服务器上的目录结构如下所示:dir
Gobuster 功能强大,因为它允许您扫描网站并返回状态代码。这些状态代码会立即告诉您,作为外部用户,您是否可以请求该目录。
帮助
如果您想全面了解 Gobuster 命令可以提供的功能,您可以查看帮助页面。看到 dir 命令的大量帮助页面可能会有点吓人。因此,我们将重点介绍这个房间里最重要的标志。键入以下命令以显示帮助:。dir
gobuster dir --help
gobuster dir
如何使用 dir 模式
要在模式下运行 Gobuster,请使用以下命令格式:dir
gobuster dir -u "http://www.example.thm" -w /path/to/wordlist
请注意,除了dir
关键字之外,该命令还包括 flags -u
和-w
。这两个标志是 Gobuster 目录枚举工作所必需的。让我们看一个如何使用 Gobuster 模式枚举目录和文件的dir
实际示例:
gobuster dir -u "http://www.example.thm" -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -r
此命令使用 wordlist directory-list-2.3-medium.txt扫描位于 www.example.thm 的所有目录。让我们仔细看看命令的每个部分:
gobuster dir
:配置 Gobuster 使用目录和文件枚举模式。-u http://www.example.thm
:- 该 URL 将是 Gobuster 开始查找的基本路径。因此,上面的 URL 使用的是根 Web 目录。例如,在 Linux 上的典型 Apache 安装中,这是 .因此,如果您有一个 “resources” 目录,并且想要枚举该目录,则可以将 URL 设置为 .您也可以将其视为 。
/var/www/html
http://www.example.thm/resources
http://www.example.thm/path/to/folder
- URL 必须包含使用的协议,在本例中为 HTTP。这很重要,也是必需的。如果传递了错误的协议,扫描将失败。
- 在 URL 的主机部分,您可以填写 IP 或 HOSTNAME。但是,值得一提的是,在使用 IP 时,您可能会定位与预期不同的网站。Web 服务器可以使用一个 IP 托管多个网站(这种技术也称为虚拟托管)。如果要确定,请使用 HOSTNAME。
- Gobuster 不会递归枚举。因此,如果结果显示您感兴趣的目录路径,则必须枚举该特定目录。
- 该 URL 将是 Gobuster 开始查找的基本路径。因此,上面的 URL 使用的是根 Web 目录。例如,在 Linux 上的典型 Apache 安装中,这是 .因此,如果您有一个 “resources” 目录,并且想要枚举该目录,则可以将 URL 设置为 .您也可以将其视为 。
-w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
配置 Gobuster 以使用 directory-list-2.3-medium.txt wordlist 进行枚举。单词列表的每个条目都附加到配置的 URL 中。-r
将 Gobuster 配置为跟踪从发送的请求中收到的重定向响应。如果收到状态代码 301,Gobuster 将导航到响应中包含的重定向 URL。
让我们看第二个示例,其中我们使用-x
标志来指定要枚举的文件类型:
gobuster dir -u "http://www.example.thm" -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x .php,.js
此命令将使用 wordlist directory-list-2.3-medium.txt查找位于 http://example.thm 的目录。除了目录列表之外,此命令还列出了所有具有 .php 或 .js 扩展名的文件。
gobuster dir -u "http://www.offensivetools.thm" -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -r
这是正确的配置文件。
这里我看了提示,s开头
http://www.offensivetools.thm/secret/flag.js
任务5:使用案例:子域枚举
我们将重点介绍的下一个模式是dns
模式。此模式允许 Gobuster 暴力破解子域。在渗透测试期间,检查目标顶级域的子域至关重要。仅仅因为某些内容在常规域中被修补,并不意味着它也在子域中被修补。可能存在利用这些子域中某个漏洞的机会。例如,如果 TryHackMe 拥有 tryhackme.thm 和 mobile.tryhackme.thm,则 mobile.tryhackme.thm 中可能存在 tryhackme.thm 中不存在的漏洞。这就是为什么搜索子域也很重要的原因!
帮助
如果您想全面了解 Gobuster dns 命令可以提供的功能,您可以查看帮助页面。看到该dns
命令的大量帮助页面可能会令人生畏。因此,我们将专注于这个房间里最重要的标志。键入以下命令以显示帮助:gobuster dns --help
该dns
模式提供的标志数比该dir
模式少。但这些足以涵盖大多数 DNS 子域枚举场景。让我们看一下一些常用的标志:
旗 | 长旗 | 描述 |
---|---|---|
|
| 显示 CNAME 记录(不能与标志一起使用)。 |
|
| 包含此标志会显示域和子域解析到的 IP 地址。 |
|
| 此标志配置用于解析的自定义 DNS 服务器。 |
|
| 此标志配置要枚举的域。 |
如何使用 DNS 模式
要在 dns 模式下运行 Gobuster,请使用以下命令语法:gobuster dns -d example.thm -w /path/to/wordlist
请注意,除了关键字dns
之外,该命令还包括 -d
和-w
。这两个标志是 Gobuster 子域枚举工作所必需的。让我们看一个如何使用 Gobuster dns 模式枚举子域的示例:
gobuster dns -d example.thm -w /usr/share/wordlists/SecLists/Discovery/DNS/subdomains-top1million-5000.txt
gobuster dns
枚举已配置域上的子域。-d example.thm
将 target 设置为 example.thm 域。-w /usr/share/wordlists/SecLists/Discovery/DNS/subdomains-top1million-5000.txt
将 WordList 设置为 Subdomains-top1million-5000.txt。Gobuster 使用此列表的每个条目来构建新的 DNS 查询。如果此列表的第一个条目是 'all',则查询将为 all.example.thm。
继续并自行输入命令。您应该得到以下输出:
gobuster dns -d example.thm -w /usr/share/wordlists/SecLists/Discovery/DNS/subdomains-top1million-5000.txt
没有这个字典。难崩。
所以我这里就去下载一下这个seclists。
这里可以发现我第一此没有下载成功,是因为我的resolv.conf文件没有改回之前网关导致的。改回原来的网关就行了。
接着又改回实验的ip地址开始操作。
重新启动上面的命令
任务6:用例:Vhost 枚举
我们要关注的最后一个也是最后一个模式是vhost
模式。此模式允许 Gobuster 暴力破解虚拟主机。虚拟主机是同一台计算机上的不同网站。有时,它们看起来像子域,但不要被欺骗!虚拟主机基于 IP,并在同一台服务器上运行。子域在 DNS 中设置。vhost和
dns
模式的区别在于 Gobuster 的扫描方式:
vhost
模式将导航到通过将配置的 HOSTNAME (-u 标志) 与 wordlist 条目组合在一起创建的 URL。dns
模式将对通过将配置的域名(-d 标志)与 wordlist 条目组合在一起而创建的 FQDN 进行 DNS 查找。
帮助
如果您想全面了解 Gobuster 的vhost
命令可以提供的功能,您可以查看帮助页面。看到 vhost 命令的大量帮助页面可能会令人生畏。因此,我们将专注于这个房间里最重要的标志。键入以下命令以显示帮助:gobuster vhost --help
该vhost
模式提供类似于 dir 模式的标志。让我们看一下一些常用的标志:
短标志 | 长旗 | 描述 |
---|---|---|
|
| 指定暴力破解虚拟主机名的基 URL(目标域)。 |
| 将基本域附加到单词列表中的每个单词(例如,word.example.com)。 | |
|
| 指定要用于请求的 HTTP 方法(例如,GET、POST)。 |
| 将域附加到每个单词列表条目以形成有效的主机名(如果未明确提供,则很有用)。 | |
| 根据响应正文的长度排除结果(用于筛选掉不需要的响应)。 | |
|
| 遵循 HTTP 重定向(对于子域可能重定向的情况很有用)。 |
如何使用 vhost 模式
要在vhost
模式下运行 Gobuster,请键入以下命令:
gobuster vhost -u "http://example.thm" -w /path/to/wordlist
请注意,除了关键字之外,该命令还包括 -u
和-w
。这两个标志是 Gobuster vhost 枚举工作所必需的。让我们看一个如何使用 Gobuster的 vhost
模式枚举虚拟主机的实际示例:

--domain
和
--append-domain
。我们需要查看
Gobuster 发送的 Web 请求,以更好地了解这些标志是如何工作的。下面,您可以看到对
www.example.thm 的基本 GET 请求:

obuster 将发送多个请求,每次都会更改请求的一部分。在此示例中,的值为 www.example.thm。我们可以将其分为三个部分:Host:
Host:
www
:这是子域。这是 Gobuster 将用配置的单词列表的每个条目填充的部分。.example
:这是二级域。您可以使用 flag 进行配置(这需要与顶级域一起配置)。--domain
.thm
:这是顶级域。您可以使用 flag 进行配置(这需要与二级域一起配置)。--domain
现在我们知道了 Gobuster 是如何发送请求的,让我们分解命令并更仔细地检查每个标志:
gobuster vhost
指示 Gobuster 枚举虚拟主机。-u "http://10.10.54.209"
将 URL 设置为浏览到 10.10.54.209。-w /usr/share/wordlists/SecLists/Discovery/DNS/subdomains-top1million-5000.txt
配置 Gobuster 以使用 subdomains-top1million-5000.txt wordlist。Gobuster 将 wordlist 中的每个条目附加到配置的域中。如果没有明确配置该标志的域,Gobuster 将从 URL 中提取它。例如,test.example.thm、help.example.thm 等。如果找到任何子域名,Gobuster 会在终端中向您报告。--domain
--domain example.thm
将请求部分中的顶级域和二级域设置为 example.thm。Hostname:
--append-domain
将配置的域附加到 WordList 中的每个条目。如果未配置此标志,则设置的主机名将为 www、blog 等。这将导致命令无法正常工作并显示误报。--exclude-length
筛选我们从发送的 Web 请求中获得的响应。使用此标志,我们可以过滤掉误报。如果您在没有此标志的情况下运行命令,您会注意到您将收到很多误报,例如“找到:Orion.example.thm 状态:404 [大小:279]”或“找到:pm.example.thm 状态:404 [大小:276]”。这些误报通常具有相似的响应大小,因此我们可以使用它来筛选掉大多数误报。我们预计会得到 200 OK 响应才能获得真正的阳性。然而,也有例外,但深入探讨这些并不在本房间的范围内。



任务7:结论
这个房间教会了我们关于进攻工具 Gobuster 的知识。此工具枚举目录、文件、DNS 子域和虚拟主机。
我们已经介绍了 Gobuster 工具的三种不同模式:
dns
mode:枚举 DNS 子域。dir
mode:枚举目录。vhost
mode:枚举虚拟主机。
对于每种模式,我们介绍了要配置所需的标志,以及用于微调所需结果的其他可选标志。
我们强调了虚拟主机和子域之间的区别以及 Gobuster 扫描这些内容的方式:
dns
模式使用 DNS 服务通过配置的 domain 和 wordlist 来扫描子域。vhost
模式使用配置的 URL 和 wordlist 发送 Web 请求。
在每项任务结束时,我们直接应用通过动手练习学到的技能。