引言
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)以及更重要的,相同的长度。无效请求的这种一致长度是我们将在下一步中排除的目标。例如,nonexistentpath123 和 anothernonexistentpath 应该显示相同的长度。
/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 标志提供逗号分隔的列表来排除多个长度。
为了演示这一点,让我们假设我们的服务器可以返回长度为 19 和 50 的 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
再次运行扫描,但这次,让我们假设我们想要排除 19 和 39(testpage.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 中。
在我们当前的设置中,排除了 19 和 39,而 index.html 的长度为 19,输出应该是空的,因为所有条目现在都已被排除。这展示了精确过滤的力量。
这项技术在实际的渗透测试和 Bug Bounty 狩猎中非常宝贵,因为大型单词列表会产生大量的无关数据,令人难以招架。通过系统地排除常见的“噪音”长度,你可以显著减少审查扫描结果所需的手动工作量,并增加发现隐藏目录或文件的机会。
要清理环境,你可以停止 Python Web 服务器:
kill $(cat /tmp/web_server_pid)
本实验到此结束。你已成功学会如何使用 Gobuster 的 --exclude-length 标志来优化你的模糊测试扫描。
总结
在本实验中,你获得了在使用 Gobuster 的模糊模式(fuzz mode)下使用 --exclude-length 标志的实践经验。你首先执行了初始扫描,以识别无效请求的常见响应长度,这些通常代表噪音。然后,你学会了如何使用带有单个长度的 --exclude-length 标志来过滤掉这些不相关的结果,从而获得更干净的输出。最后,你探索了如何通过提供逗号分隔的长度列表来进一步细化排除项,展示了其处理各种类型噪音响应的灵活性。
通过掌握这项技术,你可以显著提高 Web 应用程序模糊测试操作的效率和有效性,从而让你专注于真正有趣的结果,并加速你的漏洞发现过程。
