在 Gobuster 中使用不同字典进行目录扫描

Beginner
立即练习

引言

在本实验中,你将使用 Gobuster(一个流行的 Web 枚举工具)来探索字典(wordlists)在目录扫描中的关键作用。目录扫描是 Web 应用程序渗透测试中的一个基本步骤,有助于发现可能包含敏感信息或提供攻击向量的隐藏目录和文件。此过程的有效性和效率在很大程度上取决于所使用的字典。你将学习如何在 Kali Linux 中定位默认字典,使用不同大小的字典执行扫描,并分析其对扫描时间和发现条目的数量的影响。这将帮助你实际理解在枚举任务中选择正确字典所涉及的权衡。

在 Kali 中定位默认字典

在此步骤中,你将定位 Kali Linux 中提供的默认字典,这些字典对于 Gobuster 等工具至关重要。Kali Linux 包含一个丰富的字典集合,存储在 seclists 目录中。这些字典根据不同目的进行了分类,包括目录枚举、密码破解和模糊测试(fuzzing)。

首先,导航到 seclists 目录。这些字典的常用路径是 /usr/share/seclists

ls -l /usr/share/seclists

你将看到各种子目录。对于 Web 枚举,Discovery 目录尤其相关。在 Discovery 中,你会找到 Web-Content,其中包含专门用于查找 Web 目录和文件的字典。

ls -l /usr/share/seclists/Discovery/Web-Content/

其中,common.txt 是一个相对较小的字典,而 directory-list-2.3-medium.txt 是一个更大、更全面的字典。你将在后续步骤中使用这两个字典来观察字典大小对 Gobuster 扫描的影响。

ls -l /usr/share/seclists/Discovery/Web-Content/common.txt
ls -l /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt

你还可以查看 common.txt 的前几行,以了解其内容:

head /usr/share/seclists/Discovery/Web-Content/common.txt

预期输出(已截断):

.git
.svn
.DS_Store
.htaccess
.htpasswd
.bash_history
.bash_logout
.bashrc
.profile
.ssh

使用小型字典 (common.txt) 执行扫描

在此步骤中,你将使用较小的 common.txt 字典执行 Gobuster 目录扫描。这将演示一个快速扫描,它可能会遗漏不太常见的目录,但速度更快。

我们扫描的目标将是一个在本地 8000 端口上运行的简单 Python Web 服务器。URL 将是 http://127.0.0.1:8000

使用以下命令运行 Gobuster:

  • dir: 指定我们正在执行目录/文件暴力破解。
  • -u: 指定目标 URL。
  • -w: 指定字典的路径。
  • -o: 指定一个输出文件来保存结果。
gobuster dir -u http://127.0.0.1:8000 -w /usr/share/seclists/Discovery/Web-Content/common.txt -o ~/project/gobuster_common_results.txt

扫描将运行并显示其进度。完成后,你可以查看保存在 ~/project/gobuster_common_results.txt 中的结果。

cat ~/project/gobuster_common_results.txt

预期输出(可能因 common.txt 内容和服务器设置而略有不同):

/admin                (Status: 200)
/backup               (Status: 200)
/common.html          (Status: 200)

请注意扫描完成所花费的时间。在下一步中,这将与使用大型字典的扫描进行比较。

使用更大的字典 (directory-list-2.3-medium.txt) 执行扫描

在此步骤中,你将使用 Gobuster 重复目录扫描,但这次使用更大的 directory-list-2.3-medium.txt 字典。这将演示更全面的字典如何找到更多条目,但代价是扫描时间增加。

gobuster dir -u http://127.0.0.1:8000 -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -o ~/project/gobuster_medium_results.txt

由于字典的大小,此扫描将比之前的扫描花费更长的时间。请耐心等待其运行。完成后,请检查结果。

cat ~/project/gobuster_medium_results.txt

预期输出(将包含比 common.txt 扫描更多的条目,包括 /admin/backup/common.html 以及可能存在的许多其他条目):

/admin                (Status: 200)
/backup               (Status: 200)
/common.html          (Status: 200)
/css                  (Status: 200)
/js                   (Status: 200)
/images               (Status: 200)
... (更多条目)

请观察与先前扫描相比,发现的条目数量和总耗时的差异。

比较两次扫描的时间和结果

在此步骤中,你将明确比较两次扫描的结果和大致耗时。虽然 Gobuster 不会在其输出中提供精确的耗时,但你可以根据执行期间观察到的持续时间以及检查输出文件的文件大小或行数来推断。

首先,让我们比较两个输出文件中的行数(对应于发现的条目数):

echo "Results from common.txt scan:"
wc -l ~/project/gobuster_common_results.txt

echo "Results from directory-list-2.3-medium.txt scan:"
wc -l ~/project/gobuster_medium_results.txt

预期输出(行数会有所不同):

Results from common.txt scan:
3 /home/labex/project/gobuster_common_results.txt
Results from directory-list-2.3-medium.txt scan:
X /home/labex/project/gobuster_medium_results.txt (其中 X 是一个大得多的数字)

你应该会发现使用 directory-list-2.3-medium.txt 的扫描找到了更多的条目。

关于时间,你可能会注意到使用 common.txt 的扫描完成得非常快(可能只有几秒钟),而使用 directory-list-2.3-medium.txt 的扫描则花费了更长的时间(可能需要几分钟,具体取决于系统资源和网络速度)。这突显了字典大小与扫描时长之间的直接关系。

理解字典大小与扫描时间之间的权衡

在最后这个步骤中,你将总结之前扫描的关键收获,重点关注字典大小、扫描时间以及结果全面性之间的权衡。

更大的字典:

  • 优点: 更可能发现隐藏的目录和文件,从而实现更彻底的枚举。这对于查找可能包含漏洞或敏感数据的晦涩或非标准路径至关重要。
  • 缺点: 显著增加扫描时间,消耗更多系统资源,并产生大量输出,这可能难以分析。它也可能产生更多噪音(误报或不相关的条目)。

更小的字典:

  • 优点: 扫描时间大大缩短,资源消耗更少,输出更易于管理。非常适合快速检查或当你对常见路径有很好的了解时。
  • 缺点: 可能会遗漏不常见或自定义命名的目录和文件,导致枚举不完整,并可能忽略关键信息。

选择合适的字典:
字典的选择取决于你的目标和可用时间。

  • 对于初步侦察或快速检查,通常使用像 common.txt 这样较小的、有针对性的字典就足够了。
  • 对于全面深入的评估,则需要使用像 directory-list-2.3-medium.txt 这样更大的字典,甚至更大的字典(例如 directory-list-2.3-big.txt)。
  • 有时,组合方法是最好的:先用小字典快速扫描,如果初步发现值得深入研究,再使用大字典进行后续扫描。
  • 定制化的、针对特定目标或技术栈的字典也可能非常有效。

这种理解对于高效且有效的 Web 应用程序渗透测试至关重要。

总结

在此次实验中,你成功探索了不同字典大小对 Gobuster 目录扫描的影响。你学会了如何在 Kali Linux 中定位默认字典,使用了小型(common.txt)和大型(directory-list-2.3-medium.txt)字典执行扫描,并比较了它们的结果和大致扫描时间。你对其中涉及的权衡有了实际的理解:更大的字典能提供更全面的结果,但需要更多时间;而更小的字典扫描速度更快,但有遗漏不常见条目的风险。这些知识对于在渗透测试的 Web 枚举任务中做出明智的决策至关重要。