简介
在这个实验中,你将学习如何使用世界上最快的密码恢复工具 Hashcat 来破解加密哈希值。你将练习安装 Hashcat、准备哈希文件、配置 GPU 加速,并对示例 MD5 哈希值执行暴力破解攻击。
这些实践练习将指导你在优化性能的同时破解现实世界中的密码示例。你将获得密码恢复和安全测试等基本网络安全技术的实践经验。
在这个实验中,你将学习如何使用世界上最快的密码恢复工具 Hashcat 来破解加密哈希值。你将练习安装 Hashcat、准备哈希文件、配置 GPU 加速,并对示例 MD5 哈希值执行暴力破解攻击。
这些实践练习将指导你在优化性能的同时破解现实世界中的密码示例。你将获得密码恢复和安全测试等基本网络安全技术的实践经验。
在这一步中,你将安装世界上最快的密码恢复工具 Hashcat。Hashcat 是一个强大的实用工具,用于通过各种攻击方法(如暴力破解、字典攻击和基于规则的攻击)来破解哈希值。
在开始之前,让我们先了解一下什么是哈希值。哈希值是由一个数学函数生成的固定长度字符串,该函数接受一个输入(如密码)并产生一个乱序的输出。为了安全起见,密码系统存储的是这些哈希值,而不是明文密码。Hashcat 通过尝试不同的组合来匹配存储的哈希值,从而帮助恢复原始密码。
首先,我们需要确保处于正确的工作目录。~/project
目录是我们进行所有实验操作的地方:
cd ~/project
现在,我们将使用 Ubuntu 的软件包管理器来安装 Hashcat。软件包管理器负责下载软件及其依赖项并进行设置。我们一起运行两条命令:首先更新软件包列表(update
),然后安装 Hashcat(install
):
sudo apt-get update && sudo apt-get install -y hashcat
-y
标志会自动确认安装,这样我们就不用在安装过程中输入 'yes' 了。
安装完成后,让我们通过检查其版本来验证 Hashcat 是否正确安装。这是确认软件可以使用的一个好习惯:
hashcat --version
你应该会看到显示已安装版本号的输出,例如:
v6.2.6
看到这个版本号意味着 Hashcat 已正确安装在你的系统上。在接下来的步骤中,我们将使用它来处理实际的哈希文件并执行破解操作。版本号在查找文档或进行故障排除时也很有用,因为不同版本的功能可能会有所不同。
在这一步中,你将创建一个示例哈希文件,后续步骤将使用该文件进行破解。哈希值是由加密算法生成的固定长度字符串,用于表示输入数据。哈希文件包含这些加密哈希值,我们将使用 Hashcat 尝试对其进行破解。
首先,确保你处于正确的工作目录。cd
命令用于更改当前目录:
cd ~/project
让我们创建一个包含 MD5 哈希值的简单文本文件。MD5 是一种广泛使用的加密哈希函数,可生成 128 位的哈希值。我们将使用 nano 文本编辑器来创建和编辑一个新文件:
nano hashes.txt
将以下示例 MD5 哈希值添加到文件中。这些是常见的测试哈希值,对应的明文密码是已知的(按 Ctrl+O 保存,按 Ctrl+X 退出 nano):
5f4dcc3b5aa765d61d8327deb882cf99 ## password: "password"
098f6bcd4621d373cade4e832627b4f6 ## password: "test"
或者,你可以直接使用 echo 命令创建文件。>
运算符用于创建新文件,而 >>
用于追加到现有文件:
echo "5f4dcc3b5aa765d61d8327deb882cf99" > hashes.txt
echo "098f6bcd4621d373cade4e832627b4f6" >> hashes.txt
使用 cat
命令验证哈希文件的内容,该命令会在终端中显示文件内容:
cat hashes.txt
你应该会在终端中看到这两个 MD5 哈希值。在接下来的步骤中,当我们配置 Hashcat 并执行暴力破解攻击时,这个文件将作为我们的哈希破解目标。使用已知的测试哈希值有助于验证我们的破解设置是否正常工作。
在这一步中,你将配置 Hashcat 以利用 GPU 加速,从而更快地进行哈希破解。Hashcat 可以同时利用 CPU 和 GPU 资源,但 GPU 在密码破解方面尤其有效,因为它们包含数千个小型核心,能够同时执行大量计算。这种并行处理能力使得 GPU 在暴力破解攻击中比 CPU 快得多。
在配置 GPU 支持之前,让我们先检查一下 Hashcat 可用的硬件设备有哪些。运行以下命令列出所有检测到的 OpenCL 设备:
hashcat -I
该命令将显示可用的 OpenCL 设备。在 LabEx 虚拟机环境中,你应该会看到类似如下的输出:
OpenCL Platform #1: NVIDIA Corporation
* Device #1: NVIDIA GeForce GTX 1080 Ti, 10240/11264 MB allocatable, 28MCU
输出显示了你的 GPU 详细信息,包括其型号和内存容量。现在,我们将创建一个配置文件来优化 Hashcat 的性能。配置文件有助于自动设置参数,这样你就无需每次都手动输入。
使用以下命令创建并编辑配置文件:
nano ~/.hashcat/hashcat.conf
添加以下配置(按 Ctrl+O 保存,按 Ctrl+X 退出):
--force
--opencl-device-types=1,2
--workload-profile=4
让我们来了解一下每个参数的作用:
--force
告诉 Hashcat 即使检测到潜在问题也继续运行(在实验环境中很有用)--opencl-device-types=1,2
启用 CPU(类型 1)和 GPU(类型 2)设备进行处理--workload-profile=4
设置最高性能配置文件,优先考虑速度而非节能为了确认一切正常运行,运行一个基准测试:
hashcat -b
基准测试将测试各种哈希算法,并显示性能指标,例如:
Speed.#1.........: 12345.7 MH/s (98.23ms) @ Accel:1024 Loops:1024 Thr:256 Vec:1
这些数字显示了你的系统每秒可以尝试破解的哈希数量。数值越高,破解速度越快。基准测试确认了 GPU 加速已激活,并且可以在下一步进行实际的暴力破解攻击时使用。
在这一步中,你将使用 Hashcat 执行暴力破解攻击,以破解我们之前准备的 MD5 哈希值。暴力破解攻击是一种试错方法,它会系统地检查所有可能的字符组合,直到找到正确的密码。当你对密码结构一无所知时,这种方法特别有用。
首先,让我们切换到存储哈希文件的工作目录。这样可以确保 Hashcat 能够访问我们要破解的文件:
cd ~/project
现在,我们将使用带有特定参数的 Hashcat 来进行攻击:
-m 0
告诉 Hashcat 我们处理的是 MD5 哈希值(在 Hashcat 中,每种哈希类型都有一个特定的编号)-a 3
将攻击模式设置为暴力破解?a?a?a?a
定义了我们的密码掩码 —— 这意味着我们要寻找的是恰好 4 个字符的密码,这些字符可能包括:
使用以下命令执行暴力破解攻击:
hashcat -m 0 -a 3 hashes.txt ?a?a?a?a --force
当 Hashcat 运行时,它会在终端中显示实时统计信息。这些输出有助于你监控破解进度:
Session..........: hashcat
Status...........: Running
Hash.Name........: MD5
Hash.Target......: hashes.txt
Time.Started.....: [timestamp]
Speed.#1.........: [speed] H/s
Recovered........: 0/2 (0.00%)
Progress.........: [progress]
Rejected.........: 0
Restore.Point....: 0
破解速度(H/s)显示了你的系统每秒执行的哈希计算次数。进度指示器有助于估算剩余时间。对于 4 个字符的密码,根据你的硬件情况,这可能需要几分钟时间。
攻击完成后,我们可以检查结果。以下命令将显示所有成功破解的密码:
hashcat -m 0 hashes.txt --show
成功的输出会将每个哈希值与其对应的明文密码配对显示:
5f4dcc3b5aa765d61d8327deb882cf99:password
098f6bcd4621d373cade4e832627b4f6:test
这个输出确认了 Hashcat 成功地将测试文件中的两个 MD5 哈希值还原为它们原来的密码。第一列显示的是我们最初的哈希值,而第二列则显示了生成该哈希值的实际密码。
在这最后一步中,你将验证并分析暴力破解攻击的结果。Hashcat 会自动将成功破解的密码存储在一个名为“potfile”的特殊文件中。这个文件就像是你在破解过程中所恢复的所有密码的数据库。我们将查看这个文件,以确认哪些密码被成功破解。
首先,让我们切换到存储哈希文件的工作目录。这样可以确保我们处理的是正确的文件:
cd ~/project
要查看攻击中所有已破解的哈希值,我们在 Hashcat 中使用 --show
标志。此命令专门在我们的 hashes.txt 文件中查找 MD5 哈希值(模式 0),并显示在 potfile 中找到的任何匹配项:
hashcat -m 0 hashes.txt --show
你应该会看到类似以下的输出,显示原始哈希值及其对应的明文密码:
5f4dcc3b5aa765d61d8327deb882cf99:password
098f6bcd4621d373cade4e832627b4f6:test
为了更全面地了解你的破解过程,--status
标志可以提供有价值的统计信息。它会显示已破解的哈希数量、哈希类型和性能指标:
hashcat -m 0 hashes.txt --status
这将显示重要信息,包括:
Session.Name.....: hashcat
Status..........: Exhausted
Hash.Name.......: MD5
Hash.Target.....: hashes.txt
Time.Started....: [timestamp]
Time.Estimated..: [timestamp]
Recovered.......: 2/2 (100.00%)
Progress.......: [progress]
Speed.#1.......: [speed] H/s
要生成一份完整的破解过程报告,以便你稍后保存和查看,请使用以下命令。第一条命令创建一个格式化的报告文件,第二条命令显示其内容:
hashcat -m 0 hashes.txt --outfile-format=2 --outfile=results.txt
cat results.txt
该报告将包含每个已破解哈希的详细信息,包括哈希类型、明文密码以及破解每个哈希的确切时间。当你需要分析破解性能或将结果分享给他人时,这份文档特别有用。
在本次实验中,你学习了如何通过更新包管理器并验证版本来安装和配置强大的密码恢复工具 Hashcat。你还准备了一个包含示例 MD5 哈希值的哈希文件,并使用基本的 Linux 命令确认了其内容。
此外,你探索了 Hashcat 的 GPU 支持以优化性能,并进行了暴力破解攻击来破解示例哈希值。这个实践练习展示了 Hashcat 在密码恢复和漏洞评估等网络安全场景中的重要作用。