使用 Gobuster 的灵活模糊测试模式

Beginner
立即练习

引言

在本实验中,你将探索 Gobuster 的灵活模糊测试(fuzzing)能力。Gobuster 是一款流行的目录和文件暴力破解工具。虽然 Gobuster 通常以其 dir 模式而闻名,但其 fuzz 模式提供了一种强大的方法,通过将 payload 注入 URL 的各个部分来发现隐藏的 Web 内容。你将学习如何使用特殊的 FUZZ 关键字构建 URL,提供自定义的单词列表(wordlists),执行模糊测试扫描,并解释结果以识别 Web 服务器上的潜在漏洞或隐藏资源。这种实践经验将提升你的 Web 枚举(enumeration)技能,这对于渗透测试和安全评估至关重要。

理解 fuzz 模式和 FUZZ 关键字的用途

在本步骤中,你将了解 Gobuster 中的 fuzz 模式以及 FUZZ 关键字的重要性。与主要暴力破解目录和文件名的 dir 模式不同,fuzz 模式允许你将 payload 注入 URL 中的任意位置。FUZZ 关键字充当一个占位符,Gobuster 将从你提供的单词列表中插入的每个条目替换它。这种灵活性使你能够测试 URL 的各个部分,例如路径段、文件扩展名,甚至查询参数,以发现隐藏的内容或漏洞。

例如,如果你想在 http://localhost:8000/ 下发现隐藏的目录,你将使用类似 http://localhost:8000/FUZZ 的 URL。然后 Gobuster 会用单词列表中的每个单词替换 FUZZ

让我们验证一下 Gobuster 是否已安装并在你的环境中可用。

gobuster version

你应该会看到类似以下的输出,表明 Gobuster 的版本。

Gobuster v3.x.x

在路径中构建带有 FUZZ 关键字的 URL

在本步骤中,你将构建一个包含 FUZZ 关键字的目标 URL。此关键字告诉 Gobuster 在模糊测试过程中将单词列表条目插入何处。对于本实验,我们将目标定位到一个在本地 8000 端口上运行的简单 HTTP 服务器。我们将把 FUZZ 关键字放在路径段中,以发现隐藏的目录或文件。

gobuster fuzz 的基本语法是 gobuster fuzz -u <URL_with_FUZZ> -w <wordlist>

让我们定义目标服务器的基础 URL。服务器运行在 http://localhost:8000。我们想发现根目录下的隐藏路径,因此我们的模糊测试 URL 将是 http://localhost:8000/FUZZ

你可以尝试访问基础 URL 来确认服务器正在运行:

curl http://localhost:8000/

你应该会看到 index.html 的内容:

Hello from index.html

现在,让我们准备命令结构。我们暂时不执行它,但会确保 URL 的格式正确。

echo "The fuzzed URL will be: http://localhost:8000/FUZZ"

此命令仅打印 URL 字符串,以确认你对如何放置 FUZZ 关键字的理解。

使用 -w 标志提供 Payload 单词列表

在本步骤中,你将学习如何在模糊测试过程中指定 Gobuster 使用的单词列表。-w 标志用于提供单词列表文件的路径。此文件中的每一行都将用于替换目标 URL 中的 FUZZ 关键字。

对于本实验,在设置阶段,你的 ~/project 目录中已创建了一个名为 fuzz_wordlist.txt 的简单单词列表。此单词列表包含一些与我们模拟 Web 服务器上存在的和不存在的路径相对应的条目。

让我们检查一下单词列表的内容,以了解将使用哪些 payload:

cat ~/project/fuzz_wordlist.txt

你应该会看到以下内容:

secret_dir
admin_panel
test_page.html
nonexistent

现在你已知 Gobuster 将尝试的 payload。当我们执行扫描时,Gobuster 将尝试访问类似 http://localhost:8000/secret_dirhttp://localhost:8000/admin_panel 等 URL。

执行 gobuster fuzz 扫描

在本步骤中,你将结合所有先前的知识来执行 gobuster fuzz 扫描。你将使用在步骤 2 中构建的模糊测试 URL 和在步骤 3 中指定的单词列表。

完整的命令将是:

gobuster fuzz -u http://localhost:8000/FUZZ -w ~/project/fuzz_wordlist.txt

让我们分解一下这个命令:

  • gobuster fuzz: 以模糊测试模式调用 Gobuster。
  • -u http://localhost:8000/FUZZ: 指定带有 FUZZ 占位符的目标 URL。
  • -w ~/project/fuzz_wordlist.txt: 提供包含 payload 的单词列表的路径。

现在,在你的终端中执行该命令:

gobuster fuzz -u http://localhost:8000/FUZZ -w ~/project/fuzz_wordlist.txt

你将看到 Gobuster 遍历单词列表并报告每次尝试的状态码。

===============================================================
Gobuster v3.x.x
===============================================================
[+] Url:            http://localhost:8000/FUZZ
[+] Wordlist:       /home/labex/project/fuzz_wordlist.txt
[+] Threads:        10
[+] Timeout:        10s
===============================================================
2024/01/01 12:00:00 Starting gobuster in fuzz mode
===============================================================
http://localhost:8000/secret_dir (Status: 200)
http://localhost:8000/admin_panel (Status: 200)
http://localhost:8000/test_page.html (Status: 200)
http://localhost:8000/nonexistent (Status: 404)
===============================================================
2024/01/01 12:00:00 Finished
===============================================================

请注意 secret_diradmin_paneltest_page.html(Status: 200),这表明这些路径存在并返回了成功的响应。nonexistent(Status: 404) 表明此路径未找到,正如预期的那样。

分析灵活模糊测试的结果

在最后一步中,你将分析 gobuster fuzz 扫描的输出,以了解发现了什么。模糊测试的主要目标是识别有效的响应(通常是 HTTP 状态码,如 200 OK、301 Moved Permanently 等),这些响应表明资源的存在。

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

http://localhost:8000/secret_dir (Status: 200)
http://localhost:8000/admin_panel (Status: 200)
http://localhost:8000/test_page.html (Status: 200)
http://localhost:8000/nonexistent (Status: 404)
  • http://localhost:8000/secret_dir (Status: 200): 这表明在 Web 根目录下存在一个名为 secret_dir 的目录。你可以尝试使用 curl 访问它:

    curl http://localhost:8000/secret_dir/hidden_file.txt
    

    你应该会看到:

    Secret content
    
  • http://localhost:8000/admin_panel (Status: 200): 这表明存在一个 admin_panel 目录。

    curl http://localhost:8000/admin_panel/login.php
    

    你应该会看到:

    Admin login
    
  • http://localhost:8000/test_page.html (Status: 200): 这表明存在一个名为 test_page.html 的文件。

    curl http://localhost:8000/test_page.html
    

    你应该会看到:

    Test page
    
  • http://localhost:8000/nonexistent (Status: 404): 这是一个“未找到”状态,对于不存在的路径是符合预期的。这有助于确认 Gobuster 是否正确识别了不存在的资源。

通过分析状态码,你可以有效地识别可能未从主网站直接链接的隐藏目录、文件或其他资源。这是安全评估中侦察阶段的关键一步。

总结

在本实验中,你成功学习了如何在 Gobuster 中使用灵活的模糊测试模式。你理解了 FUZZ 关键字作为从单词列表中注入 payload 的占位符的作用。你构建了一个模糊测试 URL,提供了一个自定义单词列表,执行了 gobuster fuzz 扫描,并分析了结果以识别现有的 Web 资源。这次实践经验展示了 Gobuster 在 Web 枚举方面的模糊测试能力的强大和通用性,这是网络安全和渗透测试中的一项基本技能。你现在可以将这些技术应用于发现各种 Web 应用程序中的隐藏内容。