使用线程控制 Gobuster 扫描速度

Beginner
立即练习

引言

在本实验中,你将探索如何通过调整 Gobuster 的线程数来管理其扫描速度。Gobuster 是一款流行的目录和文件暴力破解工具。理解如何调整线程数量对于高效扫描和最小化对目标服务器的影响至关重要。你将学习如何使用默认、增加和减少的线程数来运行扫描,并观察每种设置的实际影响。这次实践经验将帮助你优化侦察工作,同时注意网络礼仪和目标稳定性。

使用默认线程数 (10) 运行扫描

在此步骤中,你将使用 Gobuster 的默认线程数(通常为 10)启动一次扫描。这将为你提供对其性能和输出格式的基线了解。Gobuster 将尝试发现为本次实验设置的本地 Web 服务器上的目录和文件。

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

gobuster dir -u http://127.0.0.1:8080 -w /tmp/wordlist.txt
  • gobuster dir: 指定你要执行目录/文件暴力破解扫描。
  • -u http://127.0.0.1:8080: 设置扫描的目标 URL。在本实验中,我们针对的是运行在 8080 端口的本地 HTTP 服务器。
  • -w /tmp/wordlist.txt: 指定用于暴力破解过程的字典文件。此文件包含常见的目录和文件名。

观察输出。你将看到 Gobuster 开始扫描,显示正在使用的线程数(默认为 10),然后列出任何已发现的目录或文件。注意结果出现的快慢。

===============================================================
Gobuster vX.X.X-XXXXXX
===============================================================
[+] Url:            http://127.0.0.1:8080
[+] Threads:        10
[+] Wordlist:       /tmp/wordlist.txt
[+] Status codes:   200,204,301,302,307,401,403
[+] User Agent:     gobuster/X.X.X
[+] Timeout:        10s
===============================================================
XXXX/XX/XX XX:XX:XX Starting gobuster in directory enumeration mode
===============================================================
/admin                (Status: 200)
/login                (Status: 200)
/secret               (Status: 200)
/index                (Status: 200)
===============================================================
XXXX/XX/XX XX:XX:XX Finished
===============================================================

输出显示了扫描使用的配置,包括 URL、字典文件,以及最重要的线程数。发现的路径如 /admin/login/secret/index 及其各自的 HTTP 状态码被列出。

使用 -t 标志将线程数增加到 50

在此步骤中,你将使用 -t 标志将 Gobuster 使用的线程数增加到 50。该标志允许你指定所需的并发线程数。较高的线程数通常会导致扫描速度更快,因为同时发送的请求更多。

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

gobuster dir -u http://127.0.0.1:8080 -w /tmp/wordlist.txt -t 50
  • -t 50: 这个新标志将线程数设置为 50。

再次观察输出。你应该会注意到扫描完成的速度比使用默认 10 个线程时快得多。初始输出将确认正在使用 50 个线程。

===============================================================
Gobuster vX.X.X-XXXXXX
===============================================================
[+] Url:            http://127.0.0.1:8080
[+] Threads:        50
[+] Wordlist:       /tmp/wordlist.txt
[+] Status codes:   200,204,301,302,307,401,403
[+] User Agent:     gobuster/X.X.X
[+] Timeout:        10s
===============================================================
XXXX/XX/XX XX:XX:XX Starting gobuster in directory enumeration mode
===============================================================
/admin                (Status: 200)
/login                (Status: 200)
/secret               (Status: 200)
/index                (Status: 200)
===============================================================
XXXX/XX/XX XX:XX:XX Finished
===============================================================

注意输出中的 [+] Threads: 50 行,它确认了你指定的线程数正在被使用。由于字典文件很小且目标是本地的,扫描应该几乎瞬间完成。

观察扫描速度的提升

在此步骤中,我们将明确比较扫描时间,以直观地确认增加线程数所带来的影响。虽然之前的步骤提供了定性观察,但此步骤旨在强化这一概念。

尽管由于字典文件小且服务器是本地的,之前的扫描速度非常快,但你应该已经注意到输出出现所需时间有了显著差异。当你将线程数从 10 增加到 50 时,扫描几乎是瞬时完成的。

为了更好地说明速度差异,可以想象一下,如果字典文件包含数千或数百万个条目,并且目标服务器是远程的且延迟较高。在这种情况下,10 个线程和 50 个线程之间的差异将更加明显,可能将扫描时间从几小时缩短到几分钟。

这里的关键要点是,更多的线程允许 Gobuster 同时发送更多请求,这可以大大减少总扫描时间,特别是对于大型字典文件和响应迅速的目标。

此步骤不需要特定的命令,因为它基于前两个步骤的观察。

将线程数减少到 5 以进行较慢的扫描

现在,让我们反转过程,将线程数减少到 5。这将演示更少的线程如何导致扫描速度变慢。虽然较慢的扫描可能看起来适得其反,但在某些情况下可能是必要的,例如处理速率限制的目标或为了不那么具有侵扰性。

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

gobuster dir -u http://127.0.0.1:8080 -w /tmp/wordlist.txt -t 5
  • -t 5: 这会将线程数设置为 5,是默认值的一半。

观察输出。你应该会注意到与默认的 10 个线程相比,扫描完成所需的时间略长,并且比 50 个线程的扫描明显要长。

===============================================================
Gobuster vX.X.X-XXXXXX
===============================================================
[+] Url:            http://127.0.0.1:8080
[+] Threads:        5
[+] Wordlist:       /tmp/wordlist.txt
[+] Status codes:   200,204,301,302,307,401,403
[+] User Agent:     gobuster/X.X.X
[+] Timeout:        10s
===============================================================
XXXX/XX/XX XX:XX:XX Starting gobuster in directory enumeration mode
===============================================================
/admin                (Status: 200)
/login                (Status: 200)
/secret               (Status: 200)
/index                (Status: 200)
===============================================================
XXXX/XX/XX XX:XX:XX Finished
===============================================================

[+] Threads: 5 行确认了线程数的减少。即使我们的字典文件很小,你也应该会感觉到与之前的运行相比有轻微的延迟。这说明了线程数与扫描时长之间的直接关系。

理解线程对目标服务器的影响

在最后一步中,我们将讨论调整线程数更广泛的影响,特别是关于目标服务器。虽然增加线程可以加快你的扫描速度,但它也会增加目标服务器的负载。

高线程数(例如,50 或更多):

  • 优点: 更快的扫描完成速度。
  • 缺点:
    • 增加服务器负载: 同时发送大量请求可能会使目标服务器过载,可能导致拒绝服务(DoS)或性能下降。
    • 速率限制/阻止: 许多 Web 服务器和 WAF(Web 应用程序防火墙)会实施速率限制以防止暴力破解攻击。高线程数会很快触发这些防御机制,导致你的 IP 被暂时或永久阻止。
    • 网络拥塞: 会消耗大量的网络带宽,特别是当目标是远程的时。
    • 引起怀疑: 高请求率通常表明存在恶意活动,并可能引起安全团队的警觉。

低线程数(例如,1-5):

  • 优点:
    • 降低服务器负载: 侵扰性较小,不太可能导致目标服务器的性能问题。
    • 规避速率限制: 较低的请求速率不太可能触发速率限制机制,从而使扫描能够更长时间地在不被发现的情况下进行。
    • 隐蔽性: 更像合法的用户流量,降低了被检测到的可能性。
  • 缺点:
    • 扫描速度慢: 完成时间会显著延长,特别是对于大型字典文件。

选择合适的线程数:
最佳线程数取决于几个因素:

  • 目标服务器的容量: 服务器能处理多少负载?
  • 网络延迟: 较高的延迟可能需要更多的线程来维持可观的速度。
  • 速率限制策略: 是否有任何已知的速率限制或 WAF?
  • 你的目标: 你是优先考虑速度还是隐蔽性?

对于道德黑客和渗透测试,关键是要注意目标的稳定性,并避免造成任何中断。始终从较低的线程数开始,如果目标能够承受并且你的目标需要更快的結果,则逐渐增加。

此步骤不需要特定的命令,因为它是一个概念性理解。

总结

在此实验中,你已成功学会如何通过使用 -t 标志调整线程数来控制 Gobuster 的扫描速度。你首先以默认的 10 个线程运行扫描,然后将其增加到 50 以观察显著的速度提升,最后将其减少到 5 以观察扫描速度变慢。

更重要的是,你对线程数不仅影响扫描时长,还影响目标服务器的性能和安全机制的关键影响有了深入的了解。你现在知道,虽然更多的线程意味着更快的扫描,但它们也会增加服务器负载以及被检测或阻止的风险。反之,更少的线程提供了隐蔽性并降低了对服务器的影响,但代价是速度较慢。这些知识对于进行负责任且有效的侦察至关重要。