引言
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.txt 和 wordlist.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 强大规则引擎的垫脚石,使你能够创建高度针对性和高效的密码破解策略。


