hashcat是目前世界上最快的密码破解工具,能够破译众多类型的密码,可以使用CPU,也可以使用GPU作为计算单元。

破解基础命令

选项描述使用
-m设置待破解文件类型,WPA/WPA2类型为2500-m 2500
-a破解模式
–runtime指定程序运行时间X,单位秒–runtime=X
–session指定一个特殊的hashcat会话名称–session=mysession
–restore从restore文件中恢复会话状态
–restore-disable会话时不使用restore文件
–restore-file-path指定特殊的restore文件路径,默认路径在.hashcat/session/–restore-file-path=path
–outfile破解出的hash存放路径-o outfile.txt
–show展示破解文件中已破解的hash
–left展示破解文件中未破解出的hash
–increment设置自动变长模式开关,密码长度由用户指定,不能在字典破解模式下
–increment-min最短密码长度–increment-min=8
–increment-max最长密码长度–increment-max=13
–cpu-affinity使用CPU破解时,使用特定的CPU进行破解–cpu-affinity=1,2
–segment-size使用字典破解时,字典在内存中的缓存大小,单位MB–segment-size=1024
–gpu-temp-abort中断破解,当GPU达到此温度–gpu-temp-abort=100
–skip跳过字典前面 X 个密码–skip X
–limit只使用字典前 X 个密码–limit X
–status设置自动刷新hashcat状态开关
–status-timer设置自动刷新时间 X–status-timer=X

hashcat启动方式为

1
2
3
hashcat -a 0 -m 2500 xxxx.hccapx dict1 dict2    # 字典破解模式,普通启动
hashcat -a 3 -m 2500 --session=xxxx xxxx.hccapx ?l?l?d?d?d?d?d?d   # 暴力破解模式以会话方式启动
hashcat --session xxxx --restore    # 以会话形式从restore文件中恢复

破解模式

hashcat的破解模式有5种。

1
2
3
4
5
0 | Straight      # 字典破解
1 | Combination   # 组合破解
3 | Brute-force   # 暴力破解
6 | Hybrid Wordlist + Mask  # 字典加掩码破解
7 | Hybrid Mask + Wordlist  # 掩码加字典破解

Straight(字典破解 -a 0)

纯字典破解模式,遍历字典文件中的所有密码,对目标破解文件进行匹配。

1
hashcat -a 0 -m 2500 xxxx.hccapx dict

Combination(组合破解 -a 1)

组合两个字典文件的内容进行破解,只支持两个字典文件密码组合!该模式会将dict1中的密码与dict2中的密码依次组合。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
cat dict1
abc
def
gh

cat dict2
1234
23456

# 组合后需要破解的字典为
abc1234
abc23456
def1234
def23456
gh1234
gh23456

hashcat -a 1 -m 2500 xxxx.hccapx dict1 dict2

组合模式进行破解时,如果子字典内密码个数较多的话,整体的字典数量就十分巨大,造成破解时间成倍增加。

Brute-force(暴力破解 -a 3)

hashcat中自定义了8种默认的字符集。

1
2
3
4
5
6
7
8
l | abcdefghijklmnopqrstuvwxyz      # 全体小写字母
u | ABCDEFGHIJKLMNOPQRSTUVWXYZ      # 全体大写字母
d | 0123456789          # 数字
h | 0123456789abcdef    # 十六进制数字
H | 0123456789ABCDEF    # 十六进制数字大写
s |  !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~   # 符号
a | ?l?u?d?s        # 所有字符集
b | 0x00 - 0xff     # 0-255

同时也提供四个字符,让用户自定义符号使用。

1
2
3
4
 -1, --custom-charset1          | CS   | User-defined charset ?1                              | -1 ?l?d?u
 -2, --custom-charset2          | CS   | User-defined charset ?2                              | -2 ?l?d?s
 -3, --custom-charset3          | CS   | User-defined charset ?3                              |
 -4, --custom-charset4          | CS   | User-defined charset ?4                              |

使用时,组合不同的字符集,破译密码。

1
2
3
4
5
6
# 使用默认字符集
hashcat -a 3 -m 2500 xxxx.hccapx ?l?l?l?l?l?l?l?l  # 密码规则为8位小写字母的组合
hashcat -a 3 -m 2500 xxxx.hccapx ?l?l?l?l?d?d?d?d  # 密码规则为8位,4位小写字母+4位数字的组合

# 使用用户自定义字符集
hashcat -a 3 -m 2500 xxxx.hccapx -1 qwert -2 123456 ?1?1?1?1?2?2?2?2 # 前四位密码为qwert中的组合,后四位密码为12345数字的组合

Hybrid Wordlist + Mask(字典加掩码破解 -a 6)

后两种破解方式结合了字典和规则,与组合模式(-a 1)十分类似。

1
2
3
4
# 假如使用的字典为dict
cat dict
admin
root

假设实际的明文密码为adminer123456,则使用的规则为?l?l?d?d?d?d?d,即可匹配到明文密码。

1
hashcat -a 6 -m 2500 xxxx.hccapx dict1 dict2 dict3 ?l?l?d?d?d?d?d

在这种模式下,可以使用多个字典和规则进行组合。

Hybrid Mask + Wordlist(掩码加字典破解 -a 7)

与字典加掩码模式相反,掩码加字典破解是规则在前,字典在后。

1
hashcat -a 7 -m 2500 xxxx.hccapx ?l?l?d?d?d?d?d dict1 dict2 dict3

Hashcat进阶

pcap包转换为hccapx格式。

三种方式

  • 使用cap2hccapx.bin
  • 使用Aircrack-ng(1.3版本)的-j参数
  • 在线转换

显示已破解的密码。

已经破解出的密码,hashcat会默认保存在.hashcat/hashcat.potfile文件中,可以通过此文件查看已破解的密码。

cat_potfile

也可以通过--show命令查看特定握手包内破解出的AP的密码。也可以通过--left命令查看未破解出的密码。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
$ hashcat -m 2500 helloworld.hccapx --show
c5b769d43cd2c3449c001cb3fd1a666a:0018e7b25200:9cd91730dc8e:helloworld:hello12345

$ hashcat -m 2500 helloworld.hccapx --left
60bdcbb80306cc99b5dd786334edad73:0018e7b25200:9cd91730dc8e:helloworld
c52577dde5a3539890c2393a3f7f8551:0018e7b25200:9cd91730dc8e:helloworld
2394e4c7311821872adc9a8c54503446:0018e7b25200:9cd91730dc8e:helloworld
cba153ab6ee3597e5512dae45ad0ef64:0018e7b25200:9cd91730dc8e:helloworld
812da0113e74622d154d7301679e0481:0018e7b25200:9cd91730dc8e:helloworld
517b035a3a1b1cc29d5abb27aea37b45:0018e7b25200:9cd91730dc8e:helloworld

设置密码长度。

在使用规则进行破解(暴力破解、掩码组合破解)时,可以通过--increment参数激活破解密码长度选项。可以通过--increment-min指定最小长度,通过--increment-max指定最大长度。

increment_not_set

可以看到在未设置长度的情况下,总共需要进行 $26^{10} = 141167095653376$ 次密码尝试。

increment_set_8_9

在设置了长度为8时,密码长度明显减少到了 $26^8 = 208827064576$ 次

恢复上一次的破解状态。

方法有两种:

第一种在在交互界面中使用[p]ause进行暂停。

stdin_pause

如需恢复,则在交互界面中使用[r]esume

restore_resume

第二种需要事先指定会话。

首先需要在破解时指定会话--session=xxx,默认的.restore文件存放在.hashcat/session/目录下,如果需要在特殊位置存放缓存文件,需要增加--restore-file-path参数。

.restore文件为会话缓存文件,存放的是会话最后一次的破解状态,包括会话的执行命令、会话使用的目录、已使用的密码偏移等等。

hashcat会根据破解的进度自动保存restore文件!

正常退出,在交互界面使用[q]uit命令,则会保存最后一次的破解状态。如果异常退出或者强制退出Ctrl + c,则.restore文件将不记录最后一次的状态。

restore_format

1
2
# 启动会话任务helloworld,restore文件存放目录为./restore/helloword.restore
hashcat -a 0 -m 2500 --session helloworld --restore-file-path=./restore/helloword.restore  helloworld.hccapx Top306Million-WPA-probable-v2.txt

在界面输入命令参数q退出会话任务后,会将破解进度信息自动保存到restore文件中。

restore_pause

存储完后,通过下面命令可以恢复绘画任务之前的状态。

1
2
# 前两个参数必须要填,如果之前是指定目录存放restore文件,则第三个文件也必须要设置
hashcat  --session helloworld --restore --restore-file-path=./restore/helloword.restore

restore_resume

可以看见,任务从上一次结束的地方开始进行了!!

参考

hashcat wiki hashcat restore hashcat use Hybrid Wordlist + Mask