在 Gobuster 中使用 Basic HTTP Authentication

Beginner
立即练习

介绍

在本实验中,你将学习如何在目标 Web 服务器受到 Basic HTTP Authentication(基本 HTTP 身份验证)保护时,有效地使用 Gobuster,一个流行的目录和文件暴力破解工具。许多 Web 应用程序和管理界面使用 Basic HTTP Authentication 来限制对某些资源的访问。如果不提供有效的凭据,Gobuster 通常无法发现这些受保护的路径。本实验将指导你完成识别此类目标、理解如何向 Gobuster 提供必要的用户名和密码,以及成功枚举受保护目录和文件的过程。完成本实验后,你将熟练掌握使用 Gobuster 的身份验证标志来绕过基本访问限制并发现隐藏的 Web 内容。

识别受 Basic HTTP Auth 保护的目标

在本步骤中,你将识别一个受 Basic HTTP Authentication(基本 HTTP 身份验证)保护的 Web 服务器目录。我们已经设置了一个本地 Apache Web 服务器,其中包含一个受保护的目录 /protected_area。当你尝试在未提供凭据的情况下访问此目录时,服务器将提示输入用户名和密码。

首先,让我们尝试使用 curl 在不提供任何凭据的情况下访问受保护的目录。这将演示身份验证挑战。

打开你的终端并执行以下命令:

curl http://localhost/protected_area/

你应该会看到类似以下的输出,表明收到了 401 Unauthorized(未授权)响应和 WWW-Authenticate 标头:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>401 Unauthorized</title>
</head><body>
<h1>Unauthorized</h1>
<p>This server could not verify that you
are authorized to access the document
requested. Either you supplied the wrong
credentials (e.g., bad password), or your
browser doesn't understand how to supply
the credentials required.</p>
<hr>
<address>Apache/2.4.52 (Ubuntu) Server at localhost Port 80</address>
</body></html>

此输出确认 /protected_area 受到 Basic HTTP Authentication 的保护。

接下来,让我们尝试访问此受保护目录中的文件 secret.txt,以确认它也受到保护。

curl http://localhost/protected_area/secret.txt

你将收到类似的 401 Unauthorized 响应。这证实了 /protected_area 中的任何资源都需要身份验证。

获取用户名和密码

在实际场景中,获取 Basic HTTP Authentication 的用户名和密码可能涉及多种技术,例如社会工程学、网络钓鱼或暴力破解。在本实验中,我们已预先配置了受保护区域的凭据。

用户名是 labexuser,密码是 labexpassword

你可以使用带 -u 标志的 curl 来验证这些凭据,该标志允许你直接提供用户名和密码。

执行以下命令,使用正确的凭据访问受保护的目录:

curl -u labexuser:labexpassword http://localhost/protected_area/

你现在应该会看到一个成功的响应,可能是空的目录列表,或者如果存在默认索引页,则会显示该页面。由于 /protected_area 中没有 index.html,你可能会看到 403 Forbidden(禁止访问)或目录列表(如果启用了 Indexes)。关键是你没有收到 401 Unauthorized(未授权)错误。

现在,尝试使用凭据访问受保护目录中的 secret.txt 文件:

curl -u labexuser:labexpassword http://localhost/protected_area/secret.txt

你现在应该会看到 secret.txt 文件的内容:

This is a secret file.

这证实了提供的用户名和密码是正确的,并且可以访问受保护的资源。

使用 -U 标志指定用户名

在本步骤中,你将学习如何在 Gobuster 中使用 -U 标志来指定 Basic HTTP Authentication 的用户名。当你已知用户名但可能正在暴力破解密码,或者仅仅需要在身份验证过程中提供用户名时,此标志至关重要。

首先,让我们尝试在没有任何身份验证的情况下运行 Gobuster 扫描,以了解其对受保护目录的行为。我们将使用一个小型单词列表进行演示。

在你的 ~/project 目录中创建一个名为 common.txt 的简单单词列表文件:

echo -e "admin\nuser\nprotected_area\nsecret.txt" > ~/project/common.txt

现在,使用此单词列表针对 http://localhost 运行 Gobuster,但不进行身份验证:

gobuster dir -u http://localhost -w ~/project/common.txt

你会注意到 Gobuster 可能会报告 /protected_area 条目为 401 Unauthorized(未授权),这表明它在没有凭据的情况下无法访问。

/protected_area       (Status: 401) [Size: 399]

现在,让我们使用 -U 标志来指定用户名 labexuser。为了演示仅提供用户名的效果,我们暂时仍然省略密码。

gobuster dir -u http://localhost -w ~/project/common.txt -U labexuser

即使提供了用户名,Gobuster 仍然会收到 401 Unauthorized 响应,因为密码也是必需的。此步骤主要演示了提供用户名的语法。

/protected_area       (Status: 401) [Size: 399]

这表明虽然用户名被接受,但在没有正确密码的情况下身份验证仍然会失败。

使用 -P 标志指定密码

在本步骤中,你将学习如何在 Gobuster 中使用 -P 标志来指定 Basic HTTP Authentication 的密码。此标志与 -U 标志结合使用,可以使 Gobuster 执行已身份验证的扫描。

承接上一步,我们知道用户名是 labexuser,密码是 labexpassword。现在,让我们添加 -P 标志来提供密码。

执行以下 Gobuster 命令,包括用户名 (-U) 和密码 (-P) 标志:

gobuster dir -u http://localhost -w ~/project/common.txt -U labexuser -P labexpassword

仔细观察输出。这次,当 Gobuster 遇到 /protected_area 时,它应该能够成功进行身份验证,并报告 200 OK403 Forbidden(取决于目录列表设置)状态,而不是 401 Unauthorized

/protected_area       (Status: 403) [Size: 277]

403 Forbidden 状态表明访问已被授予(身份验证成功),但服务器配置为禁止目录列表。这是一个成功的身份验证,与我们之前看到的 401 Unauthorized 不同。

这表明,通过同时提供用户名和密码,Gobuster 可以成功地对 Basic HTTP Authentication 进行身份验证,并继续进行目录暴力破解。

执行扫描并访问受保护的资源

在最后一步中,你将针对受保护的区域执行完整的 Gobuster 扫描,确保它能够发现 secret.txt 文件。这展示了将 Basic HTTP Authentication 与 Gobuster 结合使用以揭示隐藏资源的实际应用。

我们将修改目标 URL,专门扫描 /protected_area 目录,并使用包含 secret.txt 的单词列表。

首先,让我们确保我们的 common.txt 单词列表包含 secret.txt。如果你在步骤 3 中创建了它,它应该已经存在了。

现在,运行 Gobuster,目标是 http://localhost/protected_area/,并使用正确的用户名和密码:

gobuster dir -u http://localhost/protected_area/ -w ~/project/common.txt -U labexuser -P labexpassword

扫描完成后,你应该会看到类似以下的输出,表明 secret.txt 已被找到,状态为 200 OK

/secret.txt           (Status: 200) [Size: 21]

这证实了 Gobuster 已成功进行身份验证,并在受保护的目录中发现了 secret.txt 文件。

你现在可以使用带有凭据的 curl 命令来验证已发现文件的内容:

curl -u labexuser:labexpassword http://localhost/protected_area/secret.txt

你应该会看到:

This is a secret file.

本实验到此结束。你已成功学会如何使用 Gobuster 结合 Basic HTTP Authentication 来发现受保护的 Web 资源。

总结

在本实验中,你获得了使用 Gobuster 枚举受 Basic HTTP Authentication 保护的 Web 服务器上的目录和文件的实践经验。你首先识别了一个受保护的目标,并理解了 401 Unauthorized 响应。然后,你学习了如何使用 -U-P 标志向 Gobuster 提供必要的用户名和密码。最后,你成功执行了一次已身份验证的扫描,展示了 Gobuster 在受保护区域内发现 secret.txt 等隐藏资源的能力。对于渗透测试人员和安全专业人员来说,在处理采用基本身份验证机制的 Web 应用程序时,这项技能至关重要。