John The Ripper(hash破解工具)
本文相关内容:了解如何使用开膛手约翰,它是一个非常强大和具有普适性的哈希破解工具。
TryHackMe实验房间链接:https://tryhackme.com/room/johntheripper0
基本概念
开膛手约翰是世界上最著名的、广受欢迎的多功能hash破解工具之一,它有非常快速的破解速度,也兼容极大范围的哈希类型。
哈希是一种获取任意长度的数据并以固定长度的另一种形式表示它的方法。这个计算过程将屏蔽数据的原始值,是通过哈希算法运行原始数据来完成的。有许多流行的哈希(散列)算法,如 MD4、 MD5、 SHA1和 NTLM等。
哈希算法本身是不可逆的,但是这并不意味着破解哈希值是不可能的。如果你现在知道一个密码的哈希值(你也知道用了什么类型的哈希算法) ,那么就可以使用该哈希算法对大量数据进行哈希计算处理,然后你可以将这些通过计算得到的哈希值与你试图破解的密码的哈希值进行比较,以查看其中是否有相互匹配的,如果有的话,你现在就知道哪个数据对应密码的哈希值了——你已经破解这个密码了!
这个过程被称为“字典式攻击”,“开膛手约翰”,或者通常简称为“约翰”,则是一个允许你对大量不同哈希类型进行快速暴力破解的工具。
John工具的下载与安装
John the Ripper 在许多不同的操作系统上都得到了支持。John 有多个版本:标准的“核心”发行版,以及多个社区版本——它们扩展了原始 John 发行版的特性。这些发行版中最流行的是“ Jumbo John”——这也是Kali系统预安装的John工具。
如果你正在使用kali系统,你可以使用以下命令安装 Jumbo John:
如果你正在使用 Blackarch系统,或者 Blackarch 存储库,你可能已经安装了 Jumbo John,也可能没有安装,请用以下命令来检测John或者进行John的安装:
关于John安装过程和如何从源代码构建软件包配置John,请参考以下网页:https://github.com/openwall/john/blob/bleeding-jumbo/doc/INSTALL
如果你在 Windows 上安装 Jumbo John ,你只需要下载并安装压缩的二进制文件,有64位系统和32位系统的压缩包。
答题:
字典
为了对哈希值进行字典式攻击,你还需要一个好用的字典。在github存储库里有一个很好的字典集合可以使用:https://github.com/danielmiessler/SecLists
在 Parrot、 Kali 等渗透系统中,你也可以在/usr/share/wordlists 目录下找到一些默认的字典。
还有一个比较强大的字典是rockyou.txt,你可以在上面提到的SecLists存储库里面的/Passwords/Leaked-Databases下面找到rockyou.txt,
下载后,使用命令tar xvzf rockyou.txt.tar.gz 进行解压即可。
答题:
破解简单的哈希值
理论
John的基本语法
自动破解
John 有一些内置的功能,可以检测给出的hash类型,并为你选择合适的规则和格式来破解它,这并不总是最好的主意,但是如果你不知道要破解的hash值是什么hash类型,你只是想尝试破解它,那么这个自动破解选项可以是一个很好的选择!为此,我们使用以下语法:
示例用法:
识别哈希
有时候 John 无法很好地自动识别和加载哈希,此时我们可以使用其他工具来识别哈希类型,然后再将 john 设置为使用特定的哈希格式进行破解。
有多种方法可以做到对哈希类型进行识别,例如使用在线哈希识别器:https://hashes.com/en/tools/hash_identifier
也可以使用hash-identifie:https://gitlab.com/kalilinux/packages/hash-identifier/-/tree/kali/master
hash-identifie是一个非常容易使用的 Python 工具,当你输入一个哈希值时,它会告诉你这个哈希值最有可能是什么哈希类型,将一系列哈希类型按可能性进行降序排列。
你可以使用以下方法从 gitlab 中提取hash-identifie的python 文件进行工具安装:
然后使用命令 python3 hash-id.py
简单地启动它,输入你想要识别的hash值,它就会给出这个hash值可能对应的hash类型!
指定类型的破解
一旦你确定你要破解的hash值的类型,你就可以在John中指定类型进行破解:
示例用法:
注意
当你告诉 john 使用指定类型进行破解时,如果处理的是标准哈希类型,例如上面的例子中的 md5,你必须以 raw- 作为前缀,告诉 john 你只是在处理一个标准的 hash 类型(尽管这并不总是适用)。要检查是否需要添加前缀,可以使用命令验证: john --list=formats | grep -iF "md5"
答题
下载包含hash文件的附件,回答问题。
安装hash-identifie工具,输入命令python3 hash-id.py执行,将需要进行识别的hash值复制粘贴输入,再按回车即可开始识别
hash-id.py 和在线网站https://hashes.com/en/tools/hash_identifier 两种方式都能识别hash值的类型,结合两种方式的识别结果:得出要破解的hash值的类型。
知道哈希类型之后,就可以运行john并使用参数指定hash类型进行hash破解 ,注意:表示hash类型的参数写法要符合john的语法
如果john破解失败,则通过以下在线网站破解哈希:
https://hashes.com/en/decrypt/hash
https://crackstation.net/
操作截图:
破解 Windows 身份验证哈希
理论
破解 Windows 哈希值
现在我们已经了解了开膛手约翰的基本语法和用法——让我们继续来解决一些稍微困难一点的问题。Windows身份验证哈希是由操作系统存储的密码的哈希版本,有时可以使用暴力方法去破解它们,要获得这些哈希值,你必须已经是一个特权用户。
NTHash / NTLM
答题
下载附件,使用以下命令破解哈希值:
结果是:mushroom
破解linux上的/etc/shadow 哈希
理论
从/etc/shadow 中破解散列
etc/shadow 文件是 Linux 机器上存储密码哈希的文件,它还会存储其他信息,如上次密码更改日期和密码过期信息,shadow文件的每一行都为系统的每个用户或用户帐户包含一个条目。
这个文件通常只有 root 用户才能访问——因此,为了获得文件的哈希值,你必须拥有足够的特权,你才有机会破解一些哈希值。
Unshadowing(去除shadow)
John 对于需要使用的数据格式有一定要求,所以为了破解/etc/shadow密码你必须将/etc/shadow与/etc/passwd 文件组合起来,以便 John 能够理解所给出的数据。为此,我们需要使用一个内置在 John 工具套件中的名为 unshadow 的工具。unshadow 的基本语法如下:
示例用法:
注意:
在使用 unshadow 时,你可以使用完整的/etc/passwd 和/etc/shadow 文件——如果它们可用的话,也可以使用每个文件中的相关行,例如:
在完成unshadow处理之后,我们将 unshadow 的输出直接提供给 John,在我们的示例中 这个输出结果被称为“ unshadow. txt”。
我们不需要在这里指定哈希格式,因为我们已经专门为 John 做了输入处理(使用unshadow),但是在某些情况下,你仍然需要指定哈希格式:
答题
下载附件(此附件可不经过unshadow处理),先识别hash类型,再使用以下命令破解哈希:
结果是:1234 root
single破解模式
理论
single模式简介
john还有另一种模式,叫做single破解模式。在这种模式下,john 只使用用户名中提供的信息,通过稍微更改用户名中包含的字母和数字(字词混淆),试探性地计算出可能的密码值。
字词混淆
要展示什么是single破解模式,什么是字词混淆,最好的方法是通过一个实际的例子:
这种技巧被称为字词混淆,在这个过程中,John 正在建立一个自己的字典,这个字典是基于它接收到的信息所建立的,并且使用了一系列“混淆规则”,这些规则定义了它如何根据你想要破解的目标的相关因素来变异它开始的单词,进而生成一个字典。这是对弱密码生成策略的一种利用,因为很多弱密码都是基于用户名信息,或者用户所登录的服务而产生。
GECOS
John 实现的字词混淆处理还具有与 UNIX 操作系统(以及其他类 UNIX 操作系统,如 Linux)的 Gecos 字段兼容的特性。
那么,什么是 Gecos?还记得在上文中我们提到的/etc/shadow 和/etc/passwd 的数据条目吗?
如果你仔细看,你会发现shadow文件和passwd文件中的每个字段都用冒号":" 分隔,这些记录被分割成的每一个字段都称为 Gecos 字段。
John 可以将存储在这些记录中的信息,比如全名和主目录名等信息,添加到它用single模式破解/etc/shadow哈希时 生成的字符串中。
使用single模式
如果我们要破解用户名为Mike的密码,我们使用的语法如下:
示例用法:
注意:如果你想在单破解模式下破解哈希,那么你需要更改提供给 john 的文件内容,以便john理解 根据哪些数据开始创建字典,为此,你可以将哈希文件所属的用户名添加到哈希值开头,根据上面的示例,我们将更改文件 hashes.txt
答题
现在你已经熟悉了 John 的单破解模式的语法,下载附件的hash并破解它,假设它所属的用户名为“ Joker”。
下载附件,识别hash类型,添加"Joker:"到附件的hash值的开头,再使用以下命令破解哈希:
自定义规则
理论
什么是自定义规则?
在我们探索 John的单破解模式能做什么的过程中——你可能会有一些关于什么是适合的破解模式的想法,或者你的密码经常使用什么哈希模式加密——这些想法可以通过某种破解模式来复制。你可以定义自己的规则集,John 将使用这些规则来动态创建密码。当你足够了解关于你的目标密码结构的信息时,自定义规则非常有用。
共同的用户规则
许多组织需要一定程度的密码复杂性来对抗字典攻击,也就是说,如果你在某个地方创建了一个帐户,你可以创建一个密码并输入:
polopassword
(此处是举例)
然后你就可能会收到一个提示,告诉你密码必须至少包含以下内容之一:
大写字母
数字
符号
我们可以利用这样一个规则,即大多数用户在这些字符的输入位置上是可以预测的。对于上述密码标准要求,许多用户可能会使用以下内容:
Polopassword1!
密码首先是大写字母,最后是一个数字和一个符号,这种熟悉的密码模式,由修饰词(如大写字母或符号)附加和预置,是人们在创建密码时经常会使用和重用的令人难忘的模式。这种模式可以让我们利用密码复杂性的可预测性:从我们的字典中创建动态密码来进行密码破解。
如何创建自定义规则
自定义规则可以在john.conf配置文件中定义,通常路径是/etc/john/john.conf,如果你已经使用包管理器安装了 John,或者使用 make 从源代码构建了John,那么你可以直接在刚才提及的路径下找到并查看john.conf文件。
让我们了解一下这些自定义规则的语法:
将我们需要的修饰符放在一起,以便根据与示例密码“Polopassword1!”匹配的规则来生成一个新的单词列表(假设初始密码单词polopassword在我们的原单词列表中,我们将基于原单词列表进行扩展),我们可以创建一个如下所示的规则条目:
使用自定义规则
我们现在可以使用--rule=PoloPassword
参数选项来应用自定义规则并扩展原单词列表,最终我们将得到一个新的单词列表:
注意:Jumbo John已经提供了包含许多密码规则的集合,对应着很多可以选择的修饰符组合;如果某个规则的语法无法正常工作,请尝试查看john.conf文件的第696行以后的List.Rules
部分内容。
答题
破解受密码保护的Zip压缩文件
理论
我们可以用 John 破解密码保护的 Zip 文件:首先使用 John 工具套件的一个独立部分能将 zip 文件转换成 John 能够理解的格式(提取hash值),然后再进行破解。
zip2john
与我们之前使用的 unshadow 工具类似,我们将使用 zip2john 工具将 zip 文件转换为 John 能够理解的哈希格式(提取hash值),zip2john 的基本用法是这样的:
开始破解
使用了zip2john之后,我们就能够在示例中获取从 zip2john 输出的名为“ zip _ hash.txt”的文件,正如我们使用 unshadow 所做的那样,我们将“ zip _ hash.txt”直接提供给 john,因为我们已经为该文件做了输入格式的处理:
答题
下载附件secure.zip,进行破解。
先使用命令转换zip文件格式(提取hash值):
对 由zip2john处理后得到的文件进行破解:
使用破解得到的密码 解压zip文件并查看其中的flag文件内容:
破解受密码保护的 RAR 归档文件
理论
我们可以使用与上一小节中类似的过程来破解rar归档文件的密码。 rar 归档文件是由 Winrar 归档管理器创建的压缩文件,和zip一样,rar可以作为各种各样的文件夹和文件的压缩格式。
rar2john
rar2john几乎与我们刚才使用的 zip2john 工具相同,我们可以使用 rar2john 工具将 rar 文件转换为john能够理解的hash格式(提取hash值)。基本语法如下:
开始破解
使用了rar2john之后,我们就能够在示例中获取从 rar2john输出的名为“ rar _ hash.txt”的文件,我们将“ zip _ hash.txt”直接提供给 john,因为我们已经为该文件做了输入格式的处理:
答题
下载附件secure.rar,进行破解。
先使用命令转换rar文件格式(提取hash值):
对 由rar2john处理后得到的文件进行破解:
使用破解得到的密码 解压rar文件并查看其中的flag文件内容:
使用john破解SSH密钥
理论
破解 SSH 密码
使用 John 可以破解id _ rsa文件的SSH 私钥密码。除非另外配置,否则你将使用密码对 SSH 登录进行身份验证。你可以配置基于密钥的身份验证,这使你可以使用你的私钥id _ rsa作为通过 SSH 登录到远程计算机的身份验证密钥。但是,这样做通常需要设置一个密码------在这里,我们将使用 john 来破解这个密码,以允许我们通过 SSH 使用密钥进行身份验证。
ssh2john
ssh2john 可以将用于登录到 SSH 会话的id _ rsa 私钥转换为 john能够识别的hash格式(提取hash值),使用语法如下:
开始破解
使用了ssh2john之后,我们就能够在示例中获取从 ssh2john输出的名为“id_rsa_hash.txt”的文件,我们将“ id_rsa_hash.txt”直接提供给 john,因为我们已经为该文件做了输入格式的处理:
答题
下载附件idrsa.id_rsa,进行破解。
先使用ssh2john将密钥文件转换成john能识别的格式(提取hash值)
再对ssh密钥的hash值进行破解
最后更新于