前面几篇文章中我们已经讲过了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中有自带的规则文件,这些规则文件,看起来是一串一串无规律的字符串,但是每一段字符串都会对字典中的字符进行复杂的操作。
下面是几条简单的规则,希望通过分析这几条规则,大家可以了解如何写出自己的规则。首先要明确,规则中的函数会按顺序执行,每个函数的作用域就是字典中的每一条字符串,函数与函数之间没有关系,都是各自执行自己的功能。当然,不同函数的功能可以叠加。
例: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)下,我们可以调用规则,结合字典,进行密码爆破。这样就扩大了字典的范围,在一定程度上提高了密码破译的成功率。
新版的hashcat可以同时调用多个规则文件进行攻击,这些规则文件中的规则彼此组合,形成新的规则。假设,一个规则文件有100条规则,两个同等规模的规则文件组合就会产生100*100=10000条新的规则。这些规则可以极大的扩大字典的范围。
通常是不同文件中的规则,按顺序彼此结合形成新规则,并作用于字典文件。
分析:
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个函数
例如,不适用规则文件,而是使用随机生成的规则处理字典。
除了指定规则的数量,这一指定每条规则中的函数数量,下面这条命令指定,每条规则中最多具有6个函数。
在实际使用中,我们使用的规则文件通常会根据人类自己设定密码的习惯做设置。符合人类设置密码习惯的排在前面,不符合的排在后面。所以在实际应用中,如果一个规则和字典运行几个小时还没有结果时,大家可以终端运行,换一个字典和规则继续运行。密码是人类生成的,所以规则一定要符合人类的习惯。
规则文件导出
当我们生成的随机规则恰好产生作用时,可以把这些规则导出成一个规则文件,这样下次进行密码爆破可以继续使用这些规则。
–debug-mode:定义调试模式(仅用于规则)
–debug-file:将调试的规则输出到文件
利用debug命令可以在自动生成的规则中,将有效的规则提取出来,组成一个规则文件,以便下次进行爆破时使用。
由于debug只会提取有效的规则,所以生成的规则文件中可能会有重复的规则。
总结
hashcat规则攻击比较复杂,所以单独算作一篇文章,其实hashcat基于规则的攻击应该是字节攻击模式(-a 0)的一部分。规则只有跟字典结合才能发挥作用,对字典的选择和对规则的选择一样重要。
*本文作者:EVA。本文属丁牛网安实验室原创出品,转载请注明来自FreeBuf.COM。
来源:freebuf.com 2018-07-12 19:08:59 by: DigApis
请登录后发表评论
注册