【THM】Gobuster:The Basics(Gobuster基础知识)-学习

本文相关的TryHackMe实验房间链接:https://tryhackme.com/r/room/gobusterthebasics

本文相关内容:本文将重点介绍 Gobuster,一种用于枚举的攻击性安全工具。

image-20250107223620943

介绍

image-20250110235807966

本文将重点介绍进攻性安全工具Gobuster ,它通常用于信息侦察。我们将探讨该工具如何枚举 Web 目录、子域和虚拟主机。本文的实验内容将遵循实践方法,你可以根据本文所解释的一些命令进行操作并亲自执行它们以查看结果。

学习目标

  • 了解关于枚举的基础知识;
  • 如何使用Gobuster枚举 Web 目录和文件;
  • 如何使用Gobuster枚举子域(subdomains);
  • 如何使用Gobuster枚举虚拟主机(virtual hosts);
  • 如何使用字典(wordlist)。

部署实验环境

对于本文的实验内容,我们将使用TryHackMe所提供的Ubuntu 20.04 VM作为目标 Web 服务器,该Web服务器托管了多个子域和虚拟主机。此服务器还安装了两个内容管理系统 (CMS-content management systems),它们分别是 Wordpress 和 Joomla。

在本文中,我们将使用已经安装了Gobuster的AttackBox攻击机(由TryHackMe提供)来枚举目标Web服务器的目录和子域。但是,如果你更喜欢使用自己的本地计算机作为攻击机而不是AttackBox,那么你必须连接到TryHackMe所提供的VPN节点并自行安装Gobuster工具。你可以在Gobuster的GitHub存储库中找到如何在你自己的本地计算机上安装 Gobuster 工具的说明。

你可以在与本文相关的TryHackMe实验房间中,通过单击下面的Start Machine按钮来启动目标 Web 服务器。 这个目标VM启动时间大约需要2分钟。当然,我们并不需要直接访问这个目标虚拟机(充当目标Web服务器),只需要让它保持活跃状态即可。

image-20250111000237442

注意:我们在本地网络中工作,目标Web服务器上有一个DNS服务器,为了确保我们可以解析在整个实验环境中所使用的域名,我们可能需要更改攻击机上的以下文件的内容——/etc/systemd/resolved.conf

  • 在 AttackBox 上打开终端并输入命令: sudo nano /etc/systemd/resolved.conf
  • 去掉DNS =前面的# ,后面加上MACHINE_IP目标ip 。
  • 按 CTRL+O ,然后按 ENTER 保存文件,然后按 CTRL+X 退出编辑器。
  • 在终端输入命令 sudo systemctl restart systemd-resolved

该文件的内容应该如下所示:

root@tryhackme:~# cat /etc/systemd/resolved.conf
[Resolve]
DNS=MACHINE_IP
#FallbackDNS=
#Domains=
#LLMNR=no
#MulticastDNS=no

tips:我们需要将目标机器的ip(MACHINE_IP)分配给 /etc/systemd/resolved.conf 文件中的 DNS 变量并在攻击机上重新启动 systemd 服务。

或者我们也可以使用以下方式来配置DNS:

  • 在 AttackBox 上打开一个终端并输入命令: sudo nano /etc/resolv-dnsmasq
  • 插入 nameserver MACHINE_IP 作为第一行。
  • 按 CTRL+O,然后按 ENTER 保存文件,然后按 CTRL+X 退出编辑器。
  • 输入命令 /etc/init.d/dnsmasq restart 重新启动 Dnsmasq 服务。

此时的文件内容应该为:

root@tryhackme:~# cat /etc/resolv-dnsmasq 
nameserver MACHINE_IP
nameserver 169.254.169.253

image-20250525000322548

Gobuster简介

Gobuster是一款用Golang编写的开源攻击工具。它可以使用特定的单词列表(密码字典)并处理传入的响应,可以通过暴力猜解方式来枚举Web目录、 DNS子域、虚拟主机、Amazon S3 存储桶和 Google 云存储桶。许多安全专业人员选择使用此工具进行渗透测试、漏洞赏金狩猎和网络安全评估。纵观道德黑客攻击的各个阶段,我们可以将Gobuster置于信息侦察阶段和扫描阶段之间。

在开始探索Gobuster之前,我们可以先简单讨论一下枚举和暴力猜解的概念。

Enumeration 枚举

枚举是指列出所有可用资源的行为,无论它们是否可以被访问。例如,我们可以使用Gobuster枚举 Web 目录。

Brute Force 暴力猜解

暴力猜解是指尝试每一种可能性直到找到成功的匹配项的行为,这就像你有十把钥匙,然后把它们全部用在开一把锁上,直到找到一把合适的钥匙为止。Gobuster需要使用单词列表(密码字典-wordlists)来实现这样的暴力猜解攻击。

概述

Gobuster 默认被包含在 Kali Linux等发行版本的系统中。让我们先查看一下Gobuster的帮助页面,此帮助页面可以为我们提供关于Gobuster功能和参数选项的良好概述。

输入命令gobuster --help,你应该可以获得Gobuster工具的帮助页面,如下所示:

root@tryhackme:~# gobuster --help
Usage:
  gobuster [command]

Available Commands:
  completion  Generate the autocompletion script for the specified shell
  dir         Uses directory/file enumeration mode
  dns         Uses DNS subdomain enumeration mode
  fuzz        Uses fuzzing mode. Replaces the keyword FUZZ in the URL, Headers and the request body
  gcs         Uses gcs bucket enumeration mode
  help        Help about any command
  s3          Uses aws bucket enumeration mode
  tftp        Uses TFTP enumeration mode
  version     shows the current version
  vhost       Uses VHOST enumeration mode (you most probably want to use the IP address as the URL parameter)

Flags:
      --debug                 Enable debug output
      --delay duration        Time each thread waits between requests (e.g. 1500ms)
  -h, --help                  help for gobuster
      --no-color              Disable color output
      --no-error              Don't display errors
  -z, --no-progress           Don't display progress
  -o, --output string         Output file to write results to (defaults to stdout)
  -p, --pattern string        File containing replacement patterns
  -q, --quiet                 Don't print the banner and other noise
  -t, --threads int           Number of concurrent threads (default 10)
  -v, --verbose               Verbose output (errors)
  -w, --wordlist string       Path to the wordlist. Set to - to use STDIN.
      --wordlist-offset int   Resume from a given position in the wordlist (defaults to 0)

Use "gobuster [command] --help" for more information about a command.

这个帮助页面包含了多个部分:

  • 用法(Usage):显示如何使用该命令的语法。

  • 可用命令:有多个命令可以帮助我们枚举目录、文件、DNS子域、Google 云存储桶和 Amazon AWS S3存储桶;在本文中,我们将重点关注dirdnsvhost命令,我们将在下文的内容中介绍它们中的每一个。

  • 标志(Flags):我们可以配置用来定义命令的特定选项,让我们看看在本文中经常使用的一些标志:

    Short Flag Long Flag Description 描述
    -t --threads 该标志可以配置用于扫描的线程数,每个线程在发出请求时都会略有延迟。默认的线程数为 10,在使用大型密码字典时,使用这个线程数可能会很慢。你可以根据可用的系统资源适当地增加或减少线程数
    -w --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单词列表来暴力猜解 Web 目录,Gobuster 将使用单词列表中的每个条目来形成一个新的 URL 并向该 URL 发送 GET 请求。如果单词列表的第一个条目是images,Gobuster 就会向 http://example.thm/images/ 发送 GET 请求。
  • -t 64:将Gobuster所使用的线程数设置为 64,这极大地提高了枚举性能。

现在我们已经快速了解了Gobuster,让我们在下文内容中探索Gobuster的不同模式及其具体用例。

答题

我们可以使用什么参数标志来指定目标 URL?

-u

我们应该添加什么命令来使用子域名枚举模式?

dns

image-20250524222031645

用例:目录和文件枚举

Gobuster有一个dir模式,允许用户枚举网站目录及其文件。当你执行渗透测试并希望查看网站的目录结构以及它们包含哪些文件时,此模式非常有用。通常,网站和Web应用程序的目录结构会遵循特定的约定,这使得它们容易受到 使用单词列表的暴力猜解攻击 的影响。例如,托管了WordPress的Web服务器上的目录结构通常会像下面这样:

#以树状图形式显示目录和文件的结构(默认显示当前目录),目录层级最多显示到第 3 层,并且使用 -d 表示只显示当前目录下的所有子目录(不包含文件)。
root@tryhackme:~# tree -L 3 -d
.
└── html
    └── wordpress
        ├── wp-admin
        ├── wp-content
        └── wp-includes

Gobuster非常强大,因为它允许你扫描网站并返回状态码,这些状态码会立即告诉你——作为外部用户,你是否可以请求该目录。

命令帮助页面

如果你想完整地了解Gobuster dir命令可以提供的功能,你可以查看相关的命令帮助页面。查看 dir 命令的完整帮助页面可能会有些令人生畏。因此,我们将重点关注本文将用到的一些重要的参数标志。

键入以下命令以显示帮助页面: gobuster dir --help

Gobuster dir模式的参数介绍:https://github.com/OJ/gobuster?tab=readme-ov-file#dir-mode

许多参数标志可用于微调gobuster dir命令。逐一讨论它们超出了本文的范围,但在下表中,我们已经列出了足以涵盖大多数使用场景的相关参数标志:

Flag Long Flag Description 描述
-c --cookies 该标志将配置一个 cookie 来传递每个请求,例如会话 ID
-x --extensions 该标志将指定要扫描的文件扩展名,例如 .php、.js
-H --headers 该标志将配置与每个请求一起传递的整个标头
-k --no-tls-validation 此标志会在使用 https 时跳过证书检查过程。这种情况经常会发生在 CTF 赛事或THM这样的虚拟实验室中,因为虚拟实验环境中会使用自签名证书。这会导致 TLS 检查过程中出现错误。
-n --no-status 当你不想查看接收到的每个响应的状态码时,就可以设置此标志。这有助于保持屏幕上的输出更加清晰。
-P --password 你可以将此标志与 --username 标志一起设置以执行经过身份验证的请求。当你从用户那里获得凭据时,这会很方便
-s --status-codes 使用此标志,你可以配置要显示的、接收到的响应的状态码,例如 200 或 300-400 等范围
-b --status-codes-blacklist 此标志允许你配置你不想显示的、已接收的响应的状态码。配置此标志会覆盖 -s 标志
-U --username 你可以将此标志与--password标志一起设置以执行经过身份验证的请求。当你从用户那里获得凭据时,这会很方便
-r --follow-redirect 此标志会将Gobuster 配置为遵循收到的重定向,该重定向是对已发送的请求的响应。 HTTP重定向状态码(例如,301 或302)用于表示将客户端重定向到其他URL

拓展

在 Gobuster 工具中,-k 参数的作用是 跳过 SSL 证书验证(即 --no-tls-validation),它的具体含义如下:

用途说明:

  • 当使用 Gobuster 扫描 HTTPS 网站(如 https://example.com)时,默认情况下会验证目标服务器的 SSL/TLS 证书是否有效(例如证书是否由受信任的机构颁发、是否过期等)。

  • 如果目标网站的证书无效或自签名,Gobuster 会因证书验证失败而中断扫描。

  • -k 参数的作用是禁用 SSL 证书验证,允许工具即使遇到无效证书也能继续扫描。

使用场景:

  • 测试使用自签名证书的网站(如本地开发环境)。
  • 扫描证书已过期或配置错误的网站。
  • 避免因证书问题中断扫描流程。

tips:-k 是 Gobuster 中用于绕过 SSL 证书验证的关键参数,适用于需要忽略证书问题的渗透测试场景,但需谨慎使用以确保安全(-k 参数会忽略证书错误,这可能导致出现中间人攻击即MITM攻击的风险,所以最好仅在测试非生产环境时使用此参数)。

使用dir(目录)模式

要在dir模式下运行Gobuster ,请使用以下命令格式:

gobuster dir -u "http://www.example.thm" -w /path/to/wordlist

请注意,除了dir关键字之外,该命令还包含标志-u-w 。 Gobuster目录枚举工作需要这两个标志。让我们查看一个使用Gobusterdir模式枚举目录和文件的实际示例:

gobuster dir -u "http://www.example.thm" -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -r

此命令将使用单词列表directory-list-2.3-medium.txt扫描 www.example.thm 的所有目录,让我们仔细查看这条命令的每个部分:

  • gobuster dir :配置Gobuster使用目录和文件(directory and file)枚举模式。
  • -u http://www.example.thm:该URL将是Gobuster开始查找的基本路径,因此,上面的URL使用的是根Web目录。例如,在Linux上的Apache安装配置中,这会是/var/www/html ,因此,如果你想要枚举resources目录,可以将URL设置为http://www.example.thm/resources,你也可以参考下面这个格式http://www.example.thm/path/to/folder;URL 必须包含所使用的协议,在本例中为HTTP,这是重要且必要的,如果你传递了错误的协议,扫描将会失败;在URL的主机(host)部分,你可以填写IP或HOSTNAME,然而,值得注意的是,在使用IP时,你可能会定位到与期望中不同的网站,一台Web服务器可以使用一个IP托管多个网站(这种技术也被称为虚拟主机),如果你想扫描确切目标的话,请使用主机名;Gobuster不会递归枚举,因此,如果结果显示了你感兴趣的目录路径,你必须再次枚举该特定目录。
  • -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt:将配置Gobuster使用Directory-list-2.3-medium.txt单词列表进行枚举,单词列表的每个条目都将被附加到已配置的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

此命令将使用单词列表directory-list-2.3-medium.txt查找 http://example.thm 的目录。除了列出目录之外,此命令还会列出所有扩展名为.php或.js的文件。

答题

我们必须在命令中添加哪个参数标志才能跳过 TLS 验证?请输入长标志符号。

--no-tls-validation

枚举 www.offensivetools.thm 的目录。哪个目录引起了你的注意?(使用directory-list-2.3-medium.txt 单词列表进行枚举,相关目录以“s”开头。)

gobuster dir -u "http://www.offensivetools.thm" -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt

image-20250525001615892

secret

继续枚举问题 2 中所找到的目录,你会发现一个有趣的文件,它的扩展名为 .js,在该js文件中可以找到的标志是什么?(在命令中使用 -x 参数)

gobuster dir -u "http://www.offensivetools.thm/secret" -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x .php,.js

image-20250525001812752

在攻击机的浏览器中访问:http://www.offensivetools.thm/secret/flag.js

image-20250525001922959

THM{ReconWasASuccess} 。

image-20250525002002025

用例:子域名(Subdomain)枚举

下一个我们将重点关注的模式是dns模式。此模式允许Gobuster暴力猜解子域名。在渗透测试期间,检查目标顶级域的子域至关重要。因为某些内容如果在常规域中进行了修补,并不意味着它在子域中也进行了修补,这就可能存在利用某个子域中的某个漏洞的机会。

例如,如果 TryHackMe 拥有tryhackme.thmmobile.tryhackme.thm 两个子域,则mobile.tryhackme.thm中可能会存在tryhackme.thm中所不存在的漏洞。这就是为什么搜索子域也很重要。

命令帮助页面

如果你想完整地了解Gobuster dns命令可以提供的功能,你可以查看相关的命令帮助页面。查看dns命令的完整帮助页面可能会令人生畏。因此,我们将重点关注本文将会使用的一些重要的参数标志。

键入以下命令以显示相关的帮助页面: gobuster dns --help

Gobuster dns模式的参数介绍:https://github.com/OJ/gobuster?tab=readme-ov-file#dns-mode

dns模式提供的参数标志比dir模式要少,但这些标志足以涵盖大多数DNS子域名枚举的场景。让我们看一下一些常用的参数标志:

Flag Long Flag Description 描述
-c --show-cname 显示 CNAME 记录(不能与-i标志一起使用)
-i --show-ips 使用此标志会显示域和子域解析到的 IP 地址
-r --resolver 此标志将配置用于解析的自定义DNS服务器
-d --domain 此标志将配置你想要枚举的域

如何使用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将目标设置为example.thm域。
  • -w /usr/share/wordlists/SecLists/Discovery/DNS/subdomains-top1million-5000.txt 将单词列表设置为subdomains-top1million-5000.txt ;Gobuster 会使用此单词列表中的每个条目来构建新的 DNS 查询,如果此列表的第一个条目是“all”,则查询将为all.example.thm。

输入并执行上述命令,你应该会得到如下所示的输出结果:

root@tryhackme:~# gobuster dns -d example.thm -w /usr/share/wordlists/SecLists/Discovery/DNS/subdomains-top1million-5000.txt 
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Domain:     example.thm
[+] Threads:    10
[+] Timeout:    1s
[+] Wordlist:   /usr/share/wordlists/SecLists/Discovery/DNS/subdomains-top1million-5000.txt
===============================================================
Starting gobuster in DNS enumeration mode
===============================================================
Found: www.example.thm
                                                                                                                                                            
Found: shop.example.thm
                                                                                                                                                            
Found: academy.example.thm
                                                                                                                                                            
Found: primary.example.thm
                                                                                                                                                            
Progress: 4989 / 4990 (99.98%)
===============================================================
Finished
=============================================================== 

答题

除了 dns 关键字和 -w 标志之外,子域名枚举命令还需要哪个简写的参数标志才能正常工作?

-d

使用本小节中所学到的命令,查询offensivetools.thm域配置了多少个子域?

gobuster dns -d offensivetools.thm -w /usr/share/wordlists/SecLists/Discovery/DNS/subdomains-top1million-5000.txt 

image-20250525002242845

4

image-20250525002303319

用例:虚拟主机(Vhost)枚举

我们将重点介绍的最后一个模式是vhost模式。此模式允许Gobuster暴力猜解虚拟主机。虚拟主机是同一台机器上的不同网站。有时候它们看起来像子域,但不要真的把它们当成子域。虚拟主机是基于IP地址的,并且它们运行在同一服务器上,而子域是在DNS中设置的。

vhostdns模式的区别在于Gobuster扫描的方式:

  • vhost模式将导航到 由已经配置的主机名(-u 标志)与单词列表条目组合而创建得到的 URL。
  • dns模式将对 通过将配置的域名(-d 标志)与单词列表条目组合而创建得到的FQDN 进行DNS查找。

命令帮助页面

如果你想完整地了解Gobuster vhost命令可以提供的功能,可以查看相关的命令帮助页面。查看vhost命令的完整帮助页面可能会令人生畏。因此,我们将重点关注一些最重要的标志。

键入以下命令以显示相关的帮助信息页面: gobuster vhost --help

Gobuster vhost模式的参数介绍:https://github.com/OJ/gobuster?tab=readme-ov-file#vhost-mode

vhost模式将会提供与 dir 模式类似的参数标志。让我们来看一下一些常用的参数标志:

Short Flag Long Flag Description 描述
-u --url 指定用于暴力猜解虚拟主机名的基本 URL(目标域)
--append-domain 将基本域附加到单词列表中的每个单词后面(例如,word.example.com)
-m --method 指定用于请求的HTTP方法(例如 GET、POST)
--domain 使用IP地址作为目标时要附加的域,将域附加到每个单词列表条目后面以形成有效的主机名;如果留空并指定了基于域的URL,则会从URL中提取主机名
--exclude-length 根据响应正文的长度排除结果(有助于过滤掉不需要的响应)
-r --follow-redirect 遵循HTTP重定向(对于子域可能重定向的情况很有用)

如何使用vhost(虚拟主机)模式

要在vhost模式下运行Gobuster扫描,请键入以下命令:

gobuster vhost -u "http://example.thm" -w /path/to/wordlist

注意,除了vhost关键字之外,该命令还包含标志-u-w 。 Gobuster虚拟主机枚举需要这两个标志才能工作。让我们看一个使用Gobuster vhost模式枚举虚拟主机的实际示例:

root@tryhackme:~# gobuster vhost -u "http://MACHINE_IP" --domain example.thm -w /usr/share/wordlists/SecLists/Discovery/DNS/subdomains-top1million-5000.txt --append-domain --exclude-length 250-320 
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:              http://10.10.94.214
[+] Method:           GET
[+] Threads:          10
[+] Wordlist:         /usr/share/wordlists/SecLists/Discovery/DNS/subdomains-top1million-5000.txt
[+] User Agent:       gobuster/3.6
[+] Timeout:          10s
[+] Append Domain:    true
[+] Exclude Length:   250,254,263,274,283,293,294,299,253,261,269,277,285,290,300,257,258,270,278,282,291,252,260,264,268,271,279,280,289,251,256,262,265,272,297,287,292,295,255,266,276,284,286,296,267,273,275,281,288,259,298
===============================================================
Starting gobuster in VHOST enumeration mode
===============================================================
Found: blog.example.thm Status: 200 [Size: 1493]
Found: shop.example.thm Status: 200 [Size: 2983]
Found: www.example.thm Status: 200 [Size: 84352]
Found: chelyabinsk-rnoc-rr02.backbone.example.thm Status: 404 [Size: 304]
Found: academy.example.thm Status: 200 [Size: 434]
Progress: 4989 / 4990 (99.98%)
===============================================================
Finished
===============================================================

你会注意到该命令比基本的命令语法复杂得多。它包含更多可配置的标志。在实际测试中这种情况经常发生,具体取决于要测试的域的基础设施的设置方式。就我们的示例而言,我们没有完全设置好的DNS基础设施。这需要我们提供额外的标志,例如--domain--append-domain

我们需要查看Gobuster发送的 Web请求,以更好地了解这些参数标志的工作原理。如下所示,你可以看到一个向 www.example.thm 发送的基本 GET 请求:

GET / HTTP/1.1
Host: www.example.thm
User-Agent: gobuster/3.6
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive

Gobuster会发送多个请求,每次都会更改请求中的Host:部分。本例中Host:的值为 www.example.thm 。我们可以将其分解为三个部分:

  • www :这是子域名,Gobuster将用配置好的单词列表的每个条目填充到此部分。
  • .example :这是二级域名,你可以使用--domain标志进行配置(需要与顶级域名一起配置)。
  • .thm :这是顶级域名,你可以使用--domain标志进行配置(需要与二级域名一起配置)。

现在我们知道了Gobuster如何发送请求,让我们分解上面的Gobuster示例命令并更仔细地检查每个参数标志:

  • gobuster vhost指示Gobuster枚举虚拟主机。
  • -u "http://MACHINE_IP"设置URL以浏览 MACHINE_IP 。
  • -w /usr/share/wordlists/SecLists/Discovery/DNS/subdomains-top1million-5000.txt 配置Gobuster使用subdomains-top1million-5000.txt单词列表。 Gobuster会将已配置的域名附加到单词列表中的每个条目末尾。如果没有使用--domain标志明确地配置域名,Gobuster将从URL中提取域名,例如test.example.thmhelp.example.thm等。如果发现任何子域名, Gobuster会在终端中向你报告。
  • --domain example.thm将HTTP请求的Hostname:部分中的顶级域名和二级域名设置为 example.thm 。
  • --append-domain将已配置的域名附加到单词列表中的每个条目末尾,如果未配置此参数标志,则设置的主机名将为wwwblog等。这将导致命令无法正常工作并显示误报。
  • --exclude-length会过滤我们从已发送的 Web 请求中获得的响应。使用此标志,我们可以过滤掉误报。如果你在不使用此标志的情况下运行命令,你会发现你收到了很多误报信息,例如"Found: Orion.example.thm Status: 404 [Size: 279]"或"Found: pm.example.thm Status: 404 [Size: 276]"。这些误报通常具有相似的响应大小,因此我们可以使用这个标志来过滤掉大多数误报。我们通常会期望得到 200 OK 响应消息,然而,有时候也存在例外情况。

答题

使用在本小节中所学到的命令来回答以下问题:offensivetools.thm 域上有多少个虚拟主机——回复的状态码为200?(复制示例命令并相应地编辑参数标志)

gobuster vhost -u "http://10.10.112.237" --domain offensivetools.thm -w /usr/share/wordlists/SecLists/Discovery/DNS/subdomains-top1million-5000.txt --append-domain --exclude-length 250-320 

image-20250525002524669

4

image-20250525002553528

本文小结

本文向我们介绍了进攻性工具Gobuster。该工具主要用来枚举目录、文件、 DNS子域名和虚拟主机。

我们已经介绍了Gobuster工具的三种不同模式:

  • dns模式:枚举 dns 子域名。
  • dir模式:枚举目录和文件。
  • vhost模式:枚举虚拟主机。

对于每种模式,我们介绍了模式配置所需的参数标志以及微调期望的结果的附加可选标志。

We have highlighted the difference between virtual hosts and subdomains and the way Gobuster scans for these:

我们强调了虚拟主机与子域名之间的区别以及Gobuster扫描它们的方式:

  • dns模式将使用DNS服务并通过配置好的域名和单词列表扫描子域。
  • vhost模式将使用配置好的 URL 和单词列表发送 Web 请求。

在本文的每小节内容结束时,我们可以通过实践练习直接应用在文中所学到的技能。

附录

GobusterfuzzMode:https://github.com/OJ/gobuster?tab=readme-ov-file#fuzz-mode

Gobusters3Mode:https://github.com/OJ/gobuster?tab=readme-ov-file#s3-mode

Gobustergcs Mode:https://github.com/OJ/gobuster?tab=readme-ov-file#gcs-mode

Gobustertftp Mode:https://github.com/OJ/gobuster?tab=readme-ov-file#tftp-mode

posted @ 2025-05-25 00:29  Hekeatsll  阅读(334)  评论(0)    收藏  举报