概述

密码破解,或称为离线暴力破解攻击,是一种有效获取未授权资源的方式。各种应用程序和系统使用加密算法来哈希或加密数据。这样做可以防止在静态数据中存储明文信息,并防止在中间人(MITM)攻击场景中传输数据的披露。密码破解攻击通过针对各种算法进行暴力破解攻击来尝试恢复原始数据,并泄露明文密码。

弱密码和重复使用的密码是决定此次攻击成功与否的两个主要因素。此外,攻击者可以创建精细调整的单词列表,并根据目标应用程序或环境使用规则来变异密码。

识别哈希

大多数哈希算法生成的哈希值长度是固定的。特定哈希值的长度可以用来将其映射到用于生成它的算法。例如,一个长度为 32 个字符的哈希值可能是 MD5 或 NTLM 哈希。

有时,哈希值会以特定的格式存储。例如, hash:salt$id$salt$hash

哈希值 2fc5a684737ce1bf7b3b239df432416e0dd07357:2014 是一个带有 2014 作为盐值的 SHA1 哈希。

哈希 分隔的字段,其中第一个字段是 id ,即 6 。这用于识别用于哈希的算法类型。以下列表包含一些 ID 及其对应的算法。

1
2
3
4
5
$1$  : MD5
$2a$ : Blowfish
$2y$ : Blowfish, with correct handling of 8 bit characters
$5$ : SHA256
$6$ : SHA512

下一个字段 vb1tLY1qiY 是哈希过程中使用的盐,最后一个字段是实际的哈希值。

Hashid

Hashid 是一个 Python 工具,可用于检测各种类型的哈希值。在撰写本文时, hashid 可用于识别超过 200 种独特的哈希类型,对于其他类型,它会尽力猜测,但这仍然需要一些额外的工作来缩小范围。支持的所有哈希值的完整列表可以在这里找到。

哈希值可以作为命令行参数提供,或使用文件提供。

1
2
3
4
5
hashid '$apr1$71850310$gh9m4xcAn3MGxogwX/ztb.'

Analyzing '$apr1$71850310$gh9m4xcAn3MGxogwX/ztb.'
[+] MD5(APR)
[+] Apache MD5

Hashcat

Hashcat 是一款流行的开源密码破解工具。

攻击模式

-a-m 参数用于指定攻击模式和哈希类型。 Hashcat 支持以下攻击模式:

# Mode 模式
0 Straight 直接
1 Combination 组合
3 Brute-force 暴力破解
6 Hybrid Wordlist + Mask 混合字典 + 掩码
7 Hybrid Mask + Wordlist 混合掩码 + 字典

字典攻击

Hashcat 有 5 种不同的攻击模式,根据你要破解的哈希类型和密码的复杂程度,它们有不同的应用。最直接但极其有效的攻击类型是字典攻击。不常见的是,遇到密码策略薄弱的组织,其用户选择常见单词和短语作为密码,几乎没有复杂性。根据对数百万个泄露密码的分析,组织 SplashData 列出了 2020 年最常用的 5 个密码如下:

1
2
3
4
5
123456
123456789
qwerty
password
1234567

这些密码会出现在大多数用于执行此类攻击的字典文件中。获取密码列表的来源有很多,例如 SecLists,这是一个包含大量密码列表的集合,以及 rockyou.txt 词表,它通常出现在大多数渗透测试 Linux 发行版中。

使用方法:

1
hashcat -a 0 -m <hash type> <hash file> <wordlist>

组合攻击

组合攻击模式接受两个单词列表作为输入,并从它们创建组合。这种攻击很有用,因为用户经常将两个或多个单词组合在一起,认为这样可以创建一个更强的密码,例如 welcomehomehotelcalifornia

使用方法:

1
hashcat -a 1 -m <hash type> <hash file> <wordlist1> <wordlist2>

掩码攻击

掩码攻击用于生成符合特定模式的单词。当已知密码长度或格式时,这种攻击特别有用。可以使用静态字符、字符范围(例如 a-z 或 A-Z0-9)或占位符来创建掩码。以下列表显示了一些重要的占位符:

Placeholder 占位符 Meaning 含义
?l 小写 ASCII 字母(a-z)
?u 大写 ASCII 字母 (A-Z)
?d 数字 (0-9)
?h 0123456789abcdef
?H 0123456789ABCDEF
?s 特殊字符 («空格»!”#$%&’()*+,-./:;<=>?@[]^_`{
?a ?l?u?d?s
?b 0x00 - 0xff
1
hashcat -a 3 -m 0 md5_mask_example_hash -1 01 'ILFREIGHT?l?l?l?l?l20?1?d'

混合模式

混合模式是组合攻击的一种变体,其中可以同时使用多种模式来创建精细调整的单词列表。这种模式可用于通过创建高度定制的单词列表来执行非常精确的攻击。当您知道或对组织的密码策略或常见密码语法有一般了解时,这种模式特别有用。混合攻击的攻击模式是 “ 6 “。

优化

Hashcat 有两种主要的方式来优化速度:

Option 选项 Description 描述
优化内核 这是 -O 标志,根据文档,它意味着 Enable optimized kernels (limits password length) 。密码长度数字通常是 32,大多数单词列表甚至达不到这个数字。这可以将估计时间从几天缩短到几小时,因此建议总是先用 -O 运行,然后在 GPU 空闲时重新运行而不带 -O
工作负载 这是 -w 标志,根据文档说明,它表示 Enable a specific workload profile 。默认数字是 2 ,但如果你想在 Hashcat 运行时使用你的电脑,将其设置为 1 。如果你打算让电脑只运行 Hashcat,可以将其设置为 3

需要注意的是应避免使用 --force 。虽然这看起来能让 Hashcat 在某些主机上运行,但实际上是禁用了安全检查、屏蔽了警告,并绕过了开发者认为的障碍问题。这些问题可能导致误报、漏报、功能故障等。如果工具在没有附加 --force 到你的命令的情况下无法正常运行,我们应该排查根本原因(例如驱动问题)。使用 --force 是被工具开发者不推荐的,只有经验丰富的用户或开发者才应该使用。

基于规则进行破解

基于规则的攻击是最先进和复杂的密码破解模式。规则可以对输入的单词列表执行各种操作,例如添加前缀、添加后缀、切换大小写、截断、反转等。基于规则的攻击将掩码式攻击提升到了新的层次,并提供了更高的破解率。此外,使用规则可以节省由于更大的单词列表而导致的磁盘空间和处理时间。

Function 函数 Description 描述 Input 输入 Output 输出结果
l 将所有字母转换为小写 InlaneFreight2020 inlanefreight2020
u 将所有字母转换为大写 InlaneFreight2020 INLANEFREIGHT2020
c / C 首字母大写,其余小写 / 首字母小写,其余大写 inlaneFreight2020 / Inlanefreight2020 Inlanefreight2020 / iNLANEFREIGHT2020
t / TN 切换大小写:整个单词 / 在位置 N InlaneFreight2020 iNLANEfREIGHT2020
d / q / zN / ZN 重复单词 / 所有字符 / 第一个字符 / 最后一个字符 InlaneFreight2020 InlaneFreight2020InlaneFreight2020 / IInnllaanneeFFrreeiigghhtt22002200 / IInlaneFreight2020 / InlaneFreight20200
{ / } 向左/向右旋转单词 InlaneFreight2020 nlaneFreight2020I / 0InlaneFreight202
^X / $X 在前面/后面添加字符 X InlaneFreight2020 (^! / $! ) !InlaneFreight2020 / InlaneFreight2020!
!InlaneFreight2020 / InlaneFreight2020!
r 反转 InlaneFreight2020 0202thgierFenalnI

Hashcat 提供了一个选项,可以在运行时生成随机规则,并将它们应用于输入的单词列表。以下命令将生成 1000 个随机规则,并通过指定 “ -g “ 标志将它们应用于 rockyou.txt 中的每个单词。由于生成的规则不是恒定的,因此无法保证这种攻击的成功率.

破解杂项文件哈希

在进行渗透测试和其他评估时,经常会遇到密码保护的文档,例如 Microsoft Word 和 Excel 文档、OneNote 笔记本、KeePass 数据库文件、SSH 私钥密码短语、PDF 文件、zip(以及其他归档格式)文件等。这些哈希中的大多数都可以通过 Hashcat 进行尝试破解。

工具

存在多种工具可以帮助我们从这些文件中提取密码哈希,并以 Hashcat 能理解的方式格式化。密码破解工具 JohnTheRipper 随许多这些工具一起提供,这些工具是用 C 编写的,在安装 JohnTheRipper 或从其源代码编译时可用。它们可以在这里查看。要使用这些工具,我们需要编译它们。

提取哈希

以docx为例:

1
office2john.py hashcat_Word_example.docx

破解无线网络

破解 MIC

当客户端连接到无线网络并与无线接入点(AP)通信时,它们必须确保双方都拥有/知道无线网络密钥,但不在网络上传输密钥。密钥由 AP 加密和验证。

要执行这种离线破解攻击,我们需要通过发送解认证帧来强制客户端(用户)与接入点(AP)断开连接,从而捕获有效的四向握手。当客户端重新认证(通常是自动的)时,攻击者可以在客户端不知情的情况下尝试嗅探 WPA 四向握手。这个握手是在客户端与关联 AP 的认证过程中交换的一组密钥。注意:无线攻击不在本模块的范围内,但将在其他模块中涵盖。

这些密钥用于生成一个称为消息完整性检查(MIC)的通用密钥,AP 使用该密钥来验证每个数据包是否未被篡改且以原始状态接收。

image.png

成功捕获到使用 airodump-ng 等工具的 4-way handshake 后,我们需要将其转换为 Hashcat 可用于破解的格式。所需的格式是 hccapxHashcat 提供了一个在线服务来转换为这种格式(不推荐用于实际客户端数据,但适用于实验室/练习练习):cap2hashcat online。要在离线状态下执行转换,我们需要 GitHub 上的 hashcat-utils 仓库。

使用

1
./cap2hccapx 

接下来,我们需要向工具提供一个数据包捕获文件(.cap),将其转换为.hccapx 格式,以提供给 Hashcat 使用。

1
./cap2hccapx.bin corp_capture1-01.cap mic_to_crack.hccapx

使用此文件,我们可以继续使用本模块中讨论的一种或多种技术进行破解。为了尝试破解此哈希,我们将使用模式 22000 ,因为之前的模式 2500 已被弃用。我们的命令将像 hashcat -a 0 -m 22000 mic_to_crack.hccapx /opt/useful/seclists/Passwords/Leaked-Databases/rockyou.txt 这样。

1
hashcat -a 0 -m 22000 mic_to_crack.hccapx /opt/useful/seclists/Passwords/Leaked-Databases/rockyou.txt

破解 PMKID

这种攻击可以针对使用 WPA/WPA2-PSK(预共享密钥)的无线网络进行,通过直接攻击接入点(AP)来获取目标无线网络正在使用的 PSK。这种攻击不需要对目标 AP 的任何用户进行去认证(deauth)。PMK 与 MIC(四向握手)攻击中的 PMK 相同,但通常可以更快地获取,并且不会中断任何用户。

配对主密钥标识符(PMKID)是接入点(AP)用于跟踪客户端使用的配对主密钥(PMK)的唯一标识符。PMKID 位于四次握手的第一包中,并且更容易获取,因为它不需要捕获整个四次握手。PMKID 使用 HMAC-SHA1 算法计算,密钥为 PMK(无线网络密码)、字符串”PMK Name”、接入点的 MAC 地址和站的 MAC 地址。以下是 PMKID 计算的视觉表示:

image.png

要执行 PMKID 破解,我们需要获取 pmkid 哈希值。第一步是使用工具(如 hcxpcapngtool )从捕获文件(.cap)中提取它,该工具来自 hcxtools

尽管该工具可用于各种任务,但我们可以使用 hcxpcapngtool 来提取哈希,如下所示:

1
hcxpcapngtool cracking_pmkid.cap -o pmkidhash_corp
1
hashcat -a 0 -m 22000 pmkidhash_corp /opt/useful/seclists/Passwords/Leaked-Databases/rockyou.txt.tar.gz