破解 KeePass KDBX 数据库密码

Kali LinuxBeginner
立即练习

引言

KeePass 是一款流行的开源密码管理器,可帮助你安全地管理密码。它将密码存储在加密的数据库文件中,通常扩展名为 .kdbx。虽然安全性很高,但数据库保护的强度在很大程度上取决于用户选择的主密码。

在本实验中,你将扮演安全分析师的角色,测试 KeePass 数据库密码的强度。你将学习用于道德和教育目的的密码破解基本流程。我们将使用 keepass2john(来自 John the Ripper 套件的工具)从示例 .kdbx 文件中提取密码哈希,然后使用强大的密码恢复工具 hashcat 通过字典攻击来破解它。

这次实践经验将展示攻击者如何利用弱密码,并强调使用强大、复杂的密码的重要性。

创建一个带有简单密码的示例 KeePass 数据库

在此步骤中,我们将创建一个目标 KeePass 数据库。要执行密码破解测试,我们首先需要一个 .kdbx 文件来操作。我们将使用 KeePass 应用程序创建一个新数据库,并为了演示目的,用一个简单、易于猜测的密码来保护它。

首先,在终端中输入 KeePass 的名称来启动该应用程序。

keepass2

这将打开 KeePass 的图形用户界面。现在,请按照以下步骤创建数据库:

  1. 在 KeePass 窗口中,转到菜单并点击 File -> New...
  2. 将出现一个“Create New Password Database”窗口。点击 OK 继续。
  3. 系统会提示你保存新数据库文件。导航到 /home/labex/project 目录,将文件命名为 MySecrets.kdbx,然后点击 Save
  4. 接下来,将出现“Create Master Key”窗口。在这里设置数据库的主密码。在本实验中,在“Master password”字段中输入 password123,并在“Repeat password”字段中重复输入。点击 OK
  5. 将出现“New Password Database - Step 2”窗口。你可以保留默认设置。点击 OK
  6. 现在,你新创建的空数据库已创建并打开。你可以选择添加一个示例条目,但这对于本实验不是必需的。
  7. 最后,点击 File -> Exit 关闭 KeePass 应用程序。

现在,你的 ~/project 目录中应该有一个名为 MySecrets.kdbx 的文件。你可以使用 ls 命令验证其是否存在。

ls -l ~/project

你应该会在输出中看到 MySecrets.kdbx

使用 keepass2john 提取哈希

在此步骤中,我们将从 MySecrets.kdbx 文件中提取密码哈希。像 hashcat 这样的密码破解工具不能直接作用于数据库文件本身。相反,它们作用于“哈希”,这是主密码的加密表示。

我们将使用 keepass2john(John the Ripper 密码破解套件包含的一个实用程序)将 KeePass 数据库的密钥信息转换为 hashcat 可以理解的格式。

打开你的终端并运行以下命令。此命令读取 MySecrets.kdbx 文件并输出相应的哈希,我们将该输出重定向并保存到一个名为 keepass.hash 的新文件中。

keepass2john ~/project/MySecrets.kdbx > ~/project/keepass.hash

由于输出已重定向到 keepass.hash 文件,此命令在终端中不会产生任何可见输出。要查看新创建的哈希文件的内容,请使用 cat 命令:

cat ~/project/keepass.hash

输出将是一行长文本,看起来像这样:

MySecrets:$keepass$*2*6000*0*b1b5b8a8a5b8a8a5b8a8a5b8a8a5b8a8*...*...

这个字符串就是哈希。它包含了 hashcat 尝试破解密码所需的所有必要信息,包括加密算法、salt 和加密的主密钥。

识别 KeePass 的正确 Hashcat 模式

在此步骤中,我们将确定 hashcat 在破解 KeePass 哈希时需要使用的正确模式。hashcat 是一个功能极其强大的工具,支持从操作系统密码到应用程序特定格式的数百种不同类型的哈希。

为了正确工作,我们必须明确告知 hashcat 我们提供的是哪种类型的哈希。这是通过使用 -m 标志指定一个数字模式来完成的。要查找 KeePass 的模式编号,我们可以搜索 hashcat 的帮助文档。

在你的终端中运行以下命令。它将 hashcat 的完整帮助输出通过管道传递给 grep,然后 grep 会过滤出包含“keepass”一词的行。

hashcat --help | grep -i keepass

grep 中的 -i 标志使搜索不区分大小写。输出将显示相关的模式:

13400 | KeePass 1 (AES/Twofish) / KeePass 2 (AES)             | Password Managers

从这个输出中,我们可以看到 KeePass 1 和 2 数据库的模式是 13400。这是我们在最后一步启动攻击时需要的数字。

为攻击准备字典

在此步骤中,我们将为字典攻击准备一个字典。字典攻击(或单词列表攻击)是一种方法,破解工具会尝试使用预先编译列表中的每个单词作为潜在密码。此攻击的成功完全取决于正确密码是否包含在列表中。

在实际场景中,攻击者会使用包含数百万甚至数十亿常用密码的大型字典。在本实验中,我们将创建一个非常小的自定义字典,以确保破解过程快速且成功。最重要的是,我们将在列表中包含正确密码 password123

使用 nano 文本编辑器创建一个名为 wordlist.txt 的新文件。

nano ~/project/wordlist.txt

nano 打开后,在编辑器中输入以下密码,每行一个:

password
123456
password123
qwerty
labex

输入单词后,按 Ctrl+X 保存文件并退出 nano,然后按 Y 确认,最后按 Enter

现在我们已经准备好了供 hashcat 使用的字典。

发起攻击并恢复主密码

在最后一步,我们将整合所有内容,并使用 hashcat 发起密码破解攻击。我们已经有了哈希文件 (keepass.hash)、正确的哈希模式 (13400) 以及我们的自定义字典 (wordlist.txt)。

现在,在你的终端中执行以下命令来启动攻击:

hashcat -m 13400 -a 0 ~/project/keepass.hash ~/project/wordlist.txt

让我们分解一下这个命令:

  • hashcat: 我们正在运行的程序。
  • -m 13400: 指定了 KeePass 2 的哈希模式,这是我们在上一步中确定的。
  • -a 0: 指定了攻击模式。模式 0 是“Straight”(直通)或字典攻击。
  • ~/project/keepass.hash: 包含目标哈希的文件的路径。
  • ~/project/wordlist.txt: 字典文件的路径。

hashcat 将会初始化并开始测试你字典中的密码。由于我们的列表非常短并且包含正确密码,这个过程会非常快。你将看到状态更新,很快过程就会完成。

攻击完成后,hashcat 会将找到的密码存储在一个名为“potfile”的文件中。要查看破解出的密码,你可以再次运行相同的命令并加上 --show 标志。

hashcat -m 13400 -a 0 ~/project/keepass.hash ~/project/wordlist.txt --show

此命令将立即显示破解出的哈希及其对应的密码:

MySecrets:$keepass$*2*6000*0*...:password123

输出清晰地显示了原始哈希,后面跟着一个冒号和恢复的密码:password123。恭喜你,你已成功破解了 KeePass 数据库密码!

总结

在本实验中,你成功执行了字典攻击,以恢复 KeePass KDBX 数据库的主密码。

你学习了一个完整、实用的密码审计工作流程,其中包括:

  1. 创建一个带有弱密码的示例 KeePass 数据库。
  2. 使用 keepass2john 将密码哈希提取为适合破解的格式。
  3. hashcat 中识别 KeePass 数据库的正确哈希模式 (13400)。
  4. 准备一个包含潜在密码的自定义字典。
  5. 使用 hashcat 发起攻击并成功恢复密码。

这个练习强调了一个关键的安全原则:整个密码数据库的安全性与其主密码的强度一样。使用简单、常用或易于猜测的密码,即使受到强加密保护,也会使其容易受到字典攻击。请务必为你的密码管理器使用长、复杂且唯一的密码。