介绍
在本实验中,你将学习如何使用 Hashcat(一款强大且功能多样的密码恢复工具)来破解 WPA/WPA2 PMKID(成对主密钥标识符)哈希。PMKID 是 WPA/WPA2 认证过程的一部分,有时可以在接入点(access point)上捕获,而无需客户端在场。破解 PMKID 通常比破解完整的 4 握手(4-way handshake)更有效率。
你将贯穿整个过程,从准备哈希文件到使用 Hashcat 执行字典攻击。这种实践经验将让你在受控的教育环境中,对密码破解的工作原理有实际的理解。本实验中的所有活动仅用于教育目的。
将 PMKID 捕获转换为 Hashcat 兼容格式
在此步骤中,你将了解 Hashcat 破解 PMKID 哈希所需的格式。通常,PMKID 从原始网络捕获文件(例如 .pcapng 文件)中提取。像 hcxpcapngtool 这样的工具用于将捕获文件转换为 Hashcat 可以处理的纯文本哈希格式。
执行此操作的命令如下:
hcxpcapngtool -o <output_hash_file> <input_capture_file.pcapng>
在本实验中,为确保流程顺畅,我们已为你完成了此转换。生成的哈希保存在当前目录(~/project)下的 pmkid.hash 文件中。
让我们检查一下该文件的内容,以了解其结构。使用 cat 命令显示文件的内容。
cat pmkid.hash
你将看到以下输出,这是一行代表 PMKID 哈希的内容:
d5b6c18645897310626525389ebb3461*a0b1c2d3e4f5*f9e8d7c6b5a4*4d795377656574486f6d65
此格式为 PMKID*MAC_AP*MAC_STA*SSID_HEX。每个部分由星号分隔,为 Hashcat 提供了执行攻击所需的所有必要信息。
选择正确的 Hashcat 模式以破解 WPA-PMKID,即 -m 16800
在此步骤中,你将识别 Hashcat 中破解 PMKID 哈希的正确模式。Hashcat 支持数百种不同的哈希算法,每种算法都有一个唯一的模式编号。提供正确的模式对于 Hashcat 正确工作至关重要。
你可以使用 hashcat 命令的 --help 选项来查找所有支持的哈希类型及其对应的模式列表。为了缩小列表范围,你可以将输出通过管道传递给 grep 并搜索特定关键字,如 "PMKID"。
运行以下命令查找 WPA-PMKID 的模式:
hashcat --help | grep "WPA-PMKID"
输出将显示相关的哈希模式:
16800 | WPA-PMKID-PBKDF2 | Network Protocols
从输出中可以看到,WPA-PMKID-PBKDF2 的模式编号是 16800。你将在 Hashcat 命令中使用此模式编号配合 -m 选项。
使用哈希文件构建 Hashcat 命令
在此步骤中,你将开始构建 hashcat 命令。字典攻击的基本语法是 hashcat [options] <hash_file> <wordlist_file>。
到目前为止,你已经确定了两个关键组件:
- 哈希模式:
-m 16800 - 哈希文件:
pmkid.hash
让我们将它们组合起来。我们还需要使用 -a 选项指定攻击模式。字典攻击的模式是 0,因此我们将使用 -a 0。这是默认的攻击模式,但明确指定它是一个好习惯。
让我们尝试仅使用哈希模式和哈希文件运行命令。这将失败,但这是确认我们的语法并查看 Hashcat 接下来需要什么的好方法。
hashcat -m 16800 pmkid.hash
Hashcat 将启动然后退出并显示用法消息,因为它缺少此攻击类型所需的参数。
hashcat (v6.2.6) starting...
* Device #1: WARNING! Kernel exec timeout is not disabled.
...
Usage: hashcat [options]... hash|hashfile|hccapxfile [dictionary|mask|directory]...
Try --help for more help.
错误表明,对于默认攻击模式(字典),需要一个单词列表或目录。这证实了我们到目前为止的命令结构是正确的,并直接引导我们进入下一步:提供单词列表。
为字典攻击指定单词列表
在此步骤中,你将通过添加单词列表来完成 Hashcat 命令。字典攻击通过从给定文件(“单词列表”或“字典”)中获取每个单词,并将其作为潜在密码针对哈希进行测试来工作。
在本实验中,一个名为 wordlist.txt 的小型单词列表文件已为你创建在 ~/project 目录中。让我们检查一下它的内容。
cat wordlist.txt
你将看到一个简短的潜在密码列表:
secret
123456
password123
qwertyuiop
labex
这些单词中的一个就是我们哈希的正确密码。现在,你可以通过将单词列表文件名附加到上一步的命令中来构建完整的命令。
完整命令是:hashcat -m 16800 -a 0 pmkid.hash wordlist.txt
-m 16800: 指定 WPA-PMKID 哈希类型。-a 0: 指定字典攻击模式。pmkid.hash: 包含要破解的哈希的文件。wordlist.txt: 包含密码候选的字典文件。
在最后一步,你将执行此命令来破解哈希。
运行 Hashcat 并分析破解结果
在此步骤中,你将执行完整的 Hashcat 命令并分析输出以找到破解的密码。是时候将所有内容整合起来并开始破解过程了。
在你的终端中运行完整命令:
hashcat -m 16800 -a 0 pmkid.hash wordlist.txt
Hashcat 将初始化,显示会话信息,并开始测试 wordlist.txt 中的密码。由于单词列表非常小,该过程将几乎瞬时完成。一旦找到正确的密码,Hashcat 将显示它并报告状态为“Cracked”。
输出将类似于:
...
Session..........: hashcat
Status...........: Cracked
Hash.Name........: WPA-PMKID-PBKDF2
Hash.Target......: d5b6c18645897310626525389ebb3461*a0b1c2d3e4f5*...
Time.Started.....: ...
Time.Estimated...: 0 secs
Guess.Base.......: File (wordlist.txt)
...
Recovered........: 1/1 (100.00%) Digests
...
d5b6c18645897310626525389ebb3461*a0b1c2d3e4f5*f9e8d7c6b5a4*4d795377656574486f6d65:password123
All hashes have been recovered.
...
最重要的行是 d5b6c18645897310626525389ebb3461*...:password123,它显示了原始哈希,后跟一个冒号和恢复的密码:password123。
Hashcat 会自动保存破解的密码。要查看之前破解的哈希而无需再次运行攻击,你可以使用 --show 选项。
hashcat -m 16800 pmkid.hash --show
此命令将立即显示破解的哈希和密码对:
d5b6c18645897310626525389ebb3461*a0b1c2d3e4f5*f9e8d7c6b5a4*4d795377656574486f6d65:password123
总结
恭喜你成功破解了一个 PMKID 哈希!在本实验中,你获得了 Hashcat 的实践经验,并学习了字典攻击涉及的关键步骤。
你已学会如何:
- 识别 Hashcat 兼容的 PMKID 哈希格式。
- 确定特定哈希类型的正确 Hashcat 模式(WPA-PMKID 使用
-m 16800)。 - 构建用于字典攻击(
-a 0)的完整 Hashcat 命令。 - 使用哈希文件和单词列表执行攻击。
- 分析输出并使用
--show选项查看破解的密码。
虽然本实验使用了小型、简单的示例,但相同的原理也适用于现实场景,这些场景会涉及更大的单词列表和更强大的硬件。你所学的技能为你理解密码安全和道德黑客实践奠定了坚实的基础。
