如果你从事渗透测试,破解密码是一项需要掌握的重要技能。因此,我们将一起来看如何在 Linux 上使用 Hashcat 破解哈希。
关于哈希的回顾
为什么使用 Hashcat
如何在 Linux 上安装 Hashcat
如何通过字典攻击破解密码
从 /etc/shadow 文件破解哈希
Hashcat 是一款强大而多用途的工具,它通过发起多种攻击模式,对以已知哈希形式存储的凭据进行暴力破解。本文将带你上手这款密码破解工具,它被渗透测试者、系统管理员、间谍或黑客用来找出密码。
关于哈希的回顾
哈希是一种单向的数学函数,或者说一个唯一标识符,无论输入的大小/长度如何,它都会返回固定长度的输出。因此,它是一个不可逆的过程,不像加密那样需要密钥来解出哈希值。
哈希最常见的目的是在数据传输过程中确保数据完整性,防止被篡改。哈希的特性如下:
- 计算迅速
- 好的算法能避免不同输入产生相同的输出
- 输入的微小变化会显著影响输出的哈希值
为什么使用 Hashcat ?
Hashcat 是一款多线程工具,可让你配置线程数,并根据优先级限制其执行。它支持 300 多种哈希算法,例如 MD4、MD5、SHA1、SHA512、bcrypt、HMAC-SHA512、NTLM、MySQL、WHIRLPOOL 等。它适用于所有类型的操作系统,包括 Windows、Linux、Unix 和 BSD。
Hashcat 提供多种攻击模式来破解哈希
下面解释 Hashcat 用来破解哈希密码的部分攻击:
- 暴力攻击:暴力攻击使用所有可能的字符组合来确定确切的密码。不过,它对密码的最大长度和字符数量有限制。此外,高级的暴力攻击还可以通过对复杂度做出假设来优化时间。例如,一种高级暴力技术可能假设第一个字符更可能是大写,数字更可能出现在密码末尾,等等。
- 字典攻击:字典攻击使用一份预先计算好的密码列表,其依据是围绕目标收集到的信息,或在用户群中观察到的某种模式。因此,它会选取一些最常用的密码,并对其做一些排列组合以扩大覆盖面。
- 混合攻击:混合攻击是上述攻击的结合,因为它会先检查密码是否能通过字典攻击“破解”,如果不行,再转到暴力破解技术。
如何在 Linux 上安装 hashcat
Hashcat 在 Kali Linux 中默认可用。要在 Ubuntu 和 Debian 上安装它:
sudo apt update
sudo apt install hashcat
安装完成后,使用 help 命令显示可用选项:
hashcat --help
如何通过字典攻击破解密码
1. 创建一个包含 MD5 哈希的字典
为开始本次演示,我们将创建若干个哈希条目,其中包含多个密码。
具体来说,它们随后会被输出到一个名为“hashes_list.txt”的文件中。每条命令都要在终端中执行,如下所示:
echo -n "password" | md5sum | tr -d " -">> hashes_list.txt
echo -n "HELLO" | md5sum | tr -d " -">> hashes_list.txt
echo -n "MYSECRET" | md5sum | tr -d " -">> hashes_list.txt
echo -n "Test1234" | md5sum | tr -d " -">> hashes_list.txt
echo -n "P455w0rd" | md5sum | tr -d " -">> hashes_list.txt
echo -n "GuessMe" | md5sum | tr -d " -">> hashes_list.txt
echo -n "S3CuReP455Word" | md5sum | tr -d " -">> hashes_list.txt
-n 选项会去掉附加在“Password”末尾的换行符。这一点很重要,因为我们不希望换行符和我们的密码一起被哈希。“tr –d ' -'”部分会从输出中删除所有为空格或连字符的字符。
2. 检查密码哈希
为此,我们需要在终端中输入以下命令行:
cat hashes_list.txt
下面是输出结果:
root@kali:# cat hashes_list.txt
dc647eb65e6711e155375218212b3964
eb61eead90e3b899c6bcbe27ac581660
958152288f2d2303ae045cffc43a02cd
2c9341ca4cf3d87b9e4eb905d6a3ec45
75b71aa6842e450f12aca00fdf54c51d
031cbcccd3ba6bd4d1556330995b8d08
b5af0b804ff7238bce48adef1e0c213f
3. 在 Kali Linux 中启动 Hashcat
可以在 Kali 控制台上用以下命令行启动 Hashcat:
hashcat -h


Hashcat 一些最重要的选项是 -m (哈希类型)和 -a (攻击模式)。一般而言,在使用 Hashcat 进行大多数密码破解尝试时,我们都需要使用这两个选项。
Hashcat 还有专门设计的规则,可用于词表文件。可以自定义字符列表来破解一个或多个密码。
Hashcat 为可破解的密码哈希提供了许多选项。这在命令之后可以再往下看一些。
4. 选择词表字典
Kali Linux 内置了许多词表。要找到它们,使用以下命令行:(旧版为 locate wordlists)
wordlists

我们将使用位于以下位置的“rockyou”词表:/usr/share/wordlists/rockyou.txt.gz。
.gz 扩展名表示该列表已被压缩。我们输入 gzip 命令来解压它,如下所示:
sudo gzip -d /usr/share/wordlists/rockyou.txt.gz
5. 破解哈希
在最后一步,我们现在可以开始破解 hashes_list.txt 文件中包含的哈希。我们将使用以下命令行,如下所示:
hashcat -m 0 -a 0 -o cracked.txt hashes_list.txt /usr/share/wordlists/rockyou.txt
哈希算法用 -m 选项选择,0 指的是 md5
结果将保存到用 -o 选项指定的 cracked.txt 文件中
-a 选项用于设定所使用的攻击类型。
在 Linux 上从 /etc/shadow 文件破解哈希
/etc/shadow 文件存储了 Linux 上所有用户密码的哈希值。它是一个关键文件,具有严格的访问权限;它只能被、也只应被 root 账户访问。
因此,如果你遇到一个可通过任意普通用户账户读取的 /etc/shadow 文件,你就可以获取 root 账户的哈希值,并使用 Hashcat 工具破解该密码哈希。
为演示起见,我们将切换到 root 账户,并创建一个新的用户账户 alice,以理解 Hashcat 的工作原理:
sudo su
useradd -c "Bob" bob
让我们用 passwd 命令创建一个密码:
passwd alice
让我们用 cut 命令检查 /etc/shadow 文件中的哈希密码值,该命令可以直接提取所需的字段:
tail /etc/shadow

上面输出中的哈希从“ bob: ”开始。
$y$ 值表明这是 yescrypt,一种较新的哈希方案,是 Debian 11、Fedora 35+ 和 Kali Linux 2021.1+ 中默认采用的。它受 Fedora 29+ 和 Ubuntu 20.04+ 支持,也被推荐用于新的密码。
yescrypt 目前在 Hashcat 中尚不可用,因此你需要尝试另一种哈希算法或另一台 Linux 机器来完成你的测试。
历史上,SHA-512 的使用
下面你会看到一个 SHA-512 哈希的示例,它被广泛使用,而且在 yescrypt 之前曾是 Kali-Linux 上的默认方法。

$6$ 值表示这是 6 型密码哈希(SHA-512,多轮)。$6$ 之后、直到下一个 $ 之前的字符是 SALT。
在该示例中,SALT 是 CqiOcwyE
你可以前往 hashcat 网站来识别哈希函数的类型及其对应的参考值。SHA512 哈希模式通常以 $6$ 标识,其参考值为 1800。
