一、识别Hash类型

john会自动识别需要破解的hash,但是很多时候会识别错误。

二、John的基本语法

1
john [options] [path to file]

[path to file]这个路径包含了你要破解的hash文件。为了方便我们将需要破解的hash值直接存放在了txt文件中。

John的自动破解
John可以检测给出的hash类型,并为你选择合适的规则和格式来破解它,如果你不知道你的文件的加密类型。这将是最简单的选择!

1
john --wordlist=/usr/share/wordlists/mima.txt hash.txt

如上,我们只需要指定密码字典的位置和hash的位置即可。

John指定类型
如果你知道你的密码的加密类型。可以直接用—format参数来指定类型。

1
john --format=raw-md5 --wordlist=/usr/share/wordlists/mima.txt hash.txt

裂纹模式

Single crack mode 是一种基于规则的破解技术,在针对 Linux 凭证时最为有效。它根据受害者的用户名、主目录名称和 GECOS 值(全名、房间号、电话号码等)生成密码候选。这些字符串会运行在一组大型规则中,这些规则应用了在密码中常见的字符串修改(例如,一个真实姓名为 Bob Smith 的用户可能会使用 Smith1 作为他们的密码)。

想象我们作为攻击者遇到了文件 passwd ,其内容如下:

1
r0lf:$6$ues25dIanlctrWxg$nZHVz2z4kCy1760Ee28M1xtHdGoy0C2cYzZ8l2sVa1kIa8K9gAcdBP.GI6ng/qA4oaMrgElZ1Cb9OeXO4Fvy3/:0:0:Rolf Sebastian:/home/r0lf:/bin/bash

根据文件内容,可以推断受害者拥有用户名 r0lf 、真实姓名 Rolf Sebastian 和主目录 /home/r0lf 。单次破解模式将使用这些信息生成候选密码,并将它们与哈希值进行测试。我们可以使用以下命令运行攻击:

1
john --single passwd

字典模式

Wordlist mode 用于使用字典攻击破解密码,这意味着它将供应的密码列表中的所有密码与密码哈希进行尝试。该命令的基本语法如下:

1
john --wordlist=<wordlist_file> <hash_file>

增量模式

Incremental mode 是一种强大的、蛮力式密码破解模式,它根据统计模型(马尔可夫链)生成候选密码。该模式旨在测试特定字符集定义的所有字符组合,并根据训练数据优先考虑更可能的密码。

这种模式最为彻底,但也最耗时。它会动态生成密码猜测,并且不依赖于预定义的单词列表,这与单词列表模式不同。与纯粹的随机蛮力攻击不同,增量模式使用统计模型进行有根据的猜测,从而比简单的蛮力攻击更高效。

1
john --incremental <hash_file>

默认情况下,JtR 使用其配置文件( john.conf )中指定的预定义增量模式,这些模式定义了字符集和密码长度。您可以自定义这些模式或定义自己的模式,以针对使用特殊字符或特定模式的密码。

三、实战

利用john破解Linux密码

Linux的系统账户在/etc/passwd中,密码存于/etc/shadow中。将/etc/passwd文件和/etc/shadow文件合并成一个.txt文件

1
unshadow /etc/passwd /etc/shadow > mima.txt

破解密码

1
john mima.txt

如果出现Using default input encoding:UTF-8,这不是破解失败的意思,说明这个hash之前被破解过。使用john --format=crypt命令可以还原明文。

破解zip压缩包

这里,我们生成一个带有密码的zip压缩包。并在kali中获取对应的hash

1
zip2john aaa.zip > zip.txtjohn --wordlist=pass.txt zip.txt

破解rar压缩包

和破解rar一样。先使用命令转换rar文件格式(提取hash值):

1
rar2john kali.rar > kali.txtjohn --wordlist=pass.txt kali.txt