您的位置首页  建材市场

使用Hashcat破解外国字符构成的密码的终极指南

  翻译:

  原文:

  请注意观察UTF-8字符表中第三列的西里尔字母“A”,它的十六进制形式为“d090”,这是一个两字节的十六进制代码,如果转换为二进制的话,就是10000。现在,你明白字符编码的区别以及在hashcat中做出相应的区别的重要性了吗?ASCII编码的字符A=41(01000001),而UTF-8编码的西里尔字符A=d090(10000)。如果仔细观察西里尔字母A的十六进制表示的话,你会注意到它分为两部分,d0(基本编码)和90(字符编码)。基本编码范围为d0-d4(即d0,d1,d2,d3,d4),而字符代码范围则是从a0-9f(即a0,a1,a2,a3…9c,9d,9e,9f)。所以,当你利用蛮力方式破解密码时,你需要考虑到表示西里尔字符的十六进制值需要的字节数量,并覆盖相应字节内的所有的可能取值。看一下这个UTF-8Hex字符表就会发现,表示西里尔字符的编码起始于d080,结束于d4af。看到这里,许多读者可能会昏昏欲睡了,那好,在你完全睡着之前,让我们先来了解一下测试环境和hashcat的具体用法。实际上,你只要记住这里介绍的西里尔字符表示方法,同样适用于所有其他UTF-8外国字符集就行了。

  0x03搭建测试环境

  步骤:1)安装外语输入法,2)创建示例密码,3)计算这些密码的MD5哈希值,4)将哈希值转换为文本文件,以及5)使用hashcat破解哈希值。

  接下来,让我们搭建一个测试环境,以便通过几个简单的例子来演示如何破解UTF-8字符编码。首先,要根据你自己的操作系统,例如Windows,Mac或Linux,安装一些最常见的外语输入法和相应的键盘布局。对于Windows系统来说,具体配置方法见这里;对于Mac系统来说,具体配置方法见这里;对于KaliLinux系统来说,具体配置方法见这里。

  从上图中可以看到,我们能够轻松地在任务栏的键盘输入语言之间切换。这样一来,在需要频繁切换的时候,会更加方便。启用多种语言后,Windows和Linux的任务栏也具有类似的功能。

  此外,我们还可以使用HashMaker程序。有了它,我们能够将外国字符密码输入到字符串字段中,然后快速生成许多散列算法的输出,就本例来说,我们需要的是MD5值。Windows系统用户可以使用HashTab程序,而Linux用户则可以在命令行环境下面使用内置的MD5sum工具。

  从上面的HashMaker截图中可以看到,我们输入了一个由四个西里尔字符组成的简单密码“фыва”,然后我们计算了这个字符串的MD5值,并将其放入一个名为“ru_charset.txt”的文件中。注意,我们这里将使用非常简单的、由一到四个西里尔字符组成的密码,这样能够确保在30秒到30分钟内就能破解这些哈希值。

  从上面可以看到,我们已经创建了两个文本文件。第一个文件包含两个单字符密码(大写和小写),两个双字符密码(大写和小写),两个三字符密码(小写和大写)和两个四字符密码(大写和小写)。这里的字符你可以随意挑选,只要确保它们足够简单就行,毕竟这是我们的第一道练习题。对于第二个文件来说,你可能已经注意到了,我们这里是按照它们出现在左边的顺序将这些MD5哈希值输入到“ru_charset.txt”文件中的。将这个存放哈希值的文件“ru_charset.txt”保存到一个你可以记住的地方,因为在破解阶段我们会用到它。接下来,我们将演示如何使用正确hashcat命令行参数,通过取自UTF-8hex字符表的定制字符集来暴力破解这些哈希值。

  0x04Hashcat用法举例

  Hashcat具有良好的可扩展性,例如可以自定义字符集等。下面,让我们利用这个可定制的特性,来传递针自定义的西里尔hex字符集,这个字符集取自我们见面介绍的字符表。虽然Hashcat3.0在参数要求进行了一些扩展,允许在命令行中最多使用四个自定义字符集,但我们这里只需创建两个即可。请记住,对于UTF-8字符集中的西里尔字符来说,在使用十六进制表示的时候,实际上可以分为两部分——基本编码和字符编码,所以我们需要表示该范围所有可能的组合。这里,我们的”基本编码”定制字符集为d0d1d2d3d4,而“字符编码”定制字符集为5868788898a8b8c8d8e8f5969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebf。这个字符范围将涵盖西里尔字符的所有可能的代表性组合。

  下面,我们给出完整的hashcat命令行,它将对我们的UTF-8西里尔字母组成的密码的MD5哈希值进行蛮力攻击:

  ./hashcat–potfile-disable-m0-a3../ru_charset.txt–hex-charset-1d0d1d2d3d4-25868788898a8b8c8d8e8f5969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebf-i?1?2?1?2?1?2?1?2

  下面对Hashcat的参数进行相应的说明:

  –pot-disable(我们不希望将破解的哈希值添加到hashcat的potfile中)

  -m0(设置哈希值类型,对于MD5算法来说,将其设置为0)

  -a3(设置攻击模式,这里设为3表示暴力破解)

  ../ru_charset.txt(保存MD5哈希值的文本文件的路径)

  –hex-charset(假设字符集以十六进制值表示)

  -1d0d1d2d3d4(设置我们的第一个字符集的基本编码)

  -25868788898a8b8c8d8e8f5969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebf(设置字符编码的范围)

  -i?1?2?1?2?1?2?1?2(让hashcat根据掩码1?2?1?2?1?2?1?2对1-4个字符可能组合进行暴力猜解)

  对于上面的设置来说,关键要记住将掩码设置为?1?2?1?2?1?2?1?2是针对双字节字符的,它的作用是告诉hashcat首先从1号自定义字符集和2号自定义字符集中取值,然后将它们合并。例如,在进行暴力破解的时候,根据当前的自定义字符集来看,尝试的第一个组合很可能是“d080”(?1?2)。下一次将会尝试“d081”,依此类推,hashcat将逐次遍历所有可能组合,直到尝试了四个字符(双字节字符)的UTF-8十六进制编码d4bcd4bdd4bed4bf(?1?2?1?2?1?2?1?2)为止。

  从上面你可以看到,hashcat正在猜解第一个字符,并且已经成功破解了我们放入“ru_charset.txt”文件中的两个单字符密码的哈希值。这里的“ATTENTION!”警告说明这里的配置无法发挥hashcat软件强大的并行化能力,如果你想更多地了解如何优化hashcat的配置的话,请参阅这里。

  如上图所示,hashcat已经完成了暴力攻击,成功破解了8个哈希值,并且只花了1分30秒。需要注意的是,hashcat是以$HEX[d0a4d0abd092d090]的格式来显示结果的。你需要将“d0a4d0abd092d090”放到编码器/解码器中,才能查看实际的西里尔字符结果。此外,如果你认为自己的终端/环境能够处理这种文本编码并能正确显示它们的话,也可以在命令行选项中启用hashcat“–outfile-autohex-disable”。我们更喜欢$HEX[…]格式,因为它可以处理任何输出形式,换句话说,这样做不容易出错。使用–outfile-autohex-disable选项的结果如下所示:

  0x05其他优秀文章

  下面推荐一些介绍Hashcat的优秀文章:

 

免责声明:本站所有信息均搜集自互联网,并不代表本站观点,本站不对其真实合法性负责。如有信息侵犯了您的权益,请告知,本站将立刻处理。联系QQ:1640731186
友荐云推荐