使用 Crunch 生成自定义密码字典

Kali LinuxBeginner
立即练习

引言

Crunch 是一个强大且灵活的命令行工具,用于生成自定义的密码字典。这些密码字典在网络安全领域至关重要,特别是对于进行密码强度审计和暴力破解攻击的渗透测试人员和安全专业人员。与静态的、预先制作的密码字典不同,Crunch 允许你根据已知的模式、字符集和长度要求创建高度特定的列表,从而显著提高攻击的效率。

在本实验中,你将学习 Crunch 的基础知识。你将从理解其基本语法开始,然后学习生成简单的密码字典、使用自定义字符集、创建基于模式的列表,最后将输出直接通过管道传递给其他命令行工具。

理解 Crunch 工具的语法

在此步骤中,你将学习 crunch 命令的基本语法以及如何访问其帮助菜单。理解命令的基本结构是掌握其功能的第一步。

crunch 的基本语法是:
crunch <min-len> <max-len> [characterset] [options]

  • <min-len>:要生成的单词的最小长度。
  • <max-len>:要生成的单词的最大长度。
  • [characterset]:(可选)用于生成单词的字符集。如果未指定,crunch 默认使用小写字母。
  • [options]:(可选)用于控制输出的各种标志,例如保存到文件或使用模式。

要查看所有可用选项并全面了解该工具,你可以使用 --help 标志。让我们查看帮助菜单。本实验中的所有操作都将在默认的 ~/project 目录中执行。

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

crunch --help

你将看到一个详细的输出,列出了所有标志及其描述。花点时间浏览一下。当你想要探索更高级的功能时,这是一个很好的参考。

crunch version 3.6

Crunch can create a wordlist based on criteria you specify.  The output from
crunch can be sent to the screen, a file, or to another program.

Usage: crunch <min-len> <max-len> [options]
where min-len and max-len are numbers

... (output truncated) ...

现在你已经熟悉了基本语法以及如何查找帮助,你已准备好生成你的第一个密码字典。

生成固定长度的简单密码字典

在此步骤中,你将生成你的第一个固定长度的密码字典。这是 crunch 最常见的用法之一。当最小长度和最大长度相同时,crunch 将为该特定长度生成所有可能的组合。

默认情况下,crunch 会将密码字典打印到标准输出(你的终端屏幕)。对于大型列表,这可能会让人不知所措且不太有用。更好的做法是使用 -o 选项将输出保存到文件。

让我们生成所有可能的 3 字符单词,使用默认的小写字母,并将它们保存到名为 3char.txt 的文件中。

运行以下命令:

crunch 3 3 -o 3char.txt

此命令告诉 crunch 生成最小长度为 3、最大长度为 3 的单词,并将结果输出到 3char.txt。你将在终端中看到有关生成的列表的一些统计信息。

Crunch will now generate the following amount of data: 20280 bytes, 19 KB, 0 MB, 0 GB
Crunch will now generate the following number of lines: 17576

要验证文件是否已正确创建,你可以使用 head 命令查看文件的前几行。

head -n 5 3char.txt

你应该会看到字母列表的开头部分。

aaa
aab
aac
aad
aae

你已成功生成并保存了你的第一个密码字典。

生成具有特定字符集的密码字典

在此步骤中,你将学习如何为你的密码字典指定自定义字符集。当你掌握了密码中可能的字符信息时(例如,它只包含数字,或只包含特定字母),这将非常有用。

要指定字符集,你只需在命令的末尾,长度参数之后,添加你想要使用的字符字符串。

让我们生成一个 4 位 PIN 码列表,仅使用数字 0123。我们将此列表保存到名为 4digit.txt 的文件中。

执行此命令:

crunch 4 4 0123 -o 4digit.txt

在此,4 4 将长度设置为正好四个字符,0123 提供了自定义字符集,而 -o 4digit.txt 保存输出。

让我们检查生成文件的开头部分以确认输出。

head -n 5 4digit.txt

输出将显示仅使用指定数字的前五个组合。

0000
0001
0002
0003
0010

如你所见,crunch 现在仅使用你提供的字符,让你对生成的密码字典拥有更大的控制权。

使用 -t 标志生成基于模式的单词

在此步骤中,你将使用 -t 标志来生成基于特定模式的密码字典。这是 Crunch 最强大的功能之一,它允许你在知道密码结构的一部分时创建高度针对性的密码字典。

-t 标志使用特殊占位符来表示不同的字符类型:

  • @ 将被替换为小写字母。
  • , 将被替换为大写字母。
  • % 将被替换为数字。
  • ^ 将被替换为符号。

假设你知道一个密码以单词 "user" 开头,后面跟着两个数字,最后是一个大写字母。模式将是 user%%,。总长度为 7 个字符("user" 占 4 个,%% 占 2 个,, 占 1 个)。

让我们生成一个基于此模式的密码字典,并将其保存到 pattern.txt

crunch 7 7 -t user%%, -o pattern.txt

此命令告诉 crunch 生成正好 7 个字符的单词,遵循 user%%, 模式。

现在,让我们查看输出文件的前几行。

head -n 5 pattern.txt

输出将匹配你定义的模式。

user00A
user00B
user00C
user00D
user00E

此方法通过仅关注合理的密码候选者,极大地减小了密码字典的大小和暴力破解攻击所需的时间。

将 Crunch 输出直接管道传输到 Hashcat

在此步骤中,你将学习一种强大的技术:将 crunch 的输出直接管道传输到另一个工具。这非常高效,因为它避免了将可能非常庞大的密码字典写入磁盘,从而节省了空间和时间。单词被实时生成并“管道传输”(发送)到下一个程序。

虽然 crunch 通常与 Hashcat 或 John the Ripper 等密码破解工具一起使用,但我们将使用一个简单的 grep 命令来模拟此过程。grep 是一个用于搜索文本的工具,它将用于演示管道传输的概念。

假设我们正在尝试查找密码 labex23。我们怀疑密码以 "labex" 开头,后面跟着两个数字。

我们可以生成匹配此模式的单词,并直接将它们管道传输到 grep,以查看我们的目标密码是否在生成的列表中。管道符号 | 用于将一个命令的输出连接到另一个命令的输入。

执行以下命令:

crunch 7 7 -t labex%% | grep "labex23"

此命令执行两项操作:

  1. crunch 7 7 -t labex%% 生成所有以 "labex" 开头后跟两个数字的 7 个字符的单词(例如,labex00labex01 等)。
  2. | 管道将每个生成的单词发送到 grep "labex23" 命令,该命令检查单词是否与 "labex23" 匹配。

如果找到匹配项,grep 将其打印到终端。

labex23

你已成功即时生成了一个密码字典,并使用另一个工具对其进行了处理,这是高效安全测试的核心技能。

总结

恭喜你完成了本次实验!你已经掌握了使用 crunch 的基本技能,这是一个用于生成自定义密码字典的强大工具。

在本次实验中,你学会了:

  • 理解 crunch 命令的基本语法。
  • 生成固定长度的简单密码字典并将其保存到文件。
  • 指定自定义字符集以创建更具针对性的密码字典。
  • 使用 -t 标志根据已知模式生成单词。
  • crunch 的输出直接管道传输到 grep 等其他命令行工具,以执行实时处理而不保存到文件。

这些技能是网络安全中许多任务的基础,尤其是在密码审计和渗透测试方面。通过创建定制化的密码字典,你可以显著提高安全评估的效率和成功率。