在 Gobuster 中排除特定状态码结果

Beginner
立即练习

引言

在本实验中,你将学习如何有效地使用 Gobuster,一个流行的目录和文件暴力破解工具,从其扫描结果中排除特定的 HTTP 状态码。在进行 Web 枚举时,你经常会遇到许多“未找到”(404)或其他不相关的响应,这些响应会使输出结果混乱。通过过滤掉这些响应,你可以专注于更有意义的结果,从而使你的侦察工作更有效率和针对性。本实验将指导你识别产生噪音的状态码,运行基线扫描,然后使用 Gobuster 的 -b 标志应用排除过滤器。

识别需要忽略的“噪音”状态码(例如 404)

在本步骤中,你将了解在 Gobuster 扫描期间识别和排除某些 HTTP 状态码的重要性。当 Gobuster 尝试访问不存在的路径时,Web 服务器通常会响应“404 Not Found”状态码。这些 404 响应会充斥你的扫描输出,使得难以发现合法的发现项。其他状态码,如 3xx 重定向或 5xx 服务器错误,也可能被视为“噪音”,具体取决于你的特定侦察目标。

为了说明这一点,我们将首先针对本地 Web 服务器运行一个简单的 curl 命令,以查看它如何响应不存在的路径。

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

curl -I http://localhost:8000/nonexistent_page

你应该会看到类似以下的输出,表明一个 404 Not Found 状态:

HTTP/1.0 404 Not Found
Server: SimpleHTTP/0.6
Date: ...
Content-type: text/html
Content-Length: ...

这个 404 Not Found 是一个常见的“噪音”响应。在接下来的步骤中,你将学习如何告诉 Gobuster 忽略此类响应。

运行无过滤器的扫描

在本步骤中,你将执行一次基本的 Gobuster 扫描,不进行任何状态码过滤。这将作为基线,展示输出中可能产生的噪音量(例如 404 响应)。你将使用 Gobuster 的 dir 模式来枚举本地 Web 服务器上的目录和文件。

在你的终端中执行以下命令:

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

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

  • gobuster dir: 指定我们要使用目录/文件枚举模式。
  • -u http://localhost:8000: 将目标 URL 设置为我们的本地 Web 服务器。
  • -w ~/project/wordlist.txt: 指定用于暴力破解的单词列表文件。

观察输出。你很可能会看到许多条目旁边带有 (Status: 404),这表明 Gobuster 尝试访问服务器上不存在的路径。

...
/nonexistent_page       (Status: 404)
/admin                  (Status: 404)
/test                   (Status: 404)
/existing_dir           (Status: 200)
/another_file.txt       (Status: 200)
/redirect_me            (Status: 302)
/forbidden_area         (Status: 403)
/server_error           (Status: 500)
...

正如你所见,输出被 404 响应弄得混乱不堪,使得识别实际存在的资源更加困难。

使用 -b 标志排除 404 Not Found

在本步骤中,你将学习如何使用 Gobuster 的 -b(或 --exclude-length)标志来从结果中排除特定的 HTTP 状态码。这对于过滤掉不相关的响应并专注于重要内容至关重要。我们将特别排除 404 Not Found 状态码,这是最常见的噪音响应。

-b 标志接受一个逗号分隔的状态码列表进行排除。

在你的终端中执行以下命令,运行 Gobuster 扫描并排除 404 响应:

gobuster dir -u http://localhost:8000 -w ~/project/wordlist.txt -b 404

让我们看看这个新标志:

  • -b 404: 告诉 Gobuster 排除任何返回 HTTP 状态码为 404 的结果。

仔细观察输出。你应该会注意到所有带有 (Status: 404) 的条目现在都消失了,从而得到一个更干净、更集中的结果列表。

...
/existing_dir           (Status: 200)
/another_file.txt       (Status: 200)
/redirect_me            (Status: 302)
/forbidden_area         (Status: 403)
/server_error           (Status: 500)
...

这极大地提高了扫描结果的可读性和实用性。

执行扫描并观察更干净的输出

在本步骤中,你将使用 -b 404 标志重新运行 Gobuster 扫描,并密切关注输出,以确认 404 响应确实已被排除。这将加深你对排除标志工作原理及其对扫描结果影响的理解。

再次执行命令以查看过滤后的输出:

gobuster dir -u http://localhost:8000 -w ~/project/wordlist.txt -b 404

随着扫描的进行,你将只看到返回了除 404 之外的状态码的条目。这展示了 -b 标志在减少噪音方面的有效性。

预期更干净输出的示例:

...
/existing_dir           (Status: 200)
/another_file.txt       (Status: 200)
/redirect_me            (Status: 302)
/forbidden_area         (Status: 403)
/server_error           (Status: 500)
...

请注意,之前返回 404 的 nonexistent_pageadmintest 条目已不再出现在输出中。这使得识别有效资源更加容易。

结合使用 -s 和 -b 进行精确过滤

在最后这个步骤中,你将学习如何结合使用 -s(包含状态码)和 -b(排除状态码)标志来进行更精确的过滤。虽然 -b 非常适合去除噪音,但有时你只想查看特定类型的响应,例如成功的响应(200 OK)或重定向(3xx)。

-s 标志允许你指定一个逗号分隔的状态码列表,以 包含 在结果中。当同时使用 -s-b 时,Gobuster 会先应用 -s 过滤器,然后在剩余的结果中应用 -b 过滤器。

假设你只想查看 200 OK302 Found 响应,同时仍然明确排除 404 Not Found

执行以下命令:

gobuster dir -u http://localhost:8000 -w ~/project/wordlist.txt -s 200,302 -b 404

以下是详细说明:

  • -s 200,302: 告诉 Gobuster 显示状态码为 200 或 302 的结果。
  • -b 404: 告诉 Gobuster 排除 状态码为 404 的结果。(尽管在这种特定情况下,404 已经被 -s 排除了,但这演示了组合使用。)

观察输出。你现在应该只看到带有 Status: 200Status: 302 的条目。

...
/existing_dir           (Status: 200)
/another_file.txt       (Status: 200)
/redirect_me            (Status: 302)
...

这种强大的组合方式使你能够微调 Gobuster 扫描,只获取最相关的信息,从而显著提高你在网络侦察中的效率。

总结

在本实验中,你已成功学会如何从 Gobuster 扫描结果中排除特定的 HTTP 状态码。你首先了解了过滤的必要性,特别是对于常见的“噪音”响应,如 404 Not Found。然后,你执行了一个基线扫描来观察未过滤的输出。本实验的核心是使用 -b 标志排除不需要的状态码,从而获得更干净、更集中的结果集。最后,你探索了如何结合使用 -s(包含)和 -b(排除)标志,以更精确地控制你的 Gobuster 扫描。这项技能对于高效和有针对性的网络侦察非常有价值。