在 Gobuster 模糊模式下按响应长度排除结果

Beginner
立即练习

引言

Gobuster 是一个强大的工具,用于目录和文件暴力破解、DNS 子域暴力破解以及 S3 存储桶枚举。在执行模糊测试(fuzzing)操作时,尤其是在针对 Web 服务器时,经常会遇到大量“噪音”结果。这些结果通常包括不存在路径的响应,它们返回一致的 HTTP 状态码(例如,404 Not Found)以及关键的响应体长度。这会使输出混乱,难以识别有价值的发现。

在本实验中,你将学习如何在模糊测试模式下利用 Gobuster 的 --exclude-length 标志。此功能允许你指定一个或多个要忽略的响应体长度,从而有效地过滤掉这些噪音结果。通过本实验的学习,你将能够执行更具针对性和效率的模糊测试扫描,只关注相关的响应。

运行模糊扫描并识别无效请求的常见响应大小

在此步骤中,你将针对本地 Web 服务器执行初始的 Gobuster 模糊扫描。这将帮助你观察典型的输出,特别是对于不存在路径的响应长度,这些通常代表“噪音”结果。

首先,确保 Web 服务器正在运行。你可以检查进程是否处于活动状态:

ps aux | grep "python3 -m http.server 8000" | grep -v grep

你应该会看到类似以下的输出,表明服务器正在运行:

labex       1234  0.0  0.0  12345  6789 ?        Sl   HH:MM   0:00 python3 -m http.server 8000 --directory /tmp/web_root

现在,使用设置中创建的 wordlist 运行 Gobuster 模糊扫描。我们将目标定为 http://127.0.0.1:8000

gobuster fuzz -u http://127.0.0.1:8000/FUZZ -w /tmp/wordlist.txt

观察输出。你会注意到多个条目具有相同的状态码(例如,404)以及更重要的,相同的长度。无效请求的这种一致长度是我们将在下一步中排除的目标。例如,nonexistentpath123anothernonexistentpath 应该显示相同的长度。

/index.html           (Status: 200) [Size: 19]
/admin                (Status: 404) [Size: 19]
/login                (Status: 404) [Size: 19]
/config               (Status: 404) [Size: 19]
/robots.txt           (Status: 404) [Size: 19]
/nonexistentpath123   (Status: 404) [Size: 19]
/anothernonexistentpath (Status: 404) [Size: 19]

从输出中,识别 404(Not Found)错误的常见响应大小。在此示例中,它是 19。这是我们将在下一步中用于过滤噪音的长度。

使用已识别大小的 --exclude-length 标志重新运行扫描

在此步骤中,你将重新运行 Gobuster 扫描,但这次你将使用 --exclude-length 标志,根据你在上一步中识别的响应长度来过滤掉噪音结果。

回顾上一步中 404 错误的常见响应长度。在我们的示例中,它是 19。现在,将 --exclude-length 19 添加到你的 Gobuster 命令中:

gobuster fuzz -u http://127.0.0.1:8000/FUZZ -w /tmp/wordlist.txt --exclude-length 19

执行命令并观察输出。

观察噪音结果如何被过滤掉

在执行上一步命令后,你应该会立即注意到输出的显著差异。对应于已排除长度的条目(例如,长度为 19 的 404 响应)应该不再出现。

将本次扫描的输出与步骤 1 的输出进行比较。

预期输出:

/index.html           (Status: 200) [Size: 19]

你应该只看到 /index.html 条目,因为它是唯一返回 200 OK 状态且内容长度不同的条目(尽管在此特定设置中,404 页面的长度也为 19,这是我们简单服务器的一个限制。在实际场景中,404 页面的长度通常与有效页面的长度不同)。关键在于,任何具有指定长度的响应现在都已被过滤掉。

这展示了 --exclude-length 标志如何有效地减少噪音,让你能够专注于潜在的有趣发现。

使用逗号分隔的长度列表细化排除项

有时,Web 服务器可能会为不同类型的“未找到”或“无效”请求返回不同的响应长度。Gobuster 允许你通过向 --exclude-length 标志提供逗号分隔的列表来排除多个长度。

为了演示这一点,让我们假设我们的服务器可以返回长度为 1950 的 404 页面。我们将通过添加一个返回不同长度的新“有效”路径来模拟这一点。

首先,让我们向 Web 根目录添加一个具有不同大小的新文件:

echo "This is a test page with a different length." > /tmp/web_root/testpage.html

现在,让我们将 testpage.html 添加到我们的单词列表中:

echo "testpage.html" >> /tmp/wordlist.txt

再次运行扫描,但这次,让我们假设我们想要排除 1939testpage.html 的长度为 39)。

gobuster fuzz -u http://127.0.0.1:8000/FUZZ -w /tmp/wordlist.txt --exclude-length 19,39

观察输出。你应该会看到原始的 404 响应(长度 19)和 testpage.html 响应(长度 39)现在都被排除了。

分析更干净的输出以发现有趣的结果

在最后一步,你将分析使用 --exclude-length 标志生成的更干净的输出。目标是理解这种过滤如何帮助在模糊测试(fuzzing)操作中识别真正有趣的结果。

在执行上一步命令后,输出应该更加简洁。如果你的单词列表中还有其他返回的状态码和长度 不在 你排除列表中的路径,它们现在应该会脱颖而出。

例如,如果你有一个像 /secret_admin_panel 这样的路径,它返回了一个具有唯一长度的 200 OK,那么它将在过滤后的输出中清晰可见,而在未过滤的扫描中,它可能会淹没在数百个 404 中。

在我们当前的设置中,排除了 1939,而 index.html 的长度为 19,输出应该是空的,因为所有条目现在都已被排除。这展示了精确过滤的力量。

这项技术在实际的渗透测试和 Bug Bounty 狩猎中非常宝贵,因为大型单词列表会产生大量的无关数据,令人难以招架。通过系统地排除常见的“噪音”长度,你可以显著减少审查扫描结果所需的手动工作量,并增加发现隐藏目录或文件的机会。

要清理环境,你可以停止 Python Web 服务器:

kill $(cat /tmp/web_server_pid)

本实验到此结束。你已成功学会如何使用 Gobuster 的 --exclude-length 标志来优化你的模糊测试扫描。

总结

在本实验中,你获得了在使用 Gobuster 的模糊模式(fuzz mode)下使用 --exclude-length 标志的实践经验。你首先执行了初始扫描,以识别无效请求的常见响应长度,这些通常代表噪音。然后,你学会了如何使用带有单个长度的 --exclude-length 标志来过滤掉这些不相关的结果,从而获得更干净的输出。最后,你探索了如何通过提供逗号分隔的长度列表来进一步细化排除项,展示了其处理各种类型噪音响应的灵活性。

通过掌握这项技术,你可以显著提高 Web 应用程序模糊测试操作的效率和有效性,从而让你专注于真正有趣的结果,并加速你的漏洞发现过程。