在 Hashcat 中创建自定义规则

Kali LinuxBeginner
立即练习

引言

Hashcat 是一个强大且功能多样的密码恢复工具。它最有效的特性之一是基于规则的攻击,它允许你对单词列表(wordlist)进行操作,从而生成大量的密码候选。你可以创建自己的自定义规则来针对特定目标,而不是使用预先制作好的规则文件。

在本实验(lab)中,你将学习 Hashcat 规则语法的基本知识,并从头开始创建自己的自定义规则文件。你将编写规则来将单词的首字母大写并附加年份,然后在一个示例密码破解攻击中使用这个自定义规则文件。

学习基础规则语法,如追加 '$' 和前置 '^'

在本步骤中,你将学习 Hashcat 规则的基础语法。规则是简单的单字符命令,用于指示 Hashcat 如何操作单词列表(wordlist)中的单词。最基本的两个规则是用于前置和追加字符。

  • ^x: 在单词开头前置字符 x
  • $x: 在单词末尾追加字符 x

为了在不运行完整攻击的情况下查看这些规则的工作方式,我们可以使用 --stdout 选项。这将把规则操作的输出直接打印到终端。

首先,让我们测试追加规则。我们将创建一个临时规则文件,该文件将数字 1 追加到每个单词的末尾。

echo '$1' > temp_rule.txt

现在,使用此规则针对我们的 wordlist.txt 运行 Hashcat。--force 标志用于使 Hashcat 即使在检测到不受支持的环境(如虚拟机)时也能运行。

hashcat --force --stdout wordlist.txt -r temp_rule.txt

你应该会看到列表中的单词后面追加了 1

password1

接下来,让我们测试前置规则。我们将创建一个规则来前置字符 A

echo '^A' > temp_rule.txt

使用这个新规则再次运行 Hashcat:

hashcat --force --stdout wordlist.txt -r temp_rule.txt

输出现在将在单词开头显示字符 A

Apassword

请随意尝试其他字符以巩固你的理解。完成后,你可以删除临时文件。

rm temp_rule.txt

创建新的自定义规则文件

在本步骤中,你将创建一个新的空文件,用于存放我们攻击的所有自定义规则。为了清晰起见,通常会给规则文件加上 .rule 扩展名。

我们将在当前工作目录 ~/project 中创建一个名为 labex.rule 的文件。你可以使用 touch 命令轻松创建一个空文件。

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

touch labex.rule

为了确认文件已成功创建,你可以使用 ls 命令列出目录的内容。

ls

你应该会在输出中看到 labex.rule,以及 hashes.txtwordlist.txt 文件。

hashes.txt  labex.rule  wordlist.txt

现在你拥有了一个专用的文件,可以准备添加你的自定义规则了。

添加规则以大写首字母 'c'

在本步骤中,你将向 labex.rule 文件添加你的第一条规则。一种非常常见的密码模式是将单词的首字母大写。Hashcat 有一个专门用于此的规则:

  • c: 将单词的首字母大写,并将所有其他字母小写。

我们将此规则添加到 labex.rule 文件中。echo 命令与单个重定向符 > 结合使用,是一种快速将内容写入文件的方式,会覆盖之前存在的所有内容。

echo 'c' > labex.rule

现在,让我们测试新的规则文件,看看它的效果。我们将再次使用 --stdout 选项来预览输出。

hashcat --force --stdout wordlist.txt -r labex.rule

输出应该是单词 password,其首字母已按 c 规则大写。

Password

你已成功创建并测试了你的第一条自定义规则。

添加规则以追加年份 ' $2 $0 $2 $4'

在本步骤中,你将增强规则的复杂性。你可以在单行上组合多个规则命令,以创建更具体的密码候选。我们将修改规则,使其不仅大写首字母,还追加一个年份,例如 2024

要追加特定字符,你使用 $ 命令后跟该字符。例如,$2 会追加数字 2。要构建字符串 2024,我们需要追加 2,然后是 0,然后是 2,最后是 4

组合后的规则将如下所示:c $2 $0 $2 $4。这告诉 Hashcat 首先执行大写操作(c),然后按顺序追加指定的字符。

让我们使用这个新的、更强大的规则来更新 labex.rule 文件。

echo 'c $2 $0 $2 $4' > labex.rule

现在,测试更新后的规则文件,以查看组合命令的结果。

hashcat --force --stdout wordlist.txt -r labex.rule

输出现在应该是大写后的单词,后跟年份 2024

Password2024

这展示了如何将规则链接在一起,以创建复杂且有针对性的密码模式。

在样本攻击上测试自定义规则文件

在本步骤中,你将使用你完成的自定义规则文件 labex.rule 来执行一次真实的密码破解攻击。我们将以 hashes.txt 文件中提供的样本 MD5 散列为目标。

攻击命令将指定散列类型、攻击模式、散列文件、单词列表,最后是我们的自定义规则文件。

  • -m 0: 指定散列类型为 MD5。
  • -a 0: 指定攻击模式为“Straight”(直通)或字典攻击。
  • hashes.txt: 包含要破解的散列的文件。
  • wordlist.txt: 用作基础的字典文件。
  • -r labex.rule: 指定要应用于单词列表的自定义规则文件。

运行以下命令开始攻击:

hashcat --force -m 0 -a 0 hashes.txt wordlist.txt -r labex.rule

Hashcat 将启动,将规则 c $2 $0 $2 $4 应用于单词 password,生成 Password2024,对其进行散列,并与 hashes.txt 中的散列进行比较。它将找到匹配项并报告破解的密码。

攻击完成后(应该会非常快),你可以使用 --show 选项查看破解的密码。

hashcat --force -m 0 --show hashes.txt

输出将显示散列及其破解的明文密码。

a915550249347678553a332349443648:Password2024

恭喜你,你已成功创建了一个自定义规则并使用它破解了一个密码!

总结

在本实验中,你学习了在 Hashcat 中创建自定义规则的基本技能。你首先了解了前缀(^)和后缀($)字符的基本语法。然后,你创建了自己的规则文件 labex.rule,并用日益复杂的规则填充它。

你成功地编写了一个规则来大写单词的首字母(c),然后通过链接命令来追加年份($2 $0 $2 $4)来增强它。最后,你在实际的攻击场景中应用了这个自定义规则,成功破解了一个 MD5 散列。

这些知识是掌握 Hashcat 强大规则引擎的垫脚石,使你能够创建高度针对性和高效的密码破解策略。