有时候,我们会碰到这样的问题,比如说口令是abcdabcd这种模式,而我们的字典中又没有abcdabcd,如果去生成,则会占用巨大的空间,能不能有办法通过abcd来产生abcdabcd呢?在hashcat中,当然是可以实现的,在本节中,我们将先讲述这种模式,即字典组合攻击模式(参数表示为-a 1)。
首先,我们通过简单一个实例,来描述一下-a 1的含义,然后带你一步一步到该模式的复杂应用。
hashcat –a 1 –m 0 mima.txt –o outfile dic.txt dic.txt
本命令的含义是使用dic.txt这个字典,进行组合后对mima.txt进行破译,如果dic.txt是由如下图所示的字典
则该命令组合后的形成的新的对mima.txt进行破译的字典为:
即将dic.txt中的每一行与自身进行了组合,形成了新的字典。
前面介绍的是相同的字典进行的组合,如果是不同的字典的话,hashcat同样也支持,使用命令如下所示
表示dic1.txt中所有的行与dic2.txt中所有的行进行组合,形成的字典对mima.txt进行的解算。
组合模式在什么情况下使用呢?组合模式一般在用户口令明显分为两段式的情况,如:abcd1234、asdfasdf、aaa19770101、……等情况,口令明显表现为前一段和后一段。
(1)组合模式下,目前hashcat只能支持两个字典(或者相同字典2次)进行组合,不能支持多个字典(3个以上字典)或者同一字典3次以上的组合攻击。
也就是说下面的命令是错误的:
hashcat –a 1 –m 0 mima.txt –ooutfile dic.txt dic.txt
hashcat –a 1 –m 0 mima.txt –ooutfile dic1.txt dic2.txt dic3.txt
(2)组合模式下,对目录也是不支持的(在前文中,-a 0这个模式下,是支持整个目录的),也就数说以下两种情况也是不行的。
hashcat –a 1 –m 0 mima.txt –ooutfile /dic/
hashcat –a 1 –m 0 mima.txt –ooutfile /dic/*.txt
(3)时效性问题
在使用组合模式时,如果字典很大,比如说两个字典为10,000,000,则组合的空间为100,000,000,000,000,相当于10,000,000个字典(每个字典有10,000,000条)的攻击,则空间就太大了,而且可能还会出现大量的重复,虽然覆盖率增加了,但时效性就不高了。
暴力破解,顾名思义,就是对指定的明文空间,进行暴力穷尽,是一种没有办法的办法(因为你没有办法缩小穷尽空间)。
在正式讲述暴力破解之前,我们先来说一下穷尽空间。以常见的小写字母+数字为例,如果口令长度为4,则其空间为36**4=1679616,好像不大,一会就出来了;如果口令长度为8,则其空间为36**8=2821109907456,如果解算时效为1000,000,000(10亿次/s),则解算时间大约为2820秒,大约47分钟,好像还可以承受;如果口令长度为10,则其空间为36**10=3656158440062976,如果解算时效为1000,000,000(10亿次/s),则解算时间超过了1000小时,那就没有办法接受了。
hashcat中暴力破解模式(参数表示为-a 3)有很多不同的种类,下面,我们就一一进行讲述。
hashcat中,内置了8种默认字符集,分别是l(小写字母 26个)、u(大写字母 26个)、d(数字 10个)、h(小写16进制字符)、H(大写16进制字符)、s(特殊字符 31)、a(l,u,d,s的合集 95全字符)以及b(二进制的0x00-0xFF)。如下图所示
举例
(1)如果穷尽小写字母6位空间使用命令如下:
(2)如果穷尽全字符8位空间使用命令如下:
(3)如果穷尽范围为4-6位的全数字空间,则命令如下:
在这里,增加了一个参数--inrcement --increment-min 4 --inrcement --increment-max 6表示穷尽长度的最小值和最大值。
这里的组合模式是穷尽模式下的组织模式,不是(-a 1)的模式。
直接举例进行说明:
(1)一个口令穷尽范围,推测口令长度为6,第一位是全字符集、第二位是小写字母、第三位是大写字母、第四、五、六位为全字符集,则命令可以使用如下模式:
(2)下面再给出几种组合模式,
之一:如果一个口令的范围为大小写+数字,长度为6,则命令如下:
这里使用-1 ?l?u?d表示大小写字母+数字。
之二:如果穷尽范围为6位,第一、四位为大小写+数字,第二位为大小写,第三、五位为大写+数字,第六位为数字,则命令如下:
当然,也可以指定最小长度和最大长度,如下图所示
前面,我们介绍了hashcat内置了8种字符集,但是如果用户所需要字符集不在这8种之内呢?怎么办?没有关系,hashcat还为大家准备了丰富的自定义的暴力攻击模式。
使用hashcat –h命令,可以看到定义了如下的使用模式
下面,我们通过一个个的实例来进行讲解:
(1)如果口令长度为8位,每一位由“0123456789aqwcfhj,.<>=-_+”组成,则可以使用如下的命令。
也可以把这些字符写成文件,如char.txt,使用下面的命令。
(2)如果口令长度为8位,第一、三、六位在“43545yt”中,第二、四位在“345dfv-=_+”中,第五、七位在“9vjnbbf-brg”中,第八位在“345fkfggh”中,则可以使用如下的命令。
当然也可以将这些字符写成不同的文件,如char1.txt、………,使用如下的命令。
注:有些符号在命令行中会有特殊含义,所以当字符集中有特殊符号时,最好把这些符号写成文件形式。
(3)在(2)的基础上,增加最小长度和最大长度,如4-8位。则可以使用如下的命令。
在前面的文章中,我们介绍了部分参数的使用,今天,我们接着往下介绍一些常用的参数。今天重点介绍屏幕显示参数
前一篇文章中介绍过文件输出相关的命令(-o/--outfile-format),通过这些命令可以把hashcat密码破译的结果以某种格式输出到文件。但是在hashcat运行过程中,我们看不到hashcat破译了哪些密码。如果在hashcat工作中,我们可以直接把hashcat破译出的密码,打印到屏幕,就会更加直观方便。hashcat中正好有几个参数,可以把hashcat运行结果输出到屏幕。
Show命令会把pot文件中缓存的已经破译的hash和密码输出到屏幕窗口。
left命令会把hashcat没有破译的hash值,输出到屏幕
stdout命令不会进行密码破译,但是它会打印用于密码破译的字典中的内容。
Hashcat的命令众多,不同的参数的差异非常大,想要充分发挥hashcat的功能和作用,建议大家多用不同的命令进行尝试,从而熟悉hashcat不同命令的组合方法。对于hashcat参数的功能,大家可以借鉴hashcat联机帮助(-h)。