经过前几章的工作,你可能已经获得了需要恢复的凭证。然而,这并不总是如此,我们需要转向更显著的方法来恢复我们需要的凭证。你可能还建立了一个辅助词汇表,用于这些过程,这将在接下来的操作中帮助我们。
在本书中,我们将专注于两个主要的密码破解软件。需要注意的是,在后续章节中,我们将使用其他软件包来协助恢复某些类型的凭证。在某些情况下,这些将是辅助程序或脚本,帮助将哈希转换为我们密码破解程序识别的格式。在其他情况下,我们将安装软件来帮助捕获需要破解的哈希。我们将在必要时介绍这些工具。
重要的是要注意,所有链接和网址在写作时都是正确的。有时,互联网上的内容会发生变化------幸运的是,近年来常见的代码库如 GitHub 成为寻找所需代码的更常见场所。如果链接不再解析到你需要的资源,你可能需要利用你选择的搜索引擎来找到内容。正如我们在上一章讨论的那样,谨慎选择这些资源。
此外,我们假设你已经了解了 Linux 和 Windows 文件系统的基本知识,并能够在命令行中移动和运行基本命令。
在本书中,我们将使用 John the Ripper 和 hashcat 作为主要的破解工具。这两者在各方面相辅相成,并且在特定情况下每个都可能是合适的工具。
在本章中,我们将讨论以下主要主题:
- 安装和介绍 John
- 安装和介绍 hashcat
技术要求
你将需要一个系统(或两个系统)来运行 hashcat 和 John。虚拟机(VM)对于记录和测试软件很有用,但它们在系统资源(CPU 核心数和 GPU 数量)上会有所限制。
hashcat 需要 NVIDIA 或 AMD 驱动程序才能发挥最佳效果,而这些驱动程序通常在 Windows 中更容易安装。因此,你可能希望在 Windows 中设置 hashcat,我们将在本章中详细介绍这一过程。另一方面,我们将在 Linux 系统上安装 John,因为在该操作系统上的安装更加直接。然而,你完全可以采取不同的方法。无论如何,你需要一个系统来安装这些软件,我们建议使用"真实的"(非虚拟化的)系统。
安装和介绍 John
John(John the Ripper 的缩写)有着悠久的历史,可以追溯到 1990 年代。撰写本文时的当前主要版本是 1.9.0。虽然这个版本最初在 2019 年发布,但我们经常看到代码库的改进和变化。然而,John 背后的团队只会定期发布版本。
此时,你需要做出决定------是使用当前版本,还是通过其前沿代码库引入过去几年的附加改进。前沿代码库可能包含 1.9.0 版本中不存在的改进;然而,之所以称为"前沿",是因为处理它们时可能会"割伤"自己------换句话说,前沿产品中的功能更有可能出现故障或无法正常工作。如果你想要更稳定的体验,请使用 1.9.0 版本;如果需要最新和最强大的版本,请认识到其中可能会有一些周期性挑战。无论哪种情况,我们建议(并将讨论安装)1.9.0 Jumbo 版本,该版本还包括核心发布之外的各种支持工具和功能。
你还需要决定在哪个平台(主操作系统)上安装 John。在我们的示例中,我们将在 Ubuntu 20.04 LTS 上安装 John。安装 Ubuntu 20.04 或其他 Linux 发行版的过程留给你自己进行。要安装 John 1.9.0-Jumbo,我们需要访问 openwall GitHub 仓库并找到 1.9.0-Jumbo 的发布标签。撰写本文时,URL 为 github.com/openwall/Jo...。此页面将提供下载该版本源代码的选项,如图 3.1 所示:
下载完成后,解压文件内容;使用 Ubuntu 内置的归档工具即可。我们建议将文件解压到你的主目录(/home/username)。完成后,进入 /john-1.9.0-Jumbo-1 目录下的 doc 目录,找到 install-ubuntu 文件。这将包含安装 John 的最新说明。我们将在此介绍高级步骤:
确保安装了适当的构建工具链。撰写本文时,通过运行以下命令完成:
arduino
$ sudo apt-get -y install build-essential libssl-dev git zlib1g-dev
注意,John 中的一些安装命令需要使用 sudo,一些则不需要;请不要在不需要时使用 sudo,因为最终产品可能无法正常工作。 按照安装文档的建议,我们将安装一些补充软件包以提高性能:
arduino
$ sudo apt-get -y install yasm libgmp-dev libpcap-dev pkg-config libbz2-dev
此时,按照说明安装 AMD 或 NVIDIA GPU 支持。
最后,我们准备构建和安装 John。从 /john-1.9.0-Jumbo-1/src 目录中,运行以下命令:
go
./configure && make -s clean && make -sj4
注意,这是在不使用 sudo 的情况下运行的。这应该确保 John 拥有所需的一切,然后我们可以构建 John。最终,输出应该看起来类似于图 3.2 中所示的内容:
最后,我们可以通过返回到 /john-1.9.0-Jumbo-1/run 目录并运行以下命令来测试安装:
bash
./john --test=0
你应该会看到大量的输出,表明所有测试都成功,并且 John 已准备就绪,如图 3.3 所示:
最后一步,我们可以通过运行以下命令,对各种哈希类型进行基准测试,以评估 John 的性能:
bash
./john --test
这个命令执行与之前相同的自测,但也会进行基准测试。需要注意的是,由于要对 400 多种哈希类型进行基准测试,这个过程会比较慢,但这也会为你提供有关性能的粗略数据(见图 3.4):
就这样!我们已经在我们的平台上成功安装了 John,并准备进行破解。这次安装还有一个重要的附带好处------John 的安装还设置了一些非常有用的实用脚本,这些脚本可以帮助将恢复的哈希转换为 John 可以用于破解的格式。这使得 John 能够更容易地通过修改脚本而不是核心产品来跟上文件格式的变化。如果你查看 John 二进制文件所在的 /run 目录的内容,可以看到这些各种实用工具------它们基于 Perl 或 Python------在同一个目录中(见图 3.5):
这些步骤带你通过与 1.9.0 版本相关的压缩源代码安装 John。如果我们想要获取前沿的 John 内容,则需要以不同的方式获取源代码目录。我们需要准备一个放置源代码的位置,然后通过在终端中运行以下命令来复制代码:
bash
bash
复制代码
git clone https://github.com/openwall/John.git
从那里,你可以按照前面的说明安装先决条件,然后构建和安装 John。记得查看 /doc 子目录中的安装文档以获取任何更改信息。
现在我们已经安装了 John,让我们快速浏览一下产品的核心功能。
John 的核心功能
John the Ripper 提供了不同的操作模式,每种模式都专为特定类型的密码破解设计。主要模式如下:
- 词汇表模式:使用词典或词汇表与哈希密码进行比较
- 单次破解模式:通过生成基于已知用户名和特定于用户的其他信息的密码候选项,专注于破解密码哈希------因此速度快,但有时不成功
- 递增模式:通过系统地生成给定密钥空间内的所有可能密码组合来执行暴力攻击
要选择模式,请使用相应的命令行选项,例如 --wordlist
对于词汇表模式,--single
对于单次破解模式,或 --incremental
对于递增模式。
词汇表修改规则
John the Ripper 的词汇表修改规则允许你对词汇表中的单词执行各种操作,以生成新的密码候选项。这些操作可以包括字符替换、删除或插入、大写等。词汇表修改规则有助于扩展词汇表的有效性,并增加破解密码的机会。你可以创建自定义规则文件或使用 John the Ripper 或其社区提供的预定义规则。要使用词汇表修改规则,添加 --rules
选项,后跟规则文件的名称或路径。
字符集支持
John 还支持指定破解时使用的适当字符集------虽然英语读者可能不熟悉这一点,但其他语言可能会利用各种应在破解中考虑的字符。John the Ripper 的自定义字符集允许你在递增模式下定义用于生成密码候选项的字符集。默认情况下,John 提供了几种内置字符集,包括小写字母、大写字母、数字和特殊字符。你还可以创建自定义字符集以满足你的需求。当你对密码结构有一些了解时,自定义字符集有助于限制搜索空间,从而减少破解密码所需的时间。
安装 hashcat
近年来,hashcat 已成为密码破解工作的一个极佳替代方案,并且在基于 GPU 的破解方面表现出色。虽然并非所有的哈希算法都能通过 GPU 加速破解,但 hashcat 在许多情况下仍能显著提高效率。
hashcat 真正出色的地方在于其利用 GPU 进行各种密码破解活动的能力。GPU 越快,hashcat 破解密码的速度就越快。这对于基于 AMD 和 NVIDIA 的 GPU 都适用,尽管不同哈希算法的性能可能会有显著差异。为了利用 hashcat 的优势,我们需要一块 GPU,这超出了本书的范围。鉴于大多数人至少会定期使用强大的 GPU 进行其他任务(如游戏),我们将在 Windows 而不是 Linux 上安装 hashcat。幸运的是,hashcat 为 Windows 平台提供了预编译的二进制文件。
hashcat 的二进制文件可以在 hashcat.net/hashcat/ 找到。在这里,可以下载当前版本(撰写本文时为 6.2.6)以及以前的版本。一般来说,开始使用 hashcat 的最新版本是合理的------由于其安装非常简单,如果遇到问题,卸载并更换为旧版本也不太困难。需要注意的是,许多安全专业人士对预编译软件表示不信任,因为他们无法充分验证软件的编译过程。虽然我们完全理解这一点,但在这种情况下,从源代码编译 hashcat 二进制文件的工作将留给你自行处理。如果你选择这条路径(这也将帮助你更好地理解产品和过程),请参考 github.com/hashcat/has... 上的说明。可以在 Windows 上使用几种不同的工具链进行本地编译,或者在 Linux 上编译 Windows 版本。
在访问 hashcat.net/hashcat 下载 Windows 二进制文件时,该页面还会列出我们破解硬件的重要驱动程序要求(见图 3.6):
你在这里选择的路径当然取决于你用于破解的机器的硬件。请根据需要安装适当的软件。
一旦你下载了 hashcat 的二进制文件,如页面顶部所述(见图 3.7),一个压缩文件将会下载到你的用户账户的 /Downloads 目录:
不幸的是,hashcat 的二进制文件包是使用 7-Zip 压缩的,这在 Windows 中无法直接打开。如果我们尝试打开它,会发现 Windows 不知道如何处理这个文件(见图 3.8):
虽然 Windows 会提示我们使用 Microsoft Store 来查找软件,但在这种情况下,我们将使用 7-Zip 提供的安装程序,该程序可以在 www.7-zip.org/ 下载。这个安装程序是免费使用的,并且可以处理多种文件类型。在下载 7-Zip 时,大多数现代 Windows 计算机最适合使用 64 位 x64 版本(见图 3.9):
7-Zip 可执行文件是一个自解压安装程序,它会要求你选择文件系统上的目标位置(默认设置即可),然后自解压并安装自己,包括一些方便的右键菜单选项。当我们右键点击下载的 hashcat-6.2.6.7z 文件时,会有多个解压和提取文件的选项(见图 3.10):
在这种情况下,让我们选择"Extract to 'hashcat-6.2.6\'"。虽然这是撰写本文时的当前版本,但你的文件夹名称可能会根据版本不同而有所不同。这将在下载目录中创建一个包含所有正确的 hashcat 子文件夹的文件夹。我们可以将此文件夹移动到文件系统上的任何位置。如果你想要"路径"目录,可以将文件夹放在支持该功能的区域,或者将文件夹添加到 Windows 的路径中。如果不需要此功能,可以随意将文件夹移动到适合你的任何位置。
现在到了简单的部分------一旦你解压了 hashcat,你就拥有了所有所需的内容。打开命令提示符,进入 hashcat 文件夹,然后输入 hashcat --help
。如果你看到一大堆帮助文本,这表明 hashcat 已正确安装并准备就绪(见图 3.11):
现在,让我们进行一个快速基准测试。从命令行输入:
在这种模式下,hashcat 会逐个对所有支持的哈希类型进行基准测试。这是一个耗时的操作,但可以很好地了解你在各种哈希类型上的整体速度。如果你在第一个哈希类型测试时没有错误,并且你的 CPU 和 GPU 硬件被识别,这意味着你的驱动程序已正确安装。如果你没有安装 OpenCL 和 GPU 驱动程序,基准模式可能会因错误而崩溃。在我们的例子中,我们在这个虚拟机上安装了 OpenCL,可以看到第一个测试的哈希类型(MD5)返回了速度和支持的平台------如果支持多个平台(如 GPU 和 CPU),两种速度都会被测量并显示出来(见图 3.13):
如果我们想了解特定哈希类型的哈希速率,可以查找与该哈希相关的模式,然后通过运行 hashcat -b -m xxxxx
只对该模式进行基准测试,其中 xxxxx
是要测试的特定模式。在这个例子中,我们将基准测试模式 22000,用于使用 hashcat 破解 WPA2-PSK 无线密码短语,命令如下:
css
hashcat -b -m 22000
(见图 3.14):
hashcat 的核心功能
hashcat 提供了不同的攻击模式,每种模式都针对特定类型的密码破解设计。主要有三种模式:
- 直截模式(Straight mode) ,使用词典或词汇表与哈希密码进行比较;
- 组合模式(Combination mode) ,结合两个词典以创建新的密码可能性;
- 暴力破解或掩码攻击模式(Brute-force or mask attack mode) ,在给定的密钥空间内生成所有可能的密码组合。
要选择模式,请使用 -a
标志后跟模式编号(0 代表直截模式,1 代表组合模式,或 3 代表暴力破解模式)。此外,还有选项可以将掩码和词汇表结合使用(反之亦然),以及关联模式,这类似于 John 中的单次破解模式(使用用户的一些已知数据,如用户名)。
hashcat 还支持规则。hashcat 中的规则允许你对词典中的单词执行各种操作,以生成新的密码候选项。这些操作可以包括字符替换、删除或插入、大写等。规则是扩展词典有效性并增加破解密码机会的强大方式。你可以创建自定义规则文件,或使用 hashcat 社区提供的预定义规则。要使用规则,请添加 -r
标志,后跟规则文件的路径。我们将在第 4 章更详细地讨论规则。
正如前面提到的,hashcat 支持掩码攻击,这是一种暴力破解攻击。hashcat 中的掩码是定义暴力破解模式下生成的密码候选项结构的模式。掩码由占位符组成,这些占位符将被预定义或自定义字符集中的字符替换。当你对密码结构有一些了解时,掩码有助于限制搜索空间,从而减少破解密码所需的时间。
通过这些步骤,我们已经准备好使用 John 和 hashcat 进行操作!
总结
在本章中,我们安装了 John 和 hashcat。虽然这不是本书中将要使用的唯一软件组件,但它们是我们成功的基础,其他安装将在其他章节中根据需要进行处理。
在下一章中,我们将审查规则构建,以增加成功破解密码的概率。
在第 2 部分中,我们将逐章开始处理常见哈希类型的破解,所以可以直接跳到与你当前破解工作直接相关的章节以了解更多信息。