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文件中,可以通过此文件查看已破解的密码。

也可以通过--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指定最大长度。

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

在设置了长度为8时,密码长度明显减少到了 $26^8 = 208827064576$ 次
恢复上一次的破解状态。
方法有两种:
第一种在在交互界面中使用[p]ause进行暂停。

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

第二种需要事先指定会话。
首先需要在破解时指定会话--session=xxx,默认的.restore文件存放在.hashcat/session/目录下,如果需要在特殊位置存放缓存文件,需要增加--restore-file-path参数。
.restore文件为会话缓存文件,存放的是会话最后一次的破解状态,包括会话的执行命令、会话使用的目录、已使用的密码偏移等等。
hashcat会根据破解的进度自动保存restore文件!
正常退出,在交互界面使用[q]uit命令,则会保存最后一次的破解状态。如果异常退出或者强制退出Ctrl + c,则.restore文件将不记录最后一次的状态。

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文件中。

存储完后,通过下面命令可以恢复绘画任务之前的状态。
1
2
  | # 前两个参数必须要填,如果之前是指定目录存放restore文件,则第三个文件也必须要设置
hashcat  --session helloworld --restore --restore-file-path=./restore/helloword.restore
  | 

可以看见,任务从上一次结束的地方开始进行了!!
参考
hashcat wiki
hashcat restore
hashcat use
Hybrid Wordlist + Mask
Author
Alfons
LastMod
2018-09-28
License
Creative Commons BY-NC-ND 3.0