引言
在本实验中,你将学习如何有效地使用 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_page、admin 和 test 条目已不再出现在输出中。这使得识别有效资源更加容易。
结合使用 -s 和 -b 进行精确过滤
在最后这个步骤中,你将学习如何结合使用 -s(包含状态码)和 -b(排除状态码)标志来进行更精确的过滤。虽然 -b 非常适合去除噪音,但有时你只想查看特定类型的响应,例如成功的响应(200 OK)或重定向(3xx)。
-s 标志允许你指定一个逗号分隔的状态码列表,以 包含 在结果中。当同时使用 -s 和 -b 时,Gobuster 会先应用 -s 过滤器,然后在剩余的结果中应用 -b 过滤器。
假设你只想查看 200 OK 和 302 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: 200 和 Status: 302 的条目。
...
/existing_dir (Status: 200)
/another_file.txt (Status: 200)
/redirect_me (Status: 302)
...
这种强大的组合方式使你能够微调 Gobuster 扫描,只获取最相关的信息,从而显著提高你在网络侦察中的效率。
总结
在本实验中,你已成功学会如何从 Gobuster 扫描结果中排除特定的 HTTP 状态码。你首先了解了过滤的必要性,特别是对于常见的“噪音”响应,如 404 Not Found。然后,你执行了一个基线扫描来观察未过滤的输出。本实验的核心是使用 -b 标志排除不需要的状态码,从而获得更干净、更集中的结果集。最后,你探索了如何结合使用 -s(包含)和 -b(排除)标志,以更精确地控制你的 Gobuster 扫描。这项技能对于高效和有针对性的网络侦察非常有价值。
