空想网安の乌托邦
首页小说读书项目归档照片墙音乐说说杂谈关于
封面

HTB Academy:Hashcat 密码破解

写作时间:2026-10-10 18:46:59
# HTB Academy
# 网安

来源:HTB Academy「Cracking Passwords with Hashcat」,模块 20,全部 14 小节。2026-10-10 阅读整理。按概念、条件、操作、验证与限制归纳,不照搬终端长输出。命令仅供课程实验或明确授权的离线评估;本次没有执行破解、启动实验或提交答案。

配图使用课程原始 HTTPS 图片,联网且阅读器允许加载远程图片时才能显示。工具教程来自课程正文及正文明确链接的相关官方文档;没有提供的环境步骤不自行补造。课程旧版本、性能数字不是当前环境的保证。

学习主线与目录

先辨认哈希和输入格式,再选择候选生成方式,最后观察恢复结果;不要把“生成了候选”误当作“破解成功”。

阶段 小节 要解决的问题 基础 1–4 破解的含义、哈希与加密、识别算法、安装 Hashcat 候选生成 5–8 字典、组合、掩码、混合模式如何取舍 定制候选 9–10 根据对象生成字典,用规则扩展词形 实际输入 11–13 系统哈希、加密文件、无线捕获如何交给 Hashcat 综合练习 14 按已知背景识别并恢复多类哈希

通用流程:授权范围与输入来源 → 算法/格式确认 → 有针对性的字典与规则 → 小范围预览/测试 → 查看进度和恢复结果 → 根据成本调整策略。

1. 介绍:密码破解概述

课程小节

密码破解在本章主要指离线尝试候选密码:计算候选对应的结果,与已取得的哈希比对,找到匹配的明文。它不是对哈希执行某个“解密函数”。

弱密码和密码复用是课程强调的两个风险。候选可以来自常见密码字典,也可以根据企业名称、人员信息、密码政策定制,再用规则变化。对安全评估人员,它帮助判断已获得的哈希能否支持后续授权工作;对防御人员,它解释为什么“只存哈希”仍不足以抵御弱密码风险。

本节是概念引入,未给安装或具体命令;Hashcat 首次使用见第 4 节。没有正文教学图片。

2. 哈希与加密

课程小节

核心区别

对象 核心性质 本章中的用途/例子 哈希 同一算法通常输出固定长度;不能直接逆运算还原;可能发生碰撞 候选计算后比对;MD5、SHA256 用于完整性示例 带密钥的完整性计算 计算中引入密钥 HMAC,用于消息完整性验证 密码专用处理 增加每次猜测成本 PBKDF2、bcrypt;课程还概述 Argon2 的资源成本 对称加密 加密与解密使用相同秘密密钥 XOR 演示;AES、DES、3DES、Blowfish 公私钥体系 使用公钥、私钥承担不同角色 课程概述非对称体系,本章不展开协议实现

哈希长度只能帮助筛选,不能证明算法。盐是与密码处理相关的额外数据:相同密码配不同盐可以得到不同结果,降低预计算结果的复用价值;盐并不使弱密码不可猜测。慢速算法与盐的作用也不能混为一谈。

演示一:输入变化导致摘要变化

前置:课程 Unix shell 环境,已有 ​md5sum​;本节未提供其安装教程。

echo -n 'p@ssw0rd' | md5sum
echo -n 'p@ssw0rd123456' | md5sum

​-n​ 避免加入换行,两次输入不同,摘要也应不同。这里只演示拼接盐改变输入,不是完整的生产密码存储方案。原页摘要输出存在长度疑点,故不抄作校验答案,以实际命令输出为准。

演示二:XOR 的可逆性

前置:Python 3,并能导入 ​pwn​ 模块;课程没有给该模块安装命令,也没有要求额外认证或网络连接。

from pwn import xor
ciphertext = xor('p@ssw0rd', 'secret')
print(ciphertext)
print(xor(ciphertext, 'secret'))

第二次用同一密钥处理,课程结果为 ​b'p@ssw0rd'​;​b​ 表示字节串。此例用来理解可逆加密,不代表 XOR 是安全密码存储方式。

注意:原页对 Blowfish、密码哈希及公钥算法的分类有概述性混用;学习重点是“候选比对”和“持有密钥解密”不同,不据此推导全部算法或 HTTPS 的完整实现。没有正文教学图片。

3. 哈希识别

课程小节

先看结构,再结合来源

32 个十六进制字符可能是 MD5,也可能是 NTLM。​hash:salt​、​idididsalt$hash​ 等结构提供更多线索;还要结合它来自 Windows、Linux、数据库或特定应用的背景。

前缀/结构线索 课程对应类型 ​111​ Unix MD5-crypt ​2a2a2a​、​2y2y2y​ bcrypt/基于 Blowfish 的密码处理格式 ​555​ Unix SHA256-crypt ​666​ Unix SHA512-crypt,不是原始 SHA512 摘要 ​apr1apr1apr1​ Apache MD5 格式 ​PPP​ WordPress 等使用的 PHPass 格式线索 ​DCC2DCC2DCC2​ Domain Cached Credentials 2

hashID:首次使用与操作

环境:Python、pip。用途:根据格式给出候选算法,可处理单个字符串或文件;识别结果不是唯一结论。来源:课程链接的 hashID 项目。

pip install hashid
hashid '$apr1$71850310$gh9m4xcAn3MGxogwX/ztb.'
hashid hashes.txt
hashid '$DCC2$10240#tom#e4e938d12fe5974dc42a90120bd9c90f' -m

单引号保护 ​$​,避免 shell 把哈希内容当作变量。​-m​ 请求对应 Hashcat 模式,课程 DCC2 示例返回 ​2100​。文件中保存完整哈希,不填网页里的截断标记。

首次配置:本节没有额外配置文件步骤。验证方式是检查工具是否解析出候选,再对照Hashcat 示例哈希表和来源系统;不能只选输出列表中的第一项。课程以 LastPass 的 ​6800​ 为例说明上下文和完整字段的重要性。

4. Hashcat 概述与首次环境准备

课程小节

安装、环境与初次检查

课程主要使用 Pwnbox/Parrot 的 Linux shell,也展示 Windows/Linux 官方发行包。以下 apt 命令需要安装软件的权限:

sudo apt install hashcat
hashcat -h
hashcat --example-hashes | less
hashcat -b -m 0

帮助输出用于核对当前版本支持的参数;​--example-hashes​ 查看算法与格式,​less​ 中按 ​q​ 退出;​-b -m 0​ 测试 MD5 性能,单独 ​hashcat -b​ 测全部基准。

也可从课程链接的官方网站取得发行包并解压,或使用源码。原页 ​6.1.1​ 是历史演示版本,不当成“最新版”。发行版仓库更新与官方发行不是同一件事。课程展示 OpenCL/CPU 后端与性能,但没有完整 GPU 驱动安装流程,因此这里不补造驱动教程。

使用前必须准备:格式正确的哈希文件、与算法对应的 ​-m​、字典/掩码/规则,以及可工作的计算后端。本章离线示例通常不需要连接目标服务或输入 SSH 凭据;提取材料的授权与权限另看相应小节。

模式选择

参数 作用 ​-m​ 哈希类型编号,不是攻击方式 ​-a 0​ 字典(straight) ​-a 1​ 两个字典的组合 ​-a 3​ 掩码 ​-a 6​ 字典 + 掩码(后缀) ​-a 7​ 掩码 + 字典(前缀)

后续 Linux 示例统一用下列字典变量,路径来自课程 Pwnbox。若没有该文件,应使用自己已有、获准使用的字典,而不是假定安装 Hashcat 就会附带它:

WORDLIST=/opt/useful/seclists/Passwords/Leaked-Databases/rockyou.txt

性能选项与结果判断

​-O​ 使用优化内核,但可能限制可尝试密码的长度;具体限制取决于模式,不能把课程举出的长度当通用上限。可先尝试优化模式,再处理未覆盖的长密码。

​-w​ 调整负载:课程默认 ​2​,日常桌面可考虑 ​1​,专用破解机器可考虑 ​3​。不要无条件使用 ​--force​ 绕过后端警告,课程指出这可能造成不可靠结果,应先处理根本环境问题。

观察 ​Status​、​Recovered​、​Progress​、​Speed​、剩余时间:​Cracked​/恢复数量说明命中;​Exhausted​ 只说明当前候选集用完,不证明密码无法恢复。课程输出的秒数和速度依赖硬件与算法,不能作为复现承诺。

5. 字典攻击

课程小节

目标是先测试较可能的密码,而不是遍历所有字符串。适用于常见弱密码、泄露字典中出现过的词;课程提到 SecLists、rockyou、CrackStation。大字典占用更多存储和时间,未必优于小而相关的字典。

安装与后端条件见第 4 节;首次配置是选好字典路径和算法。先用课程已知密码生成练习哈希,再验证整个流程:

echo -n '!academy' | sha256sum | cut -f1 -d' ' > sha256_hash_example
hashcat -a 0 -m 1400 sha256_hash_example "$WORDLIST"

​1400​ 是原始 SHA256,​-a 0​ 逐行读取候选。课程示例命中 ​!academy​,应以 ​Cracked​、​Recovered 1/1​ 和恢复明文判断结果,不能只看程序启动。

课程随后将同样的密码放在 bcrypt 示例中,展示算法成本差异:同一字典、同一密码并不意味着耗时一样。不要把 bcrypt 的成本字段 ​05​ 解释成“只运行五轮”,也不要在慢速模式中照搬大型字典的预计完成时间。优先缩小候选范围,规则扩展见第 10 节。

运行提示中 ​s​ 查看状态、​p​ 暂停、​b​ 跳过当前攻击、​c​ 设置检查点退出、​q​ 退出;按当前版本实际提示操作。

6. 组合攻击

课程小节

适用场景:密码可能由两个有意义的词直接拼接。把两个字典做笛卡尔积,左边词在前、右边词在后;不是把两个文件的行简单合并。

前置:第 4 节环境,以及两个已有文本字典。课程示例左侧包含 ​super/world/secret​,右侧包含 ​hello/password​,共 ​3 × 2 = 6​ 个候选。可先预览再破解:

hashcat -a 1 --stdout wordlist1 wordlist2
echo -n 'secretpassword' | md5sum | cut -f1 -d' ' > combination_md5
hashcat -a 1 -m 0 combination_md5 wordlist1 wordlist2

预览应包含 ​secrethello​、​secretpassword​;破解示例命中 ​secretpassword​。两个字典顺序交换后,生成的是另一组候选。字典越大,乘积越大;小示例的工作量不足以充分利用 GPU 属于性能提示,不自动代表命令失败。

7. 掩码攻击

课程小节

已知密码的部分结构时,固定已知位置,只枚举未知位置,比完全无约束穷举有效。例如企业前缀 + 五个小写字母 + 某一范围年份。

占位符 字符范围 ​?l​ / ​?u​ 小写 / 大写英文字母 ​?d​ 十进制数字 ​?h​ / ​?H​ 小写 / 大写十六进制字符 ​?s​ 特殊字符,含空格 ​?a​ ​?l?u?d?s​ 的集合 ​?b​ 全字节范围 ​?1​–​?4​ 由 ​-1​–​-4​ 定义的自定义集合

前置:正确的长度、固定片段及字符范围假设;环境见第 4 节。课程实例将年份限制在 2000–2019:

echo -n 'ILFREIGHTabcxy2015' | md5sum | tr -d ' -' > md5_mask_example_hash
hashcat -a 3 -m 0 md5_mask_example_hash -1 01 'ILFREIGHT?l?l?l?l?l20?1?d'

​ILFREIGHT​ 和 ​20​ 是字面值,五个 ​?l​ 各占一个位置;​-1 01​ 将年份十位限制为 0 或 1,最后 ​?d​ 取 0–9。候选数为 ​26^5 × 20 = 237627520​。掩码需要引号,不能把正则表达式 ​[0-1]​ 直接替换成 Hashcat 掩码语法。

课程还介绍 ​--increment​ 和 ​--increment-max​ 控制增长长度,使用前核对帮助及课程链接的掩码文档。验证既看命中结果,也看输出的掩码和候选规模是否符合自己的假设。

8. 混合模式

课程小节

适合“常见词 + 小范围变化”。把词根交给字典,固定位置的数字或符号交给掩码;安装见第 4 节,配置只需选对前后顺序。

# 字典词后追加一个数字和一个特殊字符
echo -n 'football1$' | md5sum | tr -d ' -' > hybrid_hash
hashcat -a 6 -m 0 hybrid_hash "$WORDLIST" '?d?s'

# 字典词前添加 2000–2019 的年份
echo -n '2015football' | md5sum | tr -d ' -' > hybrid_hash_prefix
hashcat -a 7 -m 0 hybrid_hash_prefix -1 01 '20?1?d' "$WORDLIST"

课程结果分别是 ​football1$​ 和 ​2015football​。区别不只是编号:​-a 6​ 的字典在前、掩码在后,​-a 7​ 相反。字典必须包含对应词根;选错位置、年份范围或词根,候选再多也可能无法命中。

9. 创建自定义字典

课程小节

根据密码政策、已授权获知的人员信息、键盘路径、企业网站用语或已恢复密码建立候选。原则是提高相关性,避免只追求文件大小。生成工具并不自行验证哈希;其输出要交给 Hashcat 的字典/规则模式。

9.1 Crunch:按长度和模板生成

课程说明 Parrot 环境已有 Crunch,并链接项目,未提供通用安装步骤。初次配置:确定长度、允许字符、输出文件和可用磁盘空间。

crunch 4 8 -o wordlist
crunch 17 17 -t ILFREIGHT201%@@@@ -o wordlist

首例生成长度 4–8 的候选,可能产生巨大文件;第二例固定模板,​%​ 表示数字、​@​ 表示小写字母,固定长度为 17。课程还说明逗号表示大写、​^​ 表示符号,​-d​ 用于限制重复;具体值要核对所用版本帮助,不把未核验的重复限制语法当通用配置。

验证:检查生成文件内容、长度、大小是否符合模板;这种方法适合已知格式,而非无限扩大穷举范围。

9.2 CUPP:人员特征字典

课程环境已有 CUPP。首次准备及配置依据课程链接的 CUPP README:需要 Python 3,配置文件为 ​cupp.cfg​;在已有项目目录运行:

python3 cupp.py -h
python3 cupp.py -i

交互式输入姓名、昵称、生日、伴侣/孩子、宠物、企业名和关键词;未知字段留空,生日按提示的 ​DDMMYYYY​。随后按提示决定是否添加数字、符号和 Leet 替换。课程 Roger 示例生成 ​roger.txt​,得到 2419 个候选,这是示例数量而非固定结果。​-l​ 可下载字典,需要网络;非交互式的详细配置不在本章展开。

适合已有授权背景信息的特定对象;完成后抽查候选是否确实包含所需关键词,不把个人资料字典当成必然命中。

9.3 KWprocessor:键盘路径

课程首次安装步骤:

git clone https://github.com/hashcat/kwprocessor.git
cd kwprocessor
make

环境:能够使用 Git 和 Make 编译。输入由 ​basechars​、​keymaps​、​routes​ 三类文件决定,分别描述起点、键盘布局和行走路线。课程使用的命令名是 ​kwp​;如编译后没有这个 PATH 命令,要使用实际生成的可执行文件,不假定编译会自动全局安装。

kwp -s 1 basechars/full.base keymaps/en-us.keymap routes/2-to-10-max-3-direction-changes.route

​-s 1​ 包含 Shift 相关变化;课程示例从 T 出发,向东、南、西移动生成 ​TYUJNBV​。用于人们沿键盘走位构造的密码。先观察输出与键盘布局一致,再用于破解。相关 README

9.4 PRINCE:把词作为元素拼接

把输入词自动拼接为不同长度组合。课程的安装方式是下载并解压发行包,示例版本 ​0.22​ 仅作为课内历史版本:

wget https://github.com/hashcat/princeprocessor/releases/download/v0.22/princeprocessor-0.22.7z
7z x princeprocessor-0.22.7z
cd princeprocessor-0.22
./pp64.bin -h
./pp64.bin --keyspace < words
./pp64.bin -o wordlist.txt < words
./pp64.bin --pw-min=10 --pw-max=25 -o wordlist.txt < words
./pp64.bin --elem-cnt-min=3 -o wordlist.txt < words

前置:下载网络、7z 解压工具、能执行对应平台二进制,输入 ​words​ 一行一个元素。课程未给这些系统工具的安装流程。配置用 ​--pw-min/--pw-max​ 控制最终字符长度,​--elem-cnt-min/--elem-cnt-max​ 控制组合元素数量,两者不同。先用 ​--keyspace​ 看规模;课程 dog/cat/ball 示例展示 232 个候选,不是任意输入都一样。课程发行包链接

9.5 CeWL:从网站提取企业用语

适合在获准访问的企业网站提取品牌、产品和行业词。初次准备可按课程链接的 CeWL README安装:需要 Ruby、Bundler 及项目依赖,相关元数据功能还要求 exiftool;课程没有给 Ruby/exiftool 的系统安装步骤。

git clone https://github.com/digininja/CeWL.git
cd CeWL
gem install bundler
bundle install
chmod u+x ./cewl.rb
./cewl.rb --help
./cewl.rb -d 5 -m 8 -e http://inlanefreight.com/blog -w wordlist.txt

最后一行保留课内网站作为示例,实际使用先确认授权及网络可达。​-d 5​ 是爬取深度、​-m 8​ 是最小词长、​-e​ 提取邮箱、​-w​ 保存字典;并非“词长一定大于 8”。如果已有系统命令,原页使用 ​cewl​。源码运行无需为了此例强行创建全局软链接。验证输出中是否有相关词;深度增加会带来更多访问,不随意扩大到站外。

9.6 复用已恢复密码、辅助工具

课程将已恢复密码当作下一轮字典种子:观察企业的密码构造习惯,再配规则处理,而非机械重复同一批候选。

hashcat --show -m HASH_MODE hashes.txt
cut -d: -f 2- ~/hashcat.potfile

​HASH_MODE​ 要换成正确编号;potfile 路径以实际环境为准,课程示例不是所有安装的固定位置。​-f 2-​ 保留后续字段,避免仅取第二字段丢失密码中的冒号,但带多字段的哈希仍需要注意边界,不能把它当通用无损解析器。

课程另介绍 hashcat-utils 和 maskprocessor 作为字典处理/掩码候选辅助工具。后者示例为对 ​Welcome?s​ 枚举符号;在二进制所在目录可写 ​./mp64.bin 'Welcome?s'​,文件名与平台必须对应。本节没有给 maskprocessor 的完整安装命令,不虚构额外包安装。hashcat-utils 的实际编译实例见第 13 节。

10. 使用规则

课程小节

规则把字典词变成常见密码变体,适合首字母大写、字符替换、添加年份等模式。它不是正则表达式:规则是在改写候选,而不只是匹配文本。环境与安装见第 4 节;首次配置是编写规则文件并用 ​--stdout​ 检查。

规则 作用 ​l​ / ​u​ 全部小写 / 大写 ​c​ / ​C​ 首字符大写其余小写 / 首字符小写其余大写 ​t​ / ​TN​ 全部 / 指定位置切换大小写 ​r​ / ​d​ / ​q​ 逆序 / 整词重复 / 每个字符重复 ​zN​ / ​ZN​ 重复首 / 尾字符 N 次 ​{​ / ​}​ 左 / 右循环移位 ​^X​ / ​$X​ 前置 / 后置字符 X ​sXY​ 把 X 替换为 Y

符号依据课程链接的官方规则文档核对,避免网页翻译把规则字母改成汉字。位置参数从 0 起。拒绝规则不能不加区分地放进普通 ​-r​ 规则文件;课内涉及的相关功能有 legacy 或 ​-j/-k​ 使用限制。

先验证变换,再运行破解

echo 'c so0 si1 se3 ss5 sa@ $2 $0 $1 $9' > rule.txt
echo 'password_ilfreight' > test.txt
hashcat -r rule.txt test.txt --stdout

顺序是首字母大写 → o/i/e/s/a 替换 → 追加 2019;预期得到 ​P@55w0rd_1lfr31ght2019​。规则行用单引号保护 ​$​,否则 shell 变量展开可能改变规则。

echo -n 'St@r5h1p2019' | sha1sum | awk '{print $1}' > rule_hash
hashcat -a 0 -m 100 rule_hash "$WORDLIST" -r rule.txt
ls -l /usr/share/hashcat/rules/
hashcat -a 0 -m 100 -g 1000 rule_hash "$WORDLIST"

​-r​ 使用已有规则文件;​-g 1000​ 随机生成规则,不保证覆盖目标变化。课程展示内置 best64、leetspeak 等,也链接外部规则集;选择相关规则,避免不加分析地加载全部规则。多个 ​-r​ 会组合不同规则文件中的规则,候选量可能显著增长,不等同于简单并列执行文件。

验证看预览候选、恢复明文和 ​Recovered​;耗尽时先检查规则是否真的生成了想要的词形,再考虑增加规模。

11. 破解常见哈希

课程小节

常用编号速查

模式 类型 输入注意点 ​0​ MD5 原始摘要 ​100​ SHA1 原始摘要 ​1000​ NTLM 与 NetNTLM 不同 ​1800​ SHA512-crypt 保留 ​666​、盐与摘要 ​3200​ bcrypt 保留完整格式及成本字段 ​5500​ / ​5600​ NetNTLMv1 / v2 保留完整挑战响应结构 ​13100​ Kerberos TGS etype 23 对应票据类型,不适用于任意 Kerberos 输入

Hashcat 的安装与输出判断见第 4 节。以下材料均以已在授权范围内获得为前提,课程不是这些材料的完整获取教程。

数据库 SHA1

将数据库中的摘要保存为 ​SHA1_hashes​,一行一个,不带 SQL 表格边框或字段标题:

hashcat -m 100 SHA1_hashes "$WORDLIST"

课程用九个词生成九条摘要作演示,最终 ​Recovered 9/9​。重点是输入清洗与模式选择,不照搬数据库长输出;批量恢复后仍逐项对应用户与明文。

Linux shadow

shadow 每行用冒号分隔,第二字段是密码哈希,其他字段用于账号/老化等信息。读取系统材料需要相应权限,不假定普通用户能读取。课程 ​666​ 示例要把完整第二字段存为 ​nix_hash​:

hashcat -m 1800 nix_hash "$WORDLIST"

示例恢复 ​password123​。保留盐与 ​666​ 前缀,不把整条 shadow 记录直接当作纯哈希,也不误用原始 SHA512 模式。

NTLM

课程用 Python 3 演示 MD4 对 UTF-16LE 密码进行处理:

import hashlib
import binascii
digest = hashlib.new('md4', 'Password01'.encode('utf-16le')).digest()
print(binascii.hexlify(digest))

环境前置是该 Python/hashlib 后端支持 MD4;课程旧环境能运行,不代表所有现代环境默认支持。未给兼容修复教程,因此不补写。把产生的十六进制摘要保存为 ​ntlm_example​,不要包含 Python 的 ​b''​ 显示包装:

hashcat -a 0 -m 1000 ntlm_example "$WORDLIST"

示例恢复 ​Password01​。课程在需要明文登录、无法采用所述其他方式的 RDP 场景下解释其价值;不要把该场景推导为所有环境中的通用限制。

NetNTLMv2

课程假定已经从 Responder 得到捕获材料;捕获操作不在本章展开,未给该工具的首次配置教程。将用户名、域、挑战值和响应保持完整,保存为 ​inlanefreight_ntlmv2​:

hashcat -a 0 -m 5600 inlanefreight_ntlmv2 "$WORDLIST"

课程示例恢复 ​Database99​。NetNTLMv2 是认证交换材料,不是模式 ​1000​ 所需的原始 NTLM 摘要。Kerberos 在此主要提供编号线索,综合应用见第 14 节,不自行补写抓取票据命令。

12. 破解加密文件与其他哈希

课程小节

统一思路:已获授权的文件 → 对应提取器 → Hashcat 能接受的完整哈希字段 → 正确模式 → 字典/规则 → 检查恢复结果。Hashcat 不应直接读取 DOCX、ZIP、KDBX 或 PDF 当作普通摘要。

提取工具首次准备

课程使用 John the Ripper 的 ​*2john​ 工具,而不是要求用 John 执行最终破解。正文给出如下源码编译流程;这需要 Git、编译环境和安装权限,未列出的系统依赖不补造:

sudo git clone https://github.com/magnumripper/JohnTheRipper.git
cd JohnTheRipper/src
sudo ./configure && sudo make

Python 提取脚本需要对应 Python 环境;课程另链接 Python 版提取器及 KeePass 脚本,使用时确认实际脚本所在目录。例子的裸脚本名表示已在相应目录或能定位文件,不表示系统一定将其加入 PATH。课程项目链接

首次配置重点是正确选脚本和输出字段。提取输出可能带 ​文件名:​ 前缀或后置说明;只保存 Hashcat 要求的完整哈希,不能带 ​<SNIP>​,也不能盲目截断包含冒号的格式。

Office 文档

python office2john.py hashcat_Word_example.docx
hashcat -m 9600 office_hash "$WORDLIST"

先将提取出的 ​officeofficeoffice...​ 完整内容保存为 ​office_hash​,移除文件名标签。模式 ​9400/9500/9600​ 分别对应课程列出的 Office 2007/2010/2013;其他 oldoffice 格式需另行匹配,不能只按扩展名选择。课程示例恢复 ​pa55word​,并展示此类算法可能很慢。

ZIP 压缩包

课程先创建已知密码的练习 ZIP,再提取:

zip --password zippyzippy blueprints.zip dummy.pdf
zip2john blueprints.zip
hashcat -a 0 -m 17200 zip_hash "$WORDLIST"

中间步骤:保存完整 ​pkzip2pkzip2pkzip2.../pkzip2/pkzip2/pkzip2​ 字段为 ​zip_hash​,去除文件名/额外元数据。笔记用 ​zip_hash​ 统一命名,避免原页沿用 PDF 文件名造成误解。结果示例为 ​zippyzippy​。

格式与模式要匹配:​11600​ 是 7-Zip,​13600​ 是 WinZip,​17200​ 是 PKZIP 压缩,​17210​ 是未压缩,​17220/17225​ 对应多文件/混合,​17230​ 对应 checksum-only;SecureZIP 的 AES 格式另有 ​23001–23003​。并非所有 ​.zip​ 都使用 ​17200​。

KeePass

python keepass2john.py Master.kdbx
hashcat -a 0 -m 13400 keepass_hash "$WORDLIST"

移除提取结果的 ​Master:​ 标签,保留 ​keepasskeepasskeepass...​。课程模式表包含 KeePass 1/2、AES/Twofish、带或不带 keyfile 的格式;课内例子不是“所有数据库都不需要密钥文件”。如果文件要求 keyfile,前置材料必须相应齐备。课程示例恢复 ​1qazzaq1​,体现键盘路径字典的意义,耗时不能照抄作为保证。

PDF

python pdf2john.py inventory.pdf | awk -F':' '{print $2}'
hashcat -a 0 -m 10500 pdf_hash "$WORDLIST"

将首条命令提取的完整 ​pdfpdfpdf...​ 保存为 ​pdf_hash​ 后再运行第二条。该字段分隔处理仅针对此课内输出,不泛化为所有提取器。课程示例恢复 ​puppydog1​。

PDF 格式 课程模式 1.1–1.3 ​10400​,另列 ​10410/10420​ 碰撞变体 1.4–1.6 ​10500​ 1.7 Level 3 ​10600​ 1.7 Level 8 ​10700​

验证要点:提取器成功解析、Hashcat 接受对应格式、恢复结果与练习材料对应。课程提及 SSH 私钥等其他文件,但未展开具体提取教程,不增写无来源命令。

13. WPA/WPA2 无线握手与 Hashcat

课程小节

前置:已经取得授权范围内、包含有效验证材料的无线捕获文件,具有相应字典,并具备第 4 节 Hashcat 环境。本章以转换和离线恢复为重点,抓取过程不在这里补写;不启动无线攻击,也不把捕获文件传给在线服务。

13.1 四次握手:图中需要理解什么

​

 

‍WPA/WPA2 四次握手:客户端与 AP 交换 ANonce、SNonce、MIC,并派生和安装密钥

​

图左侧是客户端(Supplicant),右侧是 AP(Authenticator)。先完成认证/关联,随后进行四次消息交换:

  1. AP 向客户端提供 ANonce 等信息。
  2. 客户端派生 PTK,发回 SNonce 和 MIC。
  3. AP 派生 PTK 并提供 GTK 等信息,消息包含 MIC。
  4. 客户端确认,双方安装相关密钥,图中 802.1X 状态转为允许通信。

离线猜测利用捕获中的 nonce、地址、EAPOL/MIC 等验证材料判断候选是否正确。MIC 是完整性校验,不是“可直接读出的明文密码”;仅有任意无线流量不能保证可以破解。

13.2 旧转换方法:理解格式,不混用模式

课程先安装 hashcat-utils 并转换为历史 hccapx 格式:

git clone https://github.com/hashcat/hashcat-utils.git
cd hashcat-utils/src
make
./cap2hccapx.bin
./cap2hccapx.bin corp_capture1-01.cap mic_to_crack.hccapx

前置是 Git、Make 和可用编译环境;无参数运行查看用法,然后提供输入捕获与输出文件。示例写出 8 个握手材料,不代表任意捕获都包含有效握手。

格式兼容提醒:原页随后把 ​.hccapx​ 文件与 ​-m 22000​ 放在一起,又说明旧 ​2500​ 已弃用,存在新旧示例混用。不要仅改扩展名或模式编号就认为完成转换。下文用课程也已介绍的 hcxpcapngtool 重新生成 22000 对应输入,避免把旧二进制格式当新文本格式。

13.3 PMKID:另一种验证材料

​

 

‍PMKID 生成关系:PMK、PMK Name、AP MAC 和客户端 MAC 输入 HMAC-SHA1-128

​

图中的计算关系为 ​HMAC-SHA1-128(PMK, "PMK Name" || MAC_AP || MAC_STA)​。它将 PMK 与 AP/客户端地址联系起来,提供另一种候选验证途径。课程指出,在支持所述机制的 WPA/WPA2-PSK 场景下,不必以完整四次握手或使已有客户端断线作为同一前置条件;不能推导为任意 AP 都会提供可用 PMKID。

图对“WiFi Password (PMK)”的标注较简化;不要把图中文字直接理解为 PMK 就是可读的 Wi-Fi 明文密码。本章不另展开未给出的密钥派生实现。

13.4 hcxtools 首次准备与统一转换流程

课程给出的包管理器安装:

sudo apt install hcxtools
hcxpcapngtool -h
hcxpcapngtool cracking_pmkid.cap -o pmkidhash_corp
hashcat -a 0 -m 22000 pmkidhash_corp "$WORDLIST"

​-o​ 输出 22000 可用哈希文件。原页帮助输出已说明这一点,并展示转换时产生 PMKID/EAPOL 材料;转换成功后才交给 Hashcat。文件名可保留课程名字,但文件内容必须是实际转换得到的新格式,而不是把原页旧四字段哈希文本照抄进去。

课程链接的 hcxtools README说明以 Linux 为环境,源码安装可 ​git clone​、进入目录、​make​,再由具有安装权限的用户 ​make install​;要求匹配相应编译依赖,当前源码要求与课程旧版本不同,不假定裸编译能在任意系统成功。包安装不是获取握手的过程,hcxtools 本身也不是负责破解 PSK 的工具。

验证顺序:查看转换工具报告是否提取有效材料 → 确认 Hashcat 接受格式 → 查看恢复结果。官方相关文档推荐 ​22000/22001​ 而非已弃用的 ​2500/16800​ 系列;旧 ​hcxpcaptool -z​ 仅作为课程历史方法,不与新流程混写。

原页有一次字典路径写为 ​.tar.gz​;这里统一使用第 4 节的纯文本 ​rockyou.txt​,不把归档包当作已经准备好的逐行字典。课程演示恢复值只是已知实验结果,不用作技能评估答案。在线转换服务意味着上传捕获材料,本笔记不执行此操作。

14. 技能评估:整合方法,而非抄答案

课程小节

场景是协助同事完成 Inlanefreight 的授权评估:逐次恢复不同材料中的密码,为后续步骤提供条件。该节没有正文教学图片,不把页面的 Pwnbox 启动区域当教学截图。

阶段 提供的材料/背景 应用本章方法 SQL 注入后 未标注类型的哈希 先按格式、来源识别;对照示例哈希再选择模式 已进入内网 Responder 获得的 NetNTLMv2,所述 Relay 未成功 使用完整响应材料和对应模式,先字典再有针对性扩展 Kerberoasting 后 etype 23 的 TGS;账号在一台服务器的本地管理员组 确认票据前缀/类型,结合规则、字典、掩码调整候选 服务器材料 ​DCC2DCC2DCC210240#backup_admin#...​ 保留用户名及格式,采用 DCC2 模式;预期成本较高 域级材料 NTDS 中多条用户密码哈希 批量恢复并分析密码复用;题目要求统计重复出现五次的明文

这里保留材料类型和决策顺序,不复制数千字符票据,也不提供答案。原页对系统材料获取位置的叙述是场景概述,不将其当作 SAM/DCC2 的完整取证指南。

可按下列检查表完成自己的练习:

  1. 每份输入单独保存,记录完整格式与来源,不把不同模式混入同一任务。
  2. 检查模式与格式,先测试高概率字典。
  3. 根据已知政策或恢复出的词形选择组合、混合、掩码和规则。
  4. 对慢速材料先缩小候选范围,比较进度与成本,不无限增加随机规则。
  5. 汇总恢复结果并按题意统计;确保“出现次数”统计的是目标明文,不是候选生成次数。

课程提示可以通过多种字典和方法挑战该 NTDS 练习的 100% 恢复,但这不是现实中所有哈希可破解的保证。Hashcat 安装、环境和首次参数选择回看第 4 节;相关 Responder/票据/数据库获取步骤本章未展开,不自行添加教程。

复习与交付说明

关键自检:​-m​ 与 ​-a​ 是否分清?候选的前后位置是否正确?规则预览是否生成目标词形?盐、用户名、版本字段是否保留?文件提取输出是否已转成 Hashcat 要求的输入?旧无线格式是否误配新模式?

本章共 14 节,逐节核查正文和教学视觉内容,保留第 13 节两张必要原理图;其他节的终端演示是网页文本代码块,已归纳成命令与结果判断,不制造不存在的截图。安装及实例均未在本次运行验证;报告只验证笔记结构、覆盖记录和图片链接,不保证任意硬件/软件版本命令兼容。旧的一节未完成草稿保留作为历史文件,以本整章文件为准。

avatar

Zybaxy918039

书本,学术,网安之间反复横跳的业余爱好者,目前在自学计算机网络和AI相关知识

RECOMMENDED

HTB Academy:使用 Nmap 进行网络枚举

2026-09-19 22:17:09

HTB Academy:信息收集-网络版(Web Reconnaissance)学习笔记

2026-09-19 22:22:34

HTB Academy:Footprinting(足迹收集)

2026-09-20 12:23:20

Table of Contents