云计算百科
云计算领域专业知识百科平台

Hashcat 新手教学:从安装到第一次真实破解

Hashcat 是开源免费的密码恢复与审计工具,也是目前跑得最快的密码破解程序之一。用法很直接:你给它哈希和字典,它把候选词逐个算成哈希去比对,对上了就把原密码打出来。整个过程离线进行,不用连目标服务。下面按本机 Kali 上的实测走一遍(hashcat v7.1.2):安装、三类核心参数、第一次真实破解、读懂结果文件。

只对你自己拥有或获得授权的哈希使用。破解别人的密码哈希属于违法。

一、Hashcat 到底是什么

Hashcat 开源、免费,官网是 https://hashcat.net/hashcat/ 。它能快起来的原因不复杂:算哈希和比对这两步可以并行,交给硬件去堆就行。

上手其实只要抓住三件事,后面所有命令都是这三件事的组合。

  • Hash 模式(-m):每种哈希格式对应一个编号。MD5 是 -m 0,SHA1 是 -m 100,Linux /etc/shadow 里常见的 sha512crypt 是 -m 1800,官方支持 300 多种。编号记不住就用 hashcat -hh 查,hashcat –example-hashes 能看到每种格式的示例哈希。
  • 攻击模式(-a):决定候选词怎么生成。
  • 规则(-r):给字典再加一层变形,比如首字母大写、末尾补个 1、把整个字符串反过来。一个规则文件能让一份字典变出成百上千种候选,Kali 自带一批 *.rule。

攻击模式的对照表在下面。前期真正用得上的其实只有 0、3、6、7 这几个。

-a名称思路例子
0 Straight(字典攻击) 逐条读字典 字典里一句试一句
1 Combination 两本字典两两拼接 "admin" + "123456"
3 Brute-force(掩码攻击) 按字符模板穷举 ?l?l?d?d?d = 小字母+小字母+3位数字
6 Hybrid Wordlist + Mask 字典 + 掩码 qwerty + ?d?d = qwerty12
7 Hybrid Mask + Wordlist 掩码 + 字典 ?d?d + qwerty = 12qwerty
9 Association 单词和哈希成对喂入 每个用户配一个候选词

还有一件事新手最好早点知道:同一台机器上,GPU 版 hashcat 比 CPU 快成百上千倍。虚拟机里通常借不到独显,速度会慢不少,学命令、跑小任务是够用的。真要大字典作业,去装了显卡的真机上跑。

二、安装(以 Kali 为例)

Kali 自带 hashcat,apt 一条命令就装完。安装这一步最省事,麻烦在后面:装完之后有没有可用的计算后端(OpenCL / CUDA / HIP)。

# Kali 检查/安装
hashcat –version
sudo apt update && sudo apt install -y hashcat

非 Debian 系统,或者想用最新版

去官方下载页 https://hashcat.net/hashcat/ 取二进制包。下面以 7.1.2 为例,实际版本号请到下载页确认。

wget https://hashcat.net/files/hashcat-7.1.2.tar.gz
tar -xzf hashcat-7.1.2.tar.gz
cd hashcat-7.1.2 && ./hashcat –version

装完先查后端

hashcat -I

有输出就可以直接开跑。如果报 CL_PLATFORM_NOT_FOUND_KHR 或者 No OpenCL…,看第七节的坑一。

三、常用参数速查

定方向的三件套(几乎每条命令都要给)

参数含义示例
-m NUM 哈希格式编号(-hh 查全部,–example-hashes 看示例) -m 0=MD5,-m 1000=NTLM,-m 1800=sha512crypt
-a NUM 攻击模式 -a 3 掩码攻击
HASH 哈希:单个直接写,多个写进文件再引用 hashcat -m 0 hash.txt wordlist.txt

输入候选词

参数含义示例
wordlist 字典文件路径(一行一个候选词) /usr/share/wordlists/rockyou.txt
?l ?u ?d ?s ?a ?b 掩码字符集:小写/大写/数字/符号/全可打印(94)/0-255 包括不可见 ?l?l?l?d?d = 5 位"3个字母+2个数字"
-r FILE 规则文件(变形字典) -r dive.rule
–increment 掩码可变长(?l?d?d 从 3 位试到 max) -i –increment-min=1 –increment-max=6

控制机器与输出

参数含义示例
-w num 负载档位 1-4(4 最满,本机温度/风扇会猛) -w 3
-o FILE 明文结果写入文件 -o cracked.txt
–force 关掉安全自检硬跑(会绕错误检测,能不用就不用,仅本机调试用)
–show 只显示已破解的历史(不重跑) hashcat -m 0 hashes –show
–left 只显示还没破出来的哈希
-b 跑基准测试,看本机速度 hashcat -b -m 0
–remove 破出一个就从文件里删掉这个哈希

四、实战一:跑通第一次字典攻击

先建一个实验目录,把材料放进去。

mkdir -p /tmp/hashlab
# 三个已知明文的 MD5(示例值,你可以自己改)
printf '482c811da5d5b4bc6d497ffa98491e38
d8578edf8458ce06fbc5bb76a58c5ca4
5f4dcc3b5aa765d61d8327deb882cf99
'
> /tmp/hashlab/t.md5
# 自制一本小字典
printf 'password
123456
qwerty
letmein
monkey
'
> /tmp/hashlab/words.txt

三个哈希对应的明文分别是 password123、qwerty、password。其中 password123 我故意没有放进字典,等会儿看输出你就明白为什么。

然后跑第一次字典攻击。

hashcat -m 0 -a 0 -D 1 –force /tmp/hashlab/t.md5 /tmp/hashlab/words.txt

参数逐个说:

  • -m 0:MD5 格式。
  • -a 0:字典攻击。
  • -D 1:指定用 CPU。-D 2 是 GPU,虚拟机里一般只有 CPU 可用。
  • –force:本机 CPU 后端自检报"这是不稳定的组合"时允许继续。只在调试和学习时用,正式跑别带。
  • 末尾两个参数:哈希文件、字典文件。

真实输出(节选):

hashcat (v7.1.2) starting

You have enabled –force to bypass dangerous warnings and errors!

Initializing backend runtimes. Please be patient…Initialized backend runtimes
* Device #01: cpu-haswell-AMD Ryzen 7 5800H with Radeon Graphics, 1468/2937 MB (1468 MB allocatable), 4MCU

5f4dcc3b5aa765d61d8327deb882cf99:password
d8578edf8458ce06fbc5bb76a58c5ca4:qwerty

Status………..: Exhausted
Recovered……..: 2/3 (66.67%) Digests (total), 2/3 (66.67%) Digests (new)
Progress………: 5/5 (100.00%)

这一屏怎么读:

输出含义
5f4dcc3b…:password 破出来的结果行:左边是哈希,右边才是明文。屏幕上只要出现 hash:plain 就是收获
Status………..: Exhausted 字典被完整烧完了,所有候选都试过
Recovered……..: 2/3 (66.67%) 3 个目标破出 2 个。第三个 password123 不在字典里,正常
Progress………: 5/5 (100.00%) 5 条候选,全部试过

破出来的两条里面没有 password123,这是新手最该看的一课。它是人群里最常用的密码之一,可我的五行小字典没收它,机器算得再快也碰不到。字典攻击的成败几乎全在字典上,功夫该花在候选质量,而不是多等几分钟。

五、实战二:破解一个"不认识"的 MD5

实战一是知道明文、验证流程。这一节换成真实场景:别人递给你一个文件,里面只有一行。

e10adc3949ba59abbe56e057f20f883e

没有别的前提,目标就是找出明文。

第 1 步:从哈希长相判断格式

哈希长相大概率是对应 -m
32 位小写十六进制(0-9a-f) MD5 -m 0
40 位小写十六进制 SHA1 -m 100
64 位小写十六进制 SHA256 -m 1400
带 $/盐段结构(如 $6$salt$…) 带"盐"的系统哈希(如 sha512crypt) -m 1800 等

这个哈希是 32 位纯十六进制,按经验先当 MD5 试(-m 0)。模式选错不会报错,表现是跑完 0 命中,用这种办法试错成本很低。不放心的话,把长相拿去 hashcat –example-hashes 对一下官方示例。

第 2 步:上大字典

mkdir -p /tmp/hashlab && printf 'e10adc3949ba59abbe56e057f20f883e
'
> /tmp/hashlab/unknown.md5
hashcat -m 0 -a 0 -D 1 –force /tmp/hashlab/unknown.md5 /usr/share/wordlists/rockyou.txt

真实输出(节选):

e10adc3949ba59abbe56e057f20f883e:123456

Status………..: Cracked
Recovered……..: 1/1 (100.00%) Digests (total), 1/1 (100.00%) Digests (new)
Progress………: 4096/14344385 (0.03%)
Speed.#01……..: 97591 H/s (0.52ms)

破出来了,明文是 123456,事先没人告诉过我。

这一屏的重点在 Progress:第 4096 个候选词就命中,1400 多万行的字典只走了 0.03%。这不是运气。最弱的密码全挤在大字典的头部,人类用得最多的前一百个弱口令,任何一本大字典都会收录。

第 3 步:字典没结果时用掩码

换一个同样没人告诉我明文的哈希 c33367701511b4f6020ec61ded352059。假设它出现在某个库里,但字典跑完 0 命中。此时从长相再找规律:如果怀疑是纯数字的验证码式密码,就让掩码从短到长逐级穷举。

printf 'c33367701511b4f6020ec61ded352059
'
> /tmp/hashlab/m1.md5
hashcat –potfile-path=/tmp/hashlab/my.pot -m 0 -a 3 -D 1 \\
–increment –increment-min=4 –increment-max=6 \\
/tmp/hashlab/m1.md5 '?d?d?d?d?d?d' -o /tmp/hashlab/cracked.txt

  • –increment:掩码可变长,从 4 位试到 6 位。阿拉伯数字密码常按位数分档。
  • ?d?d?d?d?d?d:6 个数字占位符,–increment 会自动截取前 min 位逐级加长。
  • -o cracked.txt:结果落盘。
  • –potfile-path:把这次的已破记录存到自己的文件里。potfile 的机制见坑三。

真实输出(三段 Status 就是三个位数分阶段跑):

Status………..: Exhausted
Progress………: 10000/10000 (100.00%) ← 4 位全试完:无果

Status………..: Exhausted
Progress………: 100000/100000 (100.00%) ← 5 位全试完:无果

Status………..: Cracked
c33367701511b4f6020ec61ded352059:654321 ← 6 位命中:明文 654321
Progress………: 1000000/1000000 (100.00%)

把三条路线摆在一起,"破解未知密码"的性价比排序大概是:

大字典(覆盖弱口令) >>> 字典 + 规则(覆盖习惯变体) >> 掩码 + 数字段(覆盖验证码式)

纯数字全 6 位是一百万个候选,CPU 十几秒到几十秒就完。数字、字母、符号混着来 10 位,策略空间就是天文数字,CPU 在物理层面算不动。也正因为这样,密码强度那句话讲的还是长度乘多样性。

第 4 步:把明文留住

cat /tmp/hashlab/cracked.txt # 落盘文件里
hashcat -m 0 /tmp/hashlab/m1.md5 –show # potfile 里也能调出
hashcat -m 0 /tmp/hashlab/m1.md5 –left # 还没破的哈希才会出现

已破记录默认写在 ~/.local/share/hashcat/hashcat.potfile。它是 hashcat 的账本:破出一个记一笔,重跑时自动跳过已破的哈希,不重复烧机器。本文为了演示能复现,用 –potfile-path 把账本单独放到 /tmp;平时用默认路径就行。

第 5 步:不用字典能不能破

能。第 3 步的掩码攻击本来就是零字典:候选词全由 hashcat 按字符模板自己生成,字典一个字节都没碰。这里再补一个字母形态的实测。

先看掩码用到的内置字符集。

字符集含义
?d 0-9 数字
?l / ?u 小写 / 大写字母
?s 符号
?a 全部 94 个可打印字符
-1 ?l?d 自定义字符集:把小写和数字合成一套新集合,如 ?1?1?1?1?1?1

实测目标是随手拿的 MD5 d6ca3fd0c3a3b462ff2b83436dda495e,同样事先没人知道明文,也没喂任何字典。

printf 'd6ca3fd0c3a3b462ff2b83436dda495e
'
> /tmp/hashlab/demo_l.md5
hashcat –potfile-path=/tmp/hashlab/pot2 -m 0 -a 3 -D 1 \\
–increment –increment-min=1 –increment-max=4 -w 2 \\
/tmp/hashlab/demo_l.md5 '?l?l?l?l'

真实输出:

Progress………: 26/26 (100.00%) ← 1 位全试完(26 种)
Progress………: 676/676 (100.00%) ← 2 位全试完(676 种)
Progress………: 17576/17576 (100.00%) ← 3 位全试完(17,576 种)
d6ca3fd0c3a3b462ff2b83436dda495e:kali ← 4 位命中:明文 kali
Progress………: 65536/456976 (14.34%)

机器自己算出了 kali,纯算力,零字典。加上第 3 步的 654321,两种字符形态的零字典爆破都实测通过。

可行性分界线(本机 CPU 后端约 9.7 万 H/s,MD5):

掩码形态组合数本机大约耗时
?d?d?d?d?d?d(6 位数字) 100 万 ~10 秒 ✅
?l?l?l?l(4 位小写) 46 万 ~5 秒 ✅
?l?l?l?l?l?l(6 位小写) 3 亿 ~50 分钟 ⚠️
?l?l?l?l?l?l?l?l(8 位小写) 2090 亿 天级 ⚠️
?a?a?a?a?d?d?d?d(4 字母 + 4 数字,结构已知) 78 亿 ~1 天 ⚠️
乱猜 10 位(全字符) 6.6 千万亿 物理层面无解 ❌

判断纯爆破能不能成,看两件事:密码够短或者形态已知,算力够硬。知道"前 3 位字母、后 4 位数字"这种结构,掩码只扫这个结构的候选;盲目全字符穷举没有意义。GPU 跑 MD5 能到数十亿 H/s,上面那张表每一行除以两三万倍就全绿了。虚拟机 CPU 先把能跑的形态玩透,速度的事留给真机。

三者的关系可以这么记:字典吃人类的偷懒,规则吃变体巧合,掩码吃结构已知加算力。三样都失败,剩下的就是自带熵的长随机密码。它既解释了密码强度为什么重要,也标出了这类工具能走到哪一步。

六、下一层:掩码、规则、已破记录(抄就能用)

# ① 只对没破出来的继续尝试(第二次跑更省时间)
hashcat -m 0 /tmp/hashlab/t.md5 –left -a 0 words.txt

# ② 掩码攻击:猜"6位的、前3字母后3数字"的密码形态
hashcat -m 0 -a 3 /tmp/hashlab/t.md5 ?l?l?l?d?d?d

# ③ 字典 + 规则变形(要 Kali 自带的大字典时先解压 rockyou)
gzip -d /usr/share/wordlists/rockyou.txt.gz
hashcat -m 0 -a 0 /tmp/hashlab/t.md5 /usr/share/wordlists/rockyou.txt -r dive.rule -o cracked.txt

# ④ 探测本机算力上限(决定你敢不敢跑长掩码)
hashcat -b -m 0

# ⑤ 查结果(不重跑,只看已破出来哪些)
hashcat -m 0 /tmp/hashlab/t.md5 –show

七、新手常踩的五个坑

  • 坑一:报 No OpenCL, HIP or CUDA compatible platform found。Kali 虚拟机默认没有算力后端,装个 CPU 版后端就能跑,本机实测有效:

    sudo apt install -y pocl-opencl-icd
    hashcat -I # 之后再查,能看到 Device

    有独显的物理主机才需要装 NVIDIA CUDA 或者 AMD ROCm。虚拟机里独显直通很麻烦,先用 PoCL 把命令练熟。

  • 坑二:屏幕上弹出 [s]tatus [p]ause…,上面还有一句 “The wordlist or mask that you are using is too small”。这不是报错,只是候选太少时的一句提醒,怕你白等。按 s 看状态,按 f 直接收工,或者换本大字典。

  • 坑三:第二次跑同一个哈希,“怎么没跑就结束了”。hashcat 把已破的哈希记在 ~/.local/share/hashcat/hashcat.potfile,重跑会自动跳过。想从零再演示一遍,删掉这个文件,或者先 –show 看记录再决定。

  • 坑四:把 –force 当日常开瓶器。它会绕过"你这设备可能算错结果"的自检警告。跑真值之前先把后端环境调好,别让 –force 把错误结果静默吞掉。

  • 坑五:卡在 Status: Running… 0 H/s。多半是掩码太长(CPU 跑 8 位全字符就是天文数字)、格式选错(把 sha1 喂给了 -m 0),或者字典还是 gzip 没解压(先 gzip -d)。先 hashcat -b 摸一摸本机上限,再决定掩码长度。

八、收尾

Hashcat 的定位可以这么说:知道锁孔形状(哈希格式)之后,高速试钥匙的机器。你要定的只有三件事,-m 是哪种哈希,-a 怎么生成候选,喂什么哈希和字典。剩下的时间看输出里的 hash:plain 行。

第一次跑通的关键,是读懂实战一那屏输出。字典里没它,等于没钥匙,这句比任何参数都实在。功夫花在候选质量上,别花在等待时间上。

最后再说一遍合规:Hashcat 只能用在你自己拥有、或者拿到明确授权的哈希和系统上。审计自己的密码强度是正途,动别人的系统就是违法。

赞(0)
未经允许不得转载:网硕互联帮助中心 » Hashcat 新手教学:从安装到第一次真实破解
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!