hashcat.png

无聊中,就把hashcat的官方文档稍微翻译了下,方便初学的朋友查看。至于oclhashcat,它是一个离线的hash密码破解工具,与hashcat不同,它支持GPU破解,速度更快,并且支持更多的hash算法!

GPU驱动要求:

AMD users require AMD drivers 14.9 or later (recommended 15.12 exact)

Intel users require Intel OpenCL Runtime 14.2 or later (recommended 16.1 or later)

NVidia users require NVidia drivers 346.59 or later (recommended 367.27 or later)

优点:

世界上最快的密码破解软件,不过不严谨测试(虚拟里面使用CPU和物理机使用GPU对比:速度快了244倍) (来自官方文档…)

免费,开源

跨系统 (Linux, Windows and OSX)

跨平台 (CPU, GPU, DSP, FPGA, etc., everything that comes with an OpenCL runtime)

支持多种hash算法(可在下面的参数手册查看,多到超出想象…) (可在同时破解多种hash)

支持多种驱动器 (可在同一系统多种设备中生效)

支持多种驱动器类型 (可在同一系统混合使用多种不同的设备)

支持分布式破解

支持暂停/重新开始

支持会话与恢复

支持从密码文件读取hash值或是直接输入

支持16进制字符集(包括盐)

支持自动性能调优

支持markov-chains

內建标杆测试

集成热watchdog

等等

总之,是离线破解单向密码的好工具(第一选择是网络,但是网上不支持一些“小众”的密码类型,就只能使用它来碰碰运气咯)!

它支持的攻击模式:

Brute-Force Attack

所有攻击中最简单的一种,指定字符集和密码长度范围即可。

Mask Attack

尝试所有被给的来自键盘空间的字符组合(就像是暴力破解,只是需要指定得更加清楚)

相对于Brute-Force的优点

他不像传统的暴力破解,减少了排列的可能性,例如破解这个密码:Julia1984

在传统的暴力破解中,它是9位,每一位可能是大小写或是数字,也就是 “mixalpha-numeric”字符集。于是可迭代出62^9 (13.537.086.546.263.552)种可能,以100M/s的速率破解,需要超过4年的时间。

但是在mask attack攻击中,因为传统都只是首字母大写,为了缩短长度,可以在每一位指定特定类型的字符,于是就是52*26*26*26*26*10*10*10*10 (237.627.520.000)种组合,同样的速度就只需要40分钟。没有缺点。。。

Masks(掩码)

每一个密码位都需要一个掩码占位,例如密码有8位,就需要8个掩码(就像正则表达式里面的通配符)。

一个mask是一个被配置给密码破解引擎使用的占位字符串。

这个占位符可以是定制的字符集,內建字符集,或者是纯字符(字符本身)

一个变量(跟在一个?后面代表一个字符集),例如內建的(?l,?u,?s,?a,?d)和定制的(?1,?2,?3,?4)

注意,如果想要表示?这个纯字符,就需要使用??

输出

由于反向算法优化,输出将是如下这种顺序(就是并非简单的字母序):

 

aaaaaaaa

aaaabaaa

aaaacaaa

.

.

.

aaaaxzzz

aaaayzzz

aaaazzzz

baaaaaaa

baaabaaa

baaacaaa

.

.

.

baaaxzzz

baaayzzz

baaazzzz

.

.

.

zzzzzzzz

內建字符集

 

?l = abcdefghijklmnopqrstuvwxyz

?u = ABCDEFGHIJKLMNOPQRSTUVWXYZ

?d = 0123456789

?s = ?space?!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~

?a = ?l?u?d?s

?b = 0x00 - 0xff

自定义字符集

所有的hashcat衍生版都有四个命令行参数用来自定义字符集

 

--custom-charset1=CS

--custom-charset2=CS

--custom-charset3=CS

--custom-charset4=CS

你可以直接在命令行中使用-1,-2,-3,-4来指定字符集并且直接使用?1,?2,?3,?4来调用,也可以在配置文件(***.hcchr)中指定。在指定时,可以直接使用內建字符集组合,也可以使用纯字符组合甚至是混合的组合。

例如

指定?1代表的字符时,可以使用下面这些方式(他们效果一样):

 

-1 abcdefghijklmnopqrstuvwxyz0123456789

-1 abcdefghijklmnopqrstuvwxyz?d

-1 ?l0123456789

-1 ?l?d

-1 loweralpha_numeric.hcchr # file that contains alldigits + chars (abcdefghijklmnopqrstuvwxyz0123456789)

下面是在指定“0123456789abcdef”这个字符集时:

-1 ?dabcdef

下面是指定7位ASCII码全字符(“mixalpha-numeric-all-space”)时:

-1 ?l?d?s?u

下面是指定为特殊语言字符集时:

-1 charsets/special/Russian/ru_ISO-8859-5-special.hcchr

例如

下面的命令是创建如下的密码(-a 3表示暴力破解攻击):

 

command: -a 3 ?l?l?l?l?l?l?l?l

keyspace: aaaaaaaa - zzzzzzzz

command: -a 3 -1 ?l?d ?1?1?1?1?1

keyspace: aaaaa - 99999

command: -a 3 password?d

keyspace: password0 - password9

command: -a 3 -1 ?l?u ?1?l?l?l?l?l19?d?d

keyspace: aaaaaa1900 - Zzzzzz1999

command: -a 3 -1 ?dabcdef -2 ?l?u ?1?1?2?2?2?2?2

keyspace: 00aaaaa - ffZZZZZ

command: -a 3 -1 efghijklmnop ?1?1?1

keyspace: eee - ppp

密码长度增量

默认情况下,使用8位的掩码只能破解8位的密码,不能破解低于8位更不能破解高于8位的,但可以使用increment来实现破解低于8位的(他可以设置最小位数和最大位数,但最大位数不能超过掩码位数)

 

?l

?l?l

?l?l?l

?l?l?l?l

?l?l?l?l?l

?l?l?l?l?l?l

?l?l?l?l?l?l?l

?l?l?l?l?l?l?l?l

字符集文件

可以将常用的字符集保存为***.hcchr格式的纯文本文件,以后就可以直接调用(像上面例子中使用的charsets/special/Russian/ru_ISO-8859-5-special.hcchr一样)回顾用法:

-1 charsets/standard/German/de_cp1252.hcchr

(可以使用iconv或类似的工具将文件转换到指定语言编码 )

掩码文件

同样可以将掩码直接保存为一个文件,以后使用时直接调用,它是一行一行的纯文本文件,以.hcmask为扩展名,格式如下:

 [?1,][?2,][?3,][?4,]mask

本来在命令行中,我们要使用自定义的字符集,需要使用如下格式:

-1 ?l?s -2 ?dhjg -3 ?u?d -4 ?s987 ?1?2?3?4?s?l

那么在掩码文件中就可以直接这样写:

?l?s,?dhjg,?u?d,?s987, ?1?2?3?4?s?l

当然,在没有使用自定义字符集时就不需要前面的部分了,直接写掩码即可,使用方法如下:

-a 3 hash.txt mask_file.hcmask

其他:

- 可以在每一行的开头使用#来注释掉那一行,可以写入多行,每一行互相独立
- 当掩码中存在 ,(逗号)时,需要\,来转义
- 同样,掩码文件也可以支持增量参数

Example

下面是些例子,看看能不能看懂是什么意思

 

?d?l,test?1?1?1

abcdef,0123,ABC,789,?3?3?3?1?1?1?1?2?2?4?4?4?4

company?d?d?d?d?d

?l?l?l?l?d?d?d?d?d?d

16进制字符

可以使用“–hex-charset”参数

Combinator Attack

给定两个字典文件,他们将会组合成一个字典来进行破解:

./hashcat64.bin -m 0 -a 1 hash.txt dict1.txt dict2.txt

这里例如

Dict1.txt:


 

Hia

Hiaa

Hiaaa

Dict2.txt:

 

Bb

Cc

结果为:

 

HiaBb

HiaCc

HiaaBb

HiaaCc

HiaaaBb

HiaaaCc

可以使用参数来对某个字典进行“在开始出添加字符”,“在结尾处添加字符”的操作:

 

 -j,  --rule-left=RULE              左边添加

  -k,  --rule-right=RULE             右边添加

Dictionary Attack

即straight mode,使用字典攻击

Hybrid Attack

混合攻击,即用暴力攻击来修饰字典文件,分为:

mask + dict    即掩码在字典前
dict + mask    掩码在字典后

例如

字典文件是example.dict:

 

password

hello

命令为:

$ ... -a 6 example.dict ?d?d?d?d

生成的字典是:

 

password0000

password0001

password0002

.

.

.

password9999

hello0000

hello0001

hello0002

.

.

.

hello9999

另一种情况,命令是:

$ ... -a 7 ?d?d?d?d example.dict

生成的字典是:

 

0000password

0001password

0002password

.

.

.

9999password

0000hello

0001hello

0002hello

.

.

.

9999hello

(可以使用规则模式来创建混合攻击)

Toggle-Case Attack

尝试所有的大小写组合:

例如pass1234会产生:

 

pass1234

Pass1234

pAss1234

PAss1234

paSs1234

PaSs1234

pASs1234

PASs1234

pasS1234

PasS1234

pAsS1234

PAsS1234

paSS1234

PaSS1234

pASS1234

PASS1234

Rule-based Attack

这是功能最强大,也最复杂的一种模式,就像变成一样设置密码规则!他的语法很多部分和john和passwordPro互通,这里是语法:

1.png

2.png

  • * 当N超过9就用A-Z表示
  • + 表示只在hashcat里面有效
  • # 版本升级后出现的:oclHashcat v1.37 → v1.38 and hashcat v0.51 → v0.52

下面是拒绝规则,即密码符合规则才执行,否则跳过:

3.png

这是hashcat特有的语法:

4.png

生成规则的方式:

使用专门的软件:Using maskprocessor to create rules.

使用随机规则:

规则文件里面已有一些规则,使用

–generate-rules=NUM   创造NUM个随机的规则

--generate-rules-func-min=NUM 指定规则中函数的最小个数(默认一个)
--generate-rules-func-max=NUM  指定规则中函数的最大个数(默认四个)

下面是命令帮助文件(若有疑问请查阅英文原版):

40980987626.jpg

3098098476.jpg

下面使用几个例子:

cudaHashcat64.exe -a 3 -m 1000b4b9b02e6f09a9bd760f388b67351e2b ?a?l?l?l?l?l?l

ntlm.png

可以用来破解WPA、WPA2的密码:

首先对aircrack等抓下来的包含握手包的***.cap文件进行清洗(可使用在线清洗,最简单,不放心可以本地清洗,也有脚本。。。)得到***.hccap包

 cudaHashcat64.exe -m 2500 -a 0 C:\Users\Beta\Desktop\hashcat.hccap G:\渗透工具\密码破解\WPA破解工具\字典\WPA字典\WPA.txt

Clipboard Image.png

显示破解失败…955Mb的字典,跑完用了32分钟。其他的类似就不做示例了。

如果想要做练习,可以使用官方提供的测试hash: https://hashcat.net/wiki/doku.php?id=example_hashes

如果使用过程中遇到什么问题可以在这里看看有没有说明:https://hashcat.net/wiki/doku.php?id=frequently_asked_questions

* 参考来源:hashcat,Beta_Mao编译