使用 airolib-ng 创建 PMK 数据库

Beginner
立即练习

引言

airolib-ng 是 Aircrack-ng 套件中的一个强大工具,用于管理和使用预计算主密钥 (PMK) 数据库。在尝试破解 WPA/WPA2 握手时,最耗时的部分是从潜在的密码短语和网络的名称 (ESSID) 计算 PMK。

通过预先计算常用密码短语和网络名称列表的这些 PMK 并将它们存储在数据库中,你可以极大地加速破解过程。在攻击过程中,aircrack-ng 无需为每个密码执行繁重的计算,只需在数据库中查找 PMK 即可。

在本实验中,你将学习 airolib-ng 的基本操作,以创建和填充 PMK 数据库。

理解预计算主密钥数据库的概念

在本步骤中,我们将在开始使用 airolib-ng 之前,先介绍 PMK 数据库的理论知识。本步骤无需执行任何命令。

WPA/WPA2 网络的安全性依赖于一个四次握手,该握手使用成对主密钥 (PMK) 来加密流量。此 PMK 源自网络的密码 (passphrase) 和其名称 (ESSID)。公式如下:

PMK = PBKDF2(passphrase, SSID, 4096 次迭代, 256 位输出)

当你尝试使用 aircrack-ng 等工具和字典文件破解捕获的 WPA/WPA2 握手时,该工具会为你列表中的每一个密码执行此计算。4096 次迭代使得此过程在计算上非常耗费资源且缓慢。

这时 airolib-ng 就派上用场了。它允许你提前完成这项繁重的工作。你可以使用常用 ESSID 列表和大型密码字典文件,预先计算所有生成的 PMK。然后将这些 PMK 存储在一个高效的 SQLite 数据库中。

在需要破解握手时,aircrack-ng 可以使用此数据库。它不再为每个密码计算 PMK,而是从捕获的握手的 ESSID 和字典文件中的密码计算一次,然后查找你的预计算数据库中的结果。此查找比完整计算快数千倍,从而大大缩短了破解时间。

在接下来的步骤中,你将创建一个这样的数据库,用一个 ESSID 和密码填充它,并验证其完整性。

使用 airolib-ng --new 创建新的 SQLite 数据库

在本步骤中,你将创建一个新的、空的 SQLite 数据库来存储我们的 PMK。我们所有的工作都将在 ~/project 目录下进行。

我们使用 airolib-ng 命令,后跟所需的数据库名称和 --new 标志。此标志告诉 airolib-ng 初始化一个新的数据库文件。

让我们创建一个名为 pmk_db 的数据库。在你的终端中执行以下命令:

airolib-ng pmk_db --new

该工具将在你当前目录 (~/project) 中创建 pmk_db 文件,并在其中设置必要的表。你应该会看到确认数据库创建和初始化的输出。

预期输出:

Database 'pmk_db' created.
Wrote 1 ESSIDs and 0 PMKs.

你可以使用 ls 命令验证文件是否已创建:

ls -l pmk_db

预期输出:

-rw-r--r-- 1 labex labex 8192 May 20 10:30 pmk_db

使用 --import essid 将单个 ESSID 导入数据库

在本步骤中,你将向新创建的数据库添加一个网络名称 (ESSID)。数据库需要知道你希望预计算哪些 ESSID 的 PMK。

我们将使用 --import essid 选项。此选项可以从命令行接受单个 ESSID 作为参数,或者从文件中读取 ESSID 列表。在本实验中,我们将导入一个名为 MyHomeWiFi 的单个 ESSID。

运行以下命令将 ESSID 导入你的 pmk_db 数据库:

airolib-ng pmk_db --import essid MyHomeWiFi

你将看到指示数据库正在读取以及已写入一个 ESSID 的输出。

预期输出:

Reading file...
Wrote 1 ESSIDs and 0 PMKs.
Done.

现在你的数据库已识别 MyHomeWiFi 网络,并准备好存储与之关联的 PMK。

导入密码列表以计算该 ESSID 的 PMK

在本步骤中,你将导入一个密码列表(wordlist),并让 airolib-ng 为我们在上一步导入的 ESSID 计算 PMK。

本实验的设置脚本已在 ~/project 目录中为你创建了一个名为 wordlist.txt 的小型密码列表文件。我们将使用 --import pwd 选项来读取此文件。对于 wordlist.txt 中的每个密码,airolib-ng 将计算 MyHomeWiFi ESSID 的 PMK,并将结果存储在数据库中。

执行以下命令:

airolib-ng pmk_db --import pwd wordlist.txt

该工具将从文件中读取密码并计算 PMK。我们的 wordlist.txt 包含 4 个密码,数据库中有 1 个 ESSID,因此它将计算并存储 4 个 PMK。

预期输出:

Reading file...
Wrote 0 ESSIDs and 4 PMKs.
Done.

你的数据库现在包含了 MyHomeWiFi 网络在 wordlist.txt 中每个密码的预计算密钥。

运行批量操作以验证数据库完整性

在本步骤中,你将学习如何验证数据库内容并计算任何缺失的 PMK 对。这是一个关键的维护步骤,特别是对于大型数据库。

--batch 选项执行一项综合性操作。它会查找数据库中所有 ESSID 和密码的成对组合,并计算尚未存在的任何对的 PMK。它还可以通过重新计算和比较现有 PMK 来验证其完整性。

在你的 pmk_db 数据库上运行批量命令:

airolib-ng pmk_db --batch

由于我们在上一步刚刚计算了所有可能的组合(1 个 ESSID x 4 个密码),该命令将发现无需计算新的 PMK。它只会验证现有的 PMK。

预期输出:

All PMKs have been computed for all ESSIDs.
Nothing to do.

如果你添加了一个新的 ESSID 或一个新的密码列表,运行 --batch 命令将是更新数据库中所有新 PMK 组合的最有效方法。

总结

恭喜你!你已成功使用 airolib-ng 创建和管理了一个预计算主密钥(PMK)数据库。

在本实验中,你已学会:

  • 理解 PMK 数据库的概念及其在加速 WPA/WPA2 破解方面的优势。
  • 使用 airolib-ng --new 创建一个新空数据库。
  • 使用 airolib-ng --import essid 将网络名称导入数据库。
  • 使用 airolib-ng --import pwd 导入密码列表并计算相应的 PMK。
  • 使用 airolib-ng --batch 运行批量操作以验证和更新数据库。

掌握这些知识后,你现在可以构建更大、更全面的 PMK 数据库,以显著加快你的 WPA/WPA2 安全评估速度。创建的数据库 pmk_db 可以这样与 aircrack-ng 一起使用:aircrack-ng -r pmk_db your_capture_file.cap