Hashcat实战:五种方法破解NTLM哈希与掩码规则速查
2026/7/28 13:52:24 网站建设 项目流程

1. 项目概述:当NTLM哈希遇上Hashcat

在渗透测试和红队评估的日常工作中,我们经常会遇到从目标系统中提取出的用户凭证哈希。其中,NTLM(NT LAN Manager)哈希是Windows环境中最常见、也最核心的一种凭证存储形式。它不像明文密码那样脆弱,但也不像加了“盐”的现代哈希算法那样坚不可摧。很多时候,拿到一个NTLM哈希,就像拿到了一把锁的复杂锁芯结构图,而Hashcat,就是那个拥有海量钥匙胚子和强大开锁技巧的锁匠。这个项目,就是一次深入锁匠工坊的实战记录,目标很明确:使用Kali Linux下的Hashcat工具,系统性地演练破解NTLM哈希的五种主流方法,并整理出一份能直接拿来用的常用掩码规则速查表。

无论你是刚开始接触安全测试的新手,还是想梳理一下自己工具箱的老手,这篇文章都将带你走完从“拿到哈希”到“还原密码”的完整路径。我们会绕过那些空洞的理论,直接进入Kali的命令行,用真实的哈希样本,一步步演示每种攻击模式的命令、参数含义、适用场景以及背后的策略考量。更重要的是,我会分享在实际破解过程中,那些文档里不会写的参数调优技巧、资源分配心得以及如何根据目标特征选择最高效的攻击路径。毕竟,在实战中,时间就是一切,盲目暴力破解可能让你等到天荒地老,而一个精巧的掩码规则或许能在几分钟内给你惊喜。

2. 核心思路与攻击模式解析

面对一个NTLM哈希,直接上手就brute-force(暴力破解)是最不明智的选择,除非密码长度极短。一个有经验的测试者,首先会像侦探一样分析“现场”。这个哈希来自哪里?是域管理员账户还是普通员工账户?目标组织的密码策略严格吗?有没有可能从其他渠道获得相关的个人信息(如姓名、生日、公司名)?这些问题的答案,将直接决定我们优先采用哪种攻击模式。

Hashcat支持多种攻击模式,针对NTLM哈希,我们主要聚焦于以下五种最具实战价值的方法。它们并非互斥,而是一个层层递进、效率优先的战术组合。

2.1 字典攻击:效率优先的首选

字典攻击是起点,也是成功率最高的方法之一。它的原理非常简单:用一个预先准备好的密码字典文件,逐一尝试其中的每个密码,计算其NTLM哈希并与目标哈希比对。成功与否,完全取决于你的字典是否包含了目标密码。

为什么首选字典攻击?因为人类设置密码的行为有极强的模式可循。Password123!CompanyName2023Welcome1这类密码在企业环境中依然广泛存在。一个精心维护的字典,能覆盖大量常见、弱口令和符合特定文化的密码模式,往往能以最小的计算资源消耗,快速拿下大量“低垂的果实”。

字典的选择与制作:

  • 通用字典:rockyou.txt(Kali自带)、SecLists项目中的密码字典。这是你的基础弹药库。
  • 定制化字典:这才是高级玩法。利用cewl等工具爬取目标网站关键词,结合已知的员工姓名(John Doe)、公司名(AcmeCorp)、日期(2023)、常用规则(首字母大写、尾部加数字和符号)生成专属字典。一个针对“Acme公司”生成的字典,其命中率远高于通用字典。

实战命令示例:

hashcat -m 1000 -a 0 target_ntlm_hash.txt /usr/share/wordlists/rockyou.txt
  • -m 1000: 指定哈希类型为NTLM。
  • -a 0: 指定攻击模式为字典攻击。
  • target_ntlm_hash.txt: 包含目标哈希的文件。
  • 最后是字典文件路径。

注意:字典攻击的速度极快,但高度依赖字典质量。如果第一轮通用字典攻击失败,不要气馁,这仅仅意味着需要进入更定制化的攻击阶段。

2.2 组合攻击:放大字典的威力

如果字典攻击不成功,下一个逻辑步骤不是盲目加大字典,而是尝试组合攻击。这种模式会读取两个字典文件,将其中一个字典中的每个词与另一个字典中的每个词进行组合,尝试所有可能的拼接结果。

适用场景:用户常常在基础单词后添加固定后缀,或在前缀后添加基础单词。例如,基础单词可能是Summer,常用后缀可能是123!2024。与其准备一个包含Summer123Summer!Summer2024的巨大字典,不如用组合攻击动态生成它们。

实战命令示例:

hashcat -m 1000 -a 1 target_ntlm_hash.txt dict_base.txt dict_suffix.txt
  • -a 1: 指定攻击模式为组合攻击。
  • dict_base.txt: 基础单词字典(如常见名、季节、公司名)。
  • dict_suffix.txt: 后缀字典(如数字串、常见符号)。

我的心得:组合攻击能极大地扩展攻击面,而字典体积增长可控。我通常会准备一个base_words.txt(核心词汇)和一个rules_common.txt(常见变换规则),但有时直接使用组合攻击来拼接核心词与数字/符号后缀,在针对性场景下比应用复杂的规则更直接有效。

2.3 掩码攻击:针对策略的精准打击

这是本次实战的重点和精华所在。当目标密码符合一定的策略(如“至少一个大写字母、一个小写字母、一个数字、一个符号,长度8位以上”),但具体字符未知时,暴力破解整个空间(如95^8)是天文数字。掩码攻击允许我们定义密码的“结构”,从而将搜索空间缩小到可接受的范围内。

掩码使用占位符来定义每个字符的位置和类型:

  • ?l= 小写字母 (a-z)
  • ?u= 大写字母 (A-Z)
  • ?d= 数字 (0-9)
  • ?s= 特殊符号 (!@#$%^&*()...)
  • ?a= 所有可打印字符(包括上述所有)
  • ?h= 十六进制小写字符 (0-9, a-f)
  • ?H= 十六进制大写字符 (0-9, A-F)

为什么掩码攻击如此强大?因为它将无限的可能性,约束到了有限的、符合人类设置习惯的模式中。例如,如果我知道目标公司要求密码是“首字母大写,后跟6个小写字母,最后以2位数字结尾”,那么掩码就是:?u?l?l?l?l?l?l?d?d。这个空间只有26 * 26^6 * 10^2 ≈ 8.03 * 10^11种可能,在GPU加速下可能变得可破解。而完全随机的8位密码空间是95^8 ≈ 6.63 * 10^15,相差四个数量级。

实战命令示例:

hashcat -m 1000 -a 3 target_ntlm_hash.txt ?u?l?l?l?l?l?l?d?d
  • -a 3: 指定攻击模式为掩码攻击。
  • 最后的掩码字符串定义了密码模式。

2.4 混合攻击:字典与掩码的强强联合

混合攻击结合了字典攻击和掩码攻击的优点,是实战中破解复杂密码的利器。它分为两种子模式:

  • -a 6: 字典 + 掩码。先取字典中的每个词,然后在后面附加符合掩码规则的字符。
  • -a 7: 掩码 + 字典。先在前面添加符合掩码规则的字符,然后拼接字典中的词。

适用场景:用户常用一个基础单词(如Winter),然后为了满足密码策略,在后面加上固定的模式(如2024!)。对于-a 6,字典是Winter,掩码是?d?d?d?d?s,就能尝试Winter2024!。反之,如果用户喜欢在前面加日期(如2024!Winter),则使用-a 7,掩码?d?d?d?d?s,字典Winter

实战命令示例(字典+掩码):

hashcat -m 1000 -a 6 target_ntlm_hash.txt dict_base.txt ?d?d?d?d?s

这个命令会尝试base_word0000!base_word0001!……等所有组合。

我的心得:混合攻击极大地提升了针对“基础词+固定模式”这类密码的破解效率。在收集目标信息时,我会特别留意其密码策略公告(如“必须包含数字和特殊字符”),然后据此设计掩码部分。例如,如果策略是“必须以符号结尾”,那么掩码?s配合一个较大的基础字典,往往能快速取得突破。

2.5 规则攻击:智能化的字典变形

规则攻击是字典攻击的“智能升级版”。它不直接使用字典中的原始单词,而是通过一套预定义的“规则”,对字典中的每个单词进行各种变换,生成大量的变体后再进行尝试。

规则能做什么?规则可以完成大小写转换、字符替换、前后缀添加、字符重复、颠倒顺序等数十种操作。例如,一条简单的规则可以将password变为Password1!P@ssw0rddrowssap等。

为什么规则攻击有效?因为它模拟了人类创建“复杂密码”的常见思维:将o替换为0,将s替换为$,在末尾加!,首字母大写等。Hashcat内置了强大的规则集,如best64.ruled3ad0ne.rule等,它们浓缩了多年来对泄露密码的分析成果。

实战命令示例:

hashcat -m 1000 -a 0 target_ntlm_hash.txt dict_small.txt -r /usr/share/hashcat/rules/best64.rule
  • -r: 指定要使用的规则文件。

我的心得:规则攻击是我在字典攻击失败后的第二波主力。通常的流程是:先用纯净的大字典跑一遍(-a 0),如果没结果,立刻换上一个小而精的核心字典(比如由目标关键词生成的字典),搭配best64.ruled3ad0ne.rule再跑一次。很多时候,密码就是CompanyName2023!这种简单规则的产物,规则攻击能精准命中。记住,规则文件的质量和针对性,决定了这次攻击的成败。

3. 实战环境配置与Hashcat调优

工欲善其事,必先利其器。在Kali上使用Hashcat,默认配置可能无法充分发挥硬件性能,尤其是当你使用GPU进行加速时。一次高效的破解,离不开正确的环境配置和工具调优。

3.1 Kali中Hashcat的安装与验证

较新版本的Kali Linux通常预装了Hashcat。但为了确保版本和功能完整,我们进行验证和更新。

# 1. 检查是否安装及版本 hashcat --version # 2. 如果未安装或版本过旧,使用apt更新安装 sudo apt update sudo apt install hashcat hashcat-utils -y # 3. 验证安装,查看帮助和支持的哈希类型 hashcat -h | head -20 hashcat --help | grep -i "ntlm" # 确认支持-m 1000 (NTLM)

关键点:确保安装的版本支持你的硬件(特别是GPU驱动)。如果使用NVIDIA GPU,需要额外安装nvidia-cuda-toolkit和正确的驱动。

3.2 GPU驱动与性能调优

Hashcat的威力在于其利用GPU进行并行计算的强大能力。CPU破解NTLM的速度可能是每秒几百万次,而一块中端GPU可以达到每秒数十亿甚至上百亿次。

NVIDIA GPU配置:

# 安装NVIDIA驱动和CUDA工具包(在Kali中) sudo apt install nvidia-driver nvidia-cuda-toolkit -y # 安装后重启 sudo reboot # 重启后验证 nvidia-smi hashcat -I # 查看Hashcat识别到的OpenCL/CUDA设备信息

Hashcat性能调优关键参数:在运行破解命令时,以下参数能显著影响速度:

  • -w 3-w 4: 设置工作负载配置文件。-w 4是“疯狂”模式,会最大化GPU占用,带来最高速度,但系统可能无法进行其他操作。-w 3是高性能模式,平衡性更好。在笔记本或需要同时做其他事情时,建议从-w 3开始。
  • -O: 启用优化内核。这通常会大幅提升速度,但可能增加破解失败的风险(极少数情况)。对于NTLM等常见哈希,强烈建议始终开启-O
  • -u: 强制使用特定计算单元。通常自动选择即可。
  • --force: 忽略一些警告(如版本不匹配)。慎用,仅在明确知道后果时使用。

我的踩坑记录:曾经在一块GPU上跑破解,速度始终上不去。后来发现是-w参数默认是2(节能模式)。改为-w 3后,速度直接翻了3倍。另一个常见问题是散热,长时间-w 4满负荷运行,务必确保良好的散热,否则GPU会因过热而降频,反而降低平均速度。

3.3 创建测试用的NTLM哈希样本

为了演示,我们需要一个或多个NTLM哈希。在Kali上,我们可以轻松生成已知密码的哈希,用于后续的破解验证。

方法一:使用openssl生成(推荐,简单直接)

echo -n "Password123!" | openssl passwd -1 -stdin

这个命令会生成一个$1$开头的MD5 crypt哈希,不是NTLM。生成NTLM哈希需要其他方法。

方法二:使用Python(或Perl)的smbpasswd模拟或hashlib更直接的方法是使用一个简单的Python脚本,或者利用Kali自带的工具smbpasswd(但需要交互)。这里用一个Python单行命令:

python3 -c "import hashlib; print(hashlib.new('md4', 'Password123!'.encode('utf-16le')).hexdigest())"

输出:e19ccf75ee54e06b06a5907af13cef42这就是密码Password123!的NTLM哈希(32位十六进制字符串)。

方法三:使用hashcat--stdout模式生成

echo -n "Password123!" | iconv -f ASCII -t UTF-16LE | openssl dgst -md4

或者,更“Hashcat”风格的方式是,先准备一个密码文件password.txt,内容为Password123!,然后:

hashcat --stdout -m 1000 password.txt

但这需要hashcat以某种方式计算,更常见的做法是直接使用上述Python命令生成测试哈希。

我们将哈希e19ccf75ee54e06b06a5907af13cef42保存到文件target_hash.txt中,用于后续所有攻击演示。

4. 五种攻击方法逐行实战演示

现在,让我们在配置好的Kali环境中,使用刚才生成的测试哈希e19ccf75ee54e06b06a5907af13cef42,逐一演练五种攻击方法。请确保你的target_hash.txt文件内容只有这一行哈希。

4.1 字典攻击实战

首先,我们使用Kali自带的经典弱口令字典rockyou.txt进行尝试。这个字典包含数百万个常见密码。

# 基础字典攻击 hashcat -m 1000 -O -w 3 target_hash.txt /usr/share/wordlists/rockyou.txt # 如果想看到实时的状态,可以加上 --status 和 --status-timer hashcat -m 1000 -O -w 3 target_hash.txt /usr/share/wordlists/rockyou.txt --status --status-timer=2

命令拆解与预期结果:

  • -m 1000 -O -w 3:破解NTLM,开启优化,使用高性能负载。
  • Hashcat会开始读取rockyou.txt,计算每个词的NTLM哈希并与目标比对。
  • 由于我们的目标哈希对应密码Password123!,这本身是一个强密码,不在rockyou.txt中,所以这次攻击预期会失败。你会看到最终状态为Exhausted,表示字典耗尽,未破解。

如果破解成功,你会看到:

e19ccf75ee54e06b06a5907af13cef42:Password123! ... Status.......: Cracked ...

Hashcat会以哈希:明文的格式在屏幕上输出结果,并自动将结果保存到同目录下的hashcat.potfile文件中。后续再破解相同哈希时,Hashcat会直接从这里读取结果,速度极快。

实操心得:字典攻击跑完后,无论成功与否,都要养成查看进度的习惯。使用hashcat --show target_hash.txt可以显示potfile中已破解的该哈希结果。如果字典攻击失败,不要灰心,这仅仅是开始。接下来,我们可以尝试更有针对性的字典,或者转向其他攻击模式。

4.2 组合攻击实战

假设我们通过信息收集,知道目标用户可能使用“季节+年份”的密码模式。我们创建两个小字典。

创建seasons.txt:

Spring Summer Autumn Winter

创建years.txt:

2020 2021 2022 2023 2024 !@#
# 组合攻击:将seasons中的每个词与years中的每个词拼接 hashcat -m 1000 -a 1 -O -w 3 target_hash.txt seasons.txt years.txt

命令拆解:

  • -a 1:启用组合攻击模式。
  • Hashcat会尝试Spring2020,Spring2021, ...,Winter!@#等共 4 * 6 = 24 种组合。
  • 显然,我们的目标密码Password123!不在此列,攻击再次失败。

这个演示的意义在于:它展示了如何利用有限的、有针对性的词汇表,通过组合来覆盖一类特定的密码模式。在真实场景中,seasons.txt可能是员工姓名缩写,years.txt可能是公司成立年份、部门编号等。组合攻击能有效扩大攻击面,而无需维护一个包含所有可能拼接结果的巨型字典文件。

4.3 掩码攻击实战(附常用掩码规则库)

这是本次实战的核心。我们已知密码是Password123!。让我们分析其结构:P(大写字母1位),assword(小写字母6位),123(数字3位),!(符号1位)。总长度11位。结构可以抽象为:?u?l?l?l?l?l?l?d?d?d?s

但如果我们不知道具体密码,只知道目标公司的密码策略是“至少8位,需包含大小写字母、数字和特殊字符”。这是一个非常常见的策略。我们可以设计一系列掩码,按可能性高低依次尝试。

常用掩码规则速查表(针对8-12位常见策略密码):

掩码模式描述搜索空间大小适用场景
?u?l?l?l?l?l?l?d首字母大写+6小写+1数字26 * 26^6 * 10 ≈ 8.03e11基础策略,无符号要求
?u?l?l?l?l?l?l?d?s首字母大写+6小写+1数字+1符号26 * 26^6 * 10 * 33 ≈ 2.65e13要求数字和符号
?u?l?l?l?l?l?d?d首字母大写+5小写+2数字26 * 26^5 * 10^2 ≈ 3.09e11强调两位数字结尾
?u?l?l?l?l?l?l?l?d首字母大写+7小写+1数字 (8位)26 * 26^7 * 10 ≈ 2.09e138位密码常见结构
?d?d?d?d?u?l?l?l4数字+1大写+3小写10^4 * 26 * 26^3 ≈ 4.57e9可能以年份开头
?l?l?l?l?d?d?d?d4小写+4数字26^4 * 10^4 ≈ 4.57e9简单单词加生日
?a?a?a?a?a?a?a?a任意8位可打印字符95^8 ≈ 6.63e15最后手段,空间巨大

实战命令:尝试一个可能的结构假设我们猜测密码是“首字母大写,中间小写,以数字和符号结尾”,但不确定具体长度和数字符号个数。我们可以从一个较有可能的掩码开始:

# 尝试掩码:?u?l?l?l?l?l?l?d?d?s (11位,大写+6小写+2数字+1符号) hashcat -m 1000 -a 3 -O -w 3 target_hash.txt ?u?l?l?l?l?l?l?d?d?s

重要提示:这个掩码的搜索空间是26 * 26^6 * 10^2 * 33 ≈ 8.74e13。即使在高端GPU上,这也可能需要极长的时间。在真实攻击中,我们绝不会一开始就尝试如此大的空间。

正确的掩码攻击策略是:

  1. 信息收集优先:尽可能收集目标信息,缩小掩码范围。例如,如果知道用户喜欢用!结尾,掩码最后一位固定为!?u?l?l?l?l?l?l?d?d!),空间立刻缩小33倍。
  2. 由简到繁:先尝试短长度、简单字符集的掩码(如?u?l?l?l?l?d?d,7位)。如果公司有历史密码泄露,分析其模式。
  3. 利用已知部分:如果通过其他手段知道了密码的一部分(例如,通过钓鱼获取了前几位),可以使用混合攻击(-a 6 或 -a 7),将已知部分作为字典,未知部分作为掩码,效率最高。
  4. 掩码文件:对于复杂的、需要尝试多种掩码的情况,可以将掩码写入文件,使用-a 3 mask_file.txt来依次尝试。

我的心得:掩码攻击是一门艺术。我通常会准备一个“掩码优先级列表”文件。例如,先跑所有?u?l?l?l?l?l?l?d(7小写+1数字)的8位变种,再跑?u?l?l?l?l?l?d?d,然后是?l?l?l?l?d?d?d?d(纯小写+4数字)。每次攻击前,用hashcat --keyspace -a 3 [掩码]命令计算一下搜索空间大小,评估所需时间,做到心中有数。

4.4 混合攻击实战

现在,假设我们通过社工库或猜测,认为用户可能使用Password作为基础词,但为了符合策略,在后面添加了数字和符号。我们已知基础词,但不知道后缀。

创建基础字典base.txt:

Password Admin Welcome
# 混合攻击模式6:字典(base.txt) + 掩码(?d?d?d?s) # 这将尝试 Password000!, Password001!, ... Password999! hashcat -m 1000 -a 6 -O -w 3 target_hash.txt base.txt ?d?d?d?s # 混合攻击模式7:掩码(?d?d?d?s) + 字典(base.txt) # 这将尝试 000!Password, 001!Password, ... 999!Password hashcat -m 1000 -a 7 -O -w 3 target_hash.txt ?d?d?d?s base.txt

命令拆解与结果:

  • 我们的目标密码是Password123!。在-a 6模式下,Hashcat会尝试Password+三位数字+一个符号123!正好符合?d?d?d?s(三位数字+一个符号)的掩码。
  • 因此,使用-a 6模式的命令将会成功破解。你会看到状态变为Cracked,并输出e19ccf75ee54e06b06a5907af13cef42:Password123!

这个例子完美展示了混合攻击的威力:当我们对密码的局部结构有清晰假设时,它能以极高的效率在庞大的搜索空间中精准定位。

4.5 规则攻击实战

最后,我们演示规则攻击。假设我们有一个很小的、针对性的字典weak.txt,里面只包含一些基础词汇。

创建weak.txt:

password admin welcome company

我们知道用户喜欢做简单的变换。使用Hashcat内置的best64.rule规则集,它包含了64条最有效的密码变换规则。

# 规则攻击:对weak.txt中的每个词应用best64.rule中的规则 hashcat -m 1000 -a 0 -O -w 3 target_hash.txt weak.txt -r /usr/share/hashcat/rules/best64.rule

发生了什么?Hashcat会读取weak.txt中的每一个单词(例如password),然后依次应用best64.rule文件中的每一条规则。某条规则可能将其转换为Password,另一条转换为Password1,再一条转换为Password1!,又一条转换为P@ssw0rd,等等。当尝试到由password经过一系列规则变换生成的Password123!时(尽管best64.rule可能不直接包含生成123!后缀的规则,但可能有其他规则组合或更复杂的规则集能做到),就会匹配成功。

规则文件详解:规则文件中的每一行代表一条指令。例如:

  • c: 首字母大写(password->Password
  • $1: 在末尾添加数字1Password->Password1
  • $!: 在末尾添加符号!Password1->Password1!
  • sso: 将所有字符o替换为0Password->Passw0rd) 一条规则可以是多个指令的组合,如c $1 $!表示“首字母大写,然后加1,再加!”,将password变为Password1!

我的心得:规则攻击的成功率极大依赖于基础字典的质量和规则集的针对性。我常用的策略是:先使用大型通用字典+快速规则集(如best64.rule)进行扫描。如果没有结果,则使用针对目标生成的小型专属字典+更全面或更激进的规则集(如d3ad0ne.ruleOneRuleToRuleThemAll.rule)。有时,甚至需要自己编写简单的规则,例如如果知道目标公司要求密码必须包含@,可以写一条规则s a @(将所有的a替换为@)。

5. 高级技巧、问题排查与性能优化

掌握了五种基本攻击模式后,要想在实战中游刃有余,还需要一些高级技巧和排错能力。Hashcat功能强大,参数繁多,理解其工作状态和日志对于高效破解至关重要。

5.1 利用Potfile与恢复会话

Hashcat会在~/.hashcat/hashcat.potfile或运行目录下的hashcat.potfile中自动保存所有破解成功的哈希:明文对。这是一个非常重要的特性。

  • --show参数:快速查看某个哈希文件是否已被破解。
    hashcat --show target_hash.txt
  • --remove参数:破解成功后,从哈希文件中移除已破解的哈希,方便对剩余哈希继续攻击。
    hashcat -m 1000 -a 0 --remove hashes.txt wordlist.txt
  • 恢复会话:如果破解过程因故中断(如断电、系统重启),可以使用--restore参数从上次的检查点恢复。这需要你在启动时使用了--session参数为任务命名。
    # 启动一个命名会话的任务 hashcat -m 1000 -a 3 --session=mycrack hashes.txt ?u?l?l?l?l?l?l?d?d # 中断后,恢复会话 hashcat --restore --session=mycrack
    Hashcat会定期生成.restore文件来保存进度。

5.2 状态解读与性能监控

运行Hashcat时,理解其状态输出是优化的关键。使用--status--status-timer=2可以每2秒刷新一次状态。

一个典型的状态输出如下:

Session..........: hashcat Status...........: Running Hash.Mode........: 1000 (NTLM) Hash.Target......: e19ccf75ee54e06b06a5907af13cef42 Time.Started.....: Mon Jan 1 10:00:00 2024 (15 secs) Time.Estimated...: Mon Jan 1 10:05:00 2024 (4 mins, 45 secs) Guess.Mask.......: ?u?l?l?l?l?l?l?d?d [9] Guess.Queue......: 1/1 (100.00%) Speed.#1.........: 12345.6 MH/s (65.32ms) @ Accel:1024 Loops:256 Thr:1024 Vec:1 Recovered........: 0/1 (0.00%) Digests, 0/1 (0.00%) Salts Progress.........: 123456789/1000000000 (12.35%) Rejected.........: 0/123456789 (0.00%) Restore.Point....: 12345678/100000000 (12.35%) Restore.Sub.#1...: Salt:0 Amplifier:0-1 Iteration:0-1 Candidate.Engine.: Device Generator Candidates.#1....: Passw0rd1 -> Pxsw0rd1 Hardware.Mon.#1..: Temp: 76c Fan: 65% Util:100% Core:1980MHz Mem:5000MHz Bus:16

关键指标解读:

  • Speed.#1:当前设备的破解速度(MH/s = 百万次/秒,GH/s = 十亿次/秒)。这是衡量性能的核心指标。
  • Time.Estimated:根据当前速度和剩余搜索空间估算的完成时间。注意:这个时间在掩码攻击中可能不准确,因为不同掩码位置的速度可能不同。
  • Progress:总体进度百分比。
  • Hardware.Mon.#1:GPU硬件监控信息,包括温度(Temp)、风扇转速(Fan)、利用率(Util)、核心频率(Core)和显存频率(Mem)。温度过高(如持续>85c)会导致降频,影响速度。
  • Rejected:被拒绝的哈希数(通常为0,除非哈希格式错误)。

5.3 常见问题与解决方案速查表

问题现象可能原因解决方案
ERROR: clGetDeviceIDs(): -1OpenCL/CUDA驱动未正确安装或识别。运行hashcat -I检查设备。安装对应GPU驱动(nvidia-driver,opencl-amd等)。
速度远低于预期1. 工作负载-w设置过低。
2. GPU过热降频。
3. 系统电源模式为节能。
4. 攻击模式或哈希类型本身较慢。
1. 尝试-w 3-w 4
2. 改善散热,监控GPU温度。
3. 在BIOS/OS中设置为高性能模式。
4. 使用-O优化内核。对于某些哈希,可尝试-D 2用CPU辅助。
Exhausted但未破解当前攻击模式(字典、掩码等)下的所有可能性已尝试完毕,密码不在此搜索空间内。切换攻击模式,使用更全的字典,设计新的掩码,或应用规则。
Cracked--show无结果破解结果未自动保存到potfile,或potfile路径不对。使用--outfile=results.txt参数指定输出文件。检查默认potfile路径~/.hashcat/hashcat.potfile
内存不足 (OOM)字典文件过大,或使用了需要大量内存的规则/组合。1. 分割大字典分批运行。
2. 使用--max-memlimit=512(单位MB)限制内存使用。
3. 尝试使用-S(慢速缓存)模式。
任务被系统中断系统休眠、SSH断开等。使用--session参数命名会话,以便用--restore恢复。
无法恢复会话.restore文件损坏或丢失。检查运行目录或~/.hashcat/目录下是否有对应的.restore文件。中断时尽量用Ctrl+C优雅退出。

5.4 性能优化进阶技巧

  1. 内核调优 (-Ovs-O -w 4):-O(优化内核)通常会带来巨大速度提升,但可能增加不稳定性。如果遇到问题(如破解失败或崩溃),可以尝试不加-O运行。-w 4是极限性能模式,在稳定的系统上配合-O使用能达到峰值速度。
  2. 设备选择 (-d):如果你有多个GPU(或GPU+CPU),可以用-d 1指定第二个设备,或用-d 1,2同时使用设备1和2。用--benchmark测试各设备的单独性能。
  3. 工作量分配 (--workload-profile):除了-w,还可以使用--workload-profile进行更细粒度的控制。但对于大多数用户,-w 3是最佳平衡点。
  4. 字典预处理:对于超大型字典,可以先使用hashcat-utils套装中的工具(如cutblenrli)进行预处理,去除重复、过短、过长的行,能显著提升后续字典攻击和规则攻击的效率。
  5. 掩码优先级:将最有可能的掩码放在前面尝试。可以创建一个掩码文件masks.txt,每行一个掩码,Hashcat会按顺序尝试。利用--keyspace计算每个掩码的空间,优先尝试空间小的。
  6. 分布式破解:对于超大任务,可以使用--stdout模式将候选密码输出,再结合puredist等工具进行分布式破解,但这属于更高级的集群应用范畴。

破解NTLM哈希是一场与时间和计算资源的博弈。没有一种方法永远有效。一个系统化的流程通常是:字典攻击(通用+定制) → 规则攻击 → 组合攻击/混合攻击(基于收集的信息) → 针对性掩码攻击 → 最后才是广谱的掩码或纯暴力攻击。每一次攻击的失败,都意味着你对目标密码策略和用户习惯的了解更深一层,从而能设计出更精准的下一次攻击。记住,思维的价值永远高于单纯的算力。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询