分析响应长度或状态码的变化
在此步骤中,你将学习如何解读 Gobuster fuzz 扫描的输出。识别潜在有效或有趣的 GET 参数的关键在于观察 HTTP 响应的变化。
当 Gobuster 运行时,它会显示它发出的每个请求的 HTTP 状态码和内容长度(以字节为单位)。
例如,上一步的输出显示:
200 (290) - http://127.0.0.1:8000/index.html?id=test
200 (290) - http://127.0.0.1:8000/index.html?name=test
...
这里,200 是 HTTP 状态码(OK),290 是响应的内容长度。
需要关注的内容:
- 不同的状态码: 如果带有特定参数名称的请求返回了不同的 HTTP 状态码(例如,有效为
200,未找到为 404,服务器错误为 500,重定向为 302),这可能表明应用程序处理或响应了该参数。例如,一个通常返回 404 Not Found 的参数却返回了 200 OK,这可能很重要。
- 不同的内容长度: 即使状态码保持为
200 OK,内容长度的变化也可能是一个强有力的指示。这通常意味着应用程序的响应体发生了变化,可能是因为包含了与参数相关的特定数据、错误消息或不同的页面布局。
- 错误消息: 有时,一个参数可能会触发一个错误消息(例如,SQL 错误、应用程序错误),该错误消息会反映在响应体中,导致内容长度不同,甚至状态码为
500。这是潜在漏洞的一个强烈迹象。
在我们当前的实验设置中,由于 index.html 是一个静态文件,并且 Python 服务器不处理 GET 参数,你将观察到所有请求都返回 200 状态码和相同的内容长度(290 字节)。对于我们简单的测试用例来说,这是预期的行为。
在实际场景中,如果你对一个正在运行的 Web 应用程序进行模糊测试,并看到类似以下的条目:
200 (512) - http://example.com/search?query=test
而其他参数返回的是 200 (290),那么 query 参数就值得进一步调查,因为它具有不同的内容长度。
此步骤标志着实验的结束。你已成功学习了如何使用 Gobuster 进行 GET 参数的模糊测试以及如何分析结果。
要停止 Python HTTP 服务器,你可以找到它的进程 ID (PID) 并将其终止。首先,列出正在运行的 Python 进程:
ps aux | grep "python3 -m http.server 8000"
你将看到类似以下的输出:
labex 1234 0.0 0.0 12345 6789 ? S HH:MM 0:00 python3 -m http.server 8000
记下 PID(例如,此示例中的 1234),然后终止该进程:
kill 1234
将 1234 替换为你找到的实际 PID。