Hashcat使用手册——基于规则的攻击 – 作者:DigApis

前面几篇文章中我们已经讲过了hashcat的几种攻击模式,这些攻击模式是我们利用hashcat破解密码的基础。但是在hashcat中还隐藏有一种攻击模式,这也是hashcat中最复杂的攻击方式,即基于规则(rule)的攻击(-a 0 )。hashcat中的规则与字典结合就会发挥出非常惊人的作用。

什么是规则

所谓规则是一种用来产生候选密码的编程语言,规则由多个具有不同功能的函数组成,与正则表达式有相似之处,但是不同于正则表达式。总之,规则是一种非常灵活,方便,且操作性很强的辅助工具。

在规则语法中,不同的字符或符号代表不同的功能,在写规则时,可以根据等待破译的密码的特征,将这些功能进行组合。使用规则最大的好处是:我们可以根据已知的密码特征,写出相应的规则,这些规则可以把字典内容处理成合适的形式。当然利用规则还可以扩充字典内容。

常见规则举例

注:hashcat字典中组成单词的字母从0开始计数,而且是十六进制的形式。

以下是部分常见hashcat规则函数举例。想了解更多hashcat的规则函数,请点这里

函数 功能 规则应用举例 输入 输出
oXY 将位置X处的字符替换成Y o2K digapis diKapis
xNM 从位置N开始删除M个字符 x23 DigAips Dips
iNX 在位置N处插入字符X i2L dIGAPIS dILGAPIS
*XY 交换XY两处的字符 *0A Iloveyou!???? ?loveyou!?I??
yN 重复首部N个字符 y4 800820 8008800820
C 首字母小写,其余大写 C Digapis dIGAPIS
c 首字母大写,其余小写 c DIGPAIS Digapis
t 大写变小写,小写变大写 t DigApis dIGaPIS
r 单词倒叙 r DigApis sipAgiD
d 重复 d Dig DigDig
f 回文 f Dig DiggiD
{ 循环左移 { DigApis igApisD
} 循环右移 } DigApis sDigApi
[ 删除第一个字符 [ DigApis igApis
] 删除最后一个字符 ] DigApis DigApi

如何写规则

 写规则时,首先要用清楚自己的需求,然后根据需求撰写规则。写规则的时候,首先要明确自己所需要的密码的构成和形式,总结规律。根据密码已知的特征撰写规则。

Hashcat中的规则函数,通常是“oXY”的形式,第一位表示函数名,第二位代表操作位置,第三表示操作。Hashcat中有自带的规则文件,这些规则文件,看起来是一串一串无规律的字符串,但是每一段字符串都会对字典中的字符进行复杂的操作。

规则文件.png下面是几条简单的规则,希望通过分析这几条规则,大家可以了解如何写出自己的规则。首先要明确,规则中的函数会按顺序执行,每个函数的作用域就是字典中的每一条字符串,函数与函数之间没有关系,都是各自执行自己的功能。当然,不同函数的功能可以叠加。

例:sa4 sb6 sc<

分解方法:sX

描述:1)用字符a代替字符串中所有4。  |2)用字符b代替字符串中所有6。 |3)用字符c代替字符串中所有< 。

:d[

分解方法:d 和[

描述:1)将字符串重复一遍。  |2)将重复之后的字符串的第一个字符删除。

:i4 O12

分解方法:i4  和O12

描述:1)在位置4插入一个空格。 |2)删除从位置1开始的2个字符;

:d O05

分解方法:d 和 o05

描述:1)将字符串重复一遍。  |2)把位置0处的字符替换成5

:’4p4

分解方法:’4  和p4

描述:1)在位置4之前,截断单词。  |2)在这个单词后,将该单词再重复4遍。

:$ O23

分解方法:$ 和O23

描述:1)在单词末尾添加一个空格。 |2)删除从位置2开始的3个字符。

:T6T3

分解方法:T6和T3

描述:1)改变单词中位置6处字母的大小写;    |2)改变单词中位置3处字母的大小写。

:i3.2-3

分解方法:i3 和 .2 和 -3

描述:1)在位置3插入空格;   |2)用位置2+1处的字符代替位置2处的字符。  |3)将位置3处上的字符的ASCII值减3

:$9$&$A

分解方法:$X

描述:1)在字符串末尾添加一个9。 |2)在字符串末尾添加一个&符号。  |3)在字符串末尾添加一个10(hashcat规则采用16进制)

:c^!x04

分解方法:c  和 ^X  和  xYN

描述:1)首字母大写,其余小写。  |2)在字符串首部添加字符!。 |3)从位置0开始删除4个字符。

:@)sf*40R9

分解方法:@)和 sf  和   *40  和  R9

描述:1)清除所有“)”符号。   |2)用空格代替f 。  |3)交换位置4处与位置0处的字符。 |4)对位置9处的字符进行按位循环右移。

基于规则的攻击

-r/–rules-file

Hashcat中的“-r/–rules-file”命令可以调用规则,hashcat自带的规则文件在rules文件下。在直接攻击模式(-a 0)下,我们可以调用规则,结合字典,进行密码爆破。这样就扩大了字典的范围,在一定程度上提高了密码破译的成功率。

基于规则1.png新版的hashcat可以同时调用多个规则文件进行攻击,这些规则文件中的规则彼此组合,形成新的规则。假设,一个规则文件有100条规则,两个同等规模的规则文件组合就会产生100*100=10000条新的规则。这些规则可以极大的扩大字典的范围。

基于规则2.png

通常是不同文件中的规则,按顺序彼此结合形成新规则,并作用于字典文件。

基于规则3.png

分析:

1.rule中的规则是“c”;2.rule中的规则是”T3″和”t”。执行多个规则文件时,不同文件中的规则互相组合。

组合出的第一条规则:c T3。1)字典中的内容首字母大写,其余小写;  |2)在改变位置3处的字母的大小写。

组合出的第二条规则:c t。1) 字典中的内容首字母大写,其余小写;  |2)改变单词中所有字母的大小写。

生成随机规则

Hashcat可以自行生成规则进行密码爆破,当我们用自己写的规则和hashcat自带的规则文件还没有爆破出密码是,可以尝试生成随机规则进行密码爆破。hashcat可以利用我们设定的参数生成随机规则。由于是随机规则而且可以大规模生成,所以可能产生意想不到的结果。

Hashcat中生成随机规则有 3条参数:

-g/–generate-rules=X:生成X条规则。

–generate-rules-func-min=X:每条规则最少有X个函数

–generate-rules-func-max=X:每条规则中最多有X个函数

例如,不适用规则文件,而是使用随机生成的规则处理字典。

随机1.png

除了指定规则的数量,这一指定每条规则中的函数数量,下面这条命令指定,每条规则中最多具有6个函数。

随机2.png

在实际使用中,我们使用的规则文件通常会根据人类自己设定密码的习惯做设置。符合人类设置密码习惯的排在前面,不符合的排在后面。所以在实际应用中,如果一个规则和字典运行几个小时还没有结果时,大家可以终端运行,换一个字典和规则继续运行。密码是人类生成的,所以规则一定要符合人类的习惯。

规则文件导出

当我们生成的随机规则恰好产生作用时,可以把这些规则导出成一个规则文件,这样下次进行密码爆破可以继续使用这些规则。

–debug-mode:定义调试模式(仅用于规则)

–debug-file:将调试的规则输出到文件

利用debug命令可以在自动生成的规则中,将有效的规则提取出来,组成一个规则文件,以便下次进行爆破时使用。

导出1.png

由于debug只会提取有效的规则,所以生成的规则文件中可能会有重复的规则。

导出2.png

总结

hashcat规则攻击比较复杂,所以单独算作一篇文章,其实hashcat基于规则的攻击应该是字节攻击模式(-a 0)的一部分。规则只有跟字典结合才能发挥作用,对字典的选择和对规则的选择一样重要。

*本文作者:EVA。本文属丁牛网安实验室原创出品,转载请注明来自FreeBuf.COM。

来源:freebuf.com 2018-07-12 19:08:59 by: DigApis

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论