使用 Cookie 进行 Gobuster 认证目录扫描

Beginner
立即练习

引言

在 Web 应用程序渗透测试或安全审计中,经常会遇到用户认证后才能访问的网站区域。像 Gobuster 这样的标准目录扫描工具可能会遗漏这些隐藏路径,因为它们不维护会话。本实验将指导你使用 Gobuster 的 cookie 功能执行认证后的目录扫描。你将学习如何从 Web 应用程序获取会话 cookie,然后将该 cookie 与 Gobuster 一起使用,以发现认证区域内的目录和文件,从而更全面地了解应用程序的攻击面。

在此步骤中,你将模拟登录 Web 应用程序,并捕获成功认证后设置的会话 Cookie。此 Cookie 对于 Gobuster 访问认证区域至关重要。我们将使用 curl 来执行登录并提取 Cookie。

首先,让我们尝试在未认证的情况下访问仪表板,看看它是否将我们重定向:

curl -v http://localhost:8080/dashboard

你应该会看到一个 302 Found 重定向回 /。现在,让我们登录。该 Web 应用程序在 http://localhost:8080/ 有一个简单的登录表单,用户名为 user,密码为 password。我们将向 /login 发送一个 POST 请求,并附带这些凭据。

curl -v -X POST -d "username=user&password=password" http://localhost:8080/login

在输出中,查找 Set-Cookie 标头。它应该看起来像 Set-Cookie: session=authenticated_session_id_12345; Path=/。值 authenticated_session_id_12345 是你的会话 Cookie。记下这个值。

现在,让我们尝试使用获取的 Cookie 访问仪表板。将 YOUR_COOKIE_VALUE 替换为你找到的实际 Cookie 值。

curl -v --cookie "session=authenticated_session_id_12345" http://localhost:8080/dashboard

你现在应该看到仪表板页面的内容,这表明已成功进行认证访问。

构建用于认证区域的 gobuster dir 命令

在此步骤中,你将准备基本的 gobuster dir 命令。我们将以 Web 应用程序的认证区域为目标。我们认证扫描的基础 URL 将是 http://localhost:8080/authenticated/。我们将使用一个通用的字典文件(wordlist)进行目录暴力破解。

首先,让我们确保 Gobuster 已安装。

gobuster version

你应该会看到版本信息。如果未安装,请参阅设置部分。

现在,让我们构建基本的 gobuster dir 命令。我们将使用 -u 标志指定 URL,使用 -w 指定字典文件。在本实验中,我们将使用一个小的内置字典文件进行演示,或者你也可以指定一个常见的字典文件,如系统上可用的 common.txt。如果找不到 common.txt,你可以创建一个小的自定义字典文件进行测试。

让我们为本实验创建一个小的字典文件:

echo -e "secret_dir\nadmin\nconfig\nbackup\nusers" > ~/project/wordlist.txt

现在,不带 Cookie 的基本命令将如下所示:

gobuster dir -u http://localhost:8080/authenticated/ -w ~/project/wordlist.txt

如果现在运行此命令,它可能找不到 secret_dir,因为它需要认证。下一步将在此命令中添加 Cookie。

在此步骤中,你将使用 -c 标志将你在步骤 1 中获得的会话 Cookie 集成到你的 Gobuster 命令中。此标志允许 Gobuster 在其请求中包含指定的 Cookie,从而使其能够访问认证区域。

回想一下你在步骤 1 中获得的 Cookie 值,即 session=authenticated_session_id_12345

-c 标志期望 Cookie 的格式为 key=value。因此,我们的 Cookie 字符串将是 "session=authenticated_session_id_12345"

现在,将其与步骤 2 中的命令结合起来:

gobuster dir -u http://localhost:8080/authenticated/ -w ~/project/wordlist.txt -c "session=authenticated_session_id_12345"

此命令指示 Gobuster 对 http://localhost:8080/authenticated/ 执行目录扫描,使用提供的字典文件,并至关重要的是,在每个请求中包含 session=authenticated_session_id_12345 Cookie。这将允许 Gobuster 绕过认证障碍,并发现受保护区域内的资源。

执行前,请仔细检查你的 Cookie 值是否正确。

执行扫描

现在你已经构建了完整的 Gobuster 命令,是时候执行它并观察结果了。此扫描将尝试查找 Web 应用程序认证部分内的目录和文件。

执行你在上一步准备的命令:

gobuster dir -u http://localhost:8080/authenticated/ -w ~/project/wordlist.txt -c "session=authenticated_session_id_12345"

Gobuster 将开始扫描并显示其进度。请密切关注输出。你应该会看到指示已找到目录或文件的条目,其状态为 Status: 200 (OK) 或 Status: 301 (Moved Permanently) 或 Status: 302 (Found),这意味着资源已成功访问或重定向。

示例输出:

===============================================================
Gobuster vX.X.X
===============================================================
[+] Url:                     http://localhost:8080/authenticated/
[+] Wordlist:                /home/labex/project/wordlist.txt
[+] Threads:                 10
[+] Timeout:                 10s
[+] User Agent:              gobuster/X.X.X
[+] Cookies:                 session=authenticated_session_id_12345
===============================================================
2024/01/01 12:00:00 Starting gobuster in directory enumeration mode
===============================================================
/secret_dir           (Status: 200) [Size: 100]
===============================================================
2024/01/01 12:00:05 Finished
===============================================================

请注意 /secret_dir 如何以 Status: 200 被找到。这表明 Gobuster 成功访问了该目录,因为它发送了认证 Cookie。没有 Cookie,该目录可能找不到,或者会返回重定向/未授权状态。

分析结果以查找仅在认证后可访问的页面

在此最后一步中,你将分析 Gobuster 扫描的输出,以识别在认证区域内成功发现的资源。关键在于查找返回 Status: 200 (OK) 或其他成功代码的条目,这些条目通常在没有会话 Cookie 的情况下是无法访问的。

从上一步的输出中,你应该看到了类似以下内容:

/secret_dir           (Status: 200) [Size: 100]

此行表明 Gobuster 在 http://localhost:8080/authenticated/ URL 中成功找到了 /secret_dir 路径,并且返回了 HTTP 200 OK 状态。这有力地表明该目录在认证后是可访问的。

为了确认,你可以尝试在没有 Cookie 的情况下使用 curl 直接访问此路径:

curl http://localhost:8080/authenticated/secret_dir

你应该会被重定向到登录页面或收到未授权消息。

现在,尝试使用 Cookie 访问它:

curl --cookie "session=authenticated_session_id_12345" http://localhost:8080/authenticated/secret_dir/hidden_file.html

你应该会看到 hidden_file.html 的内容,这证实了该路径确实只能通过正确的认证 Cookie 访问。

此过程展示了如何将 Cookie 与 Gobuster 结合使用,以揭示 Web 应用程序中仅对已认证用户可见的隐藏部分,从而显著扩展你的安全评估范围。

总结

在此实验中,你成功学习了如何使用 Gobuster 执行认证目录扫描。你首先登录了一个模拟的 Web 应用程序并提取了会话 Cookie。然后,你构建了一个使用 -c 标志包含此 Cookie 的 Gobuster 命令。通过执行此命令,你成功发现了一个仅对已认证用户可访问的隐藏目录 (/secret_dir)。这项技术对于需要彻底审计 Web 应用程序的安全专业人员和开发人员来说非常宝贵,它能确保所有可访问的路径,即使是那些需要认证的路径,都能被正确识别和保护。