[THM]-John The Ripper

[THM]-John The Ripper

约翰是谁?

欢迎

开膛手约翰是最著名、最受欢迎和最通用的散列破解工具之一。它结合了快速的破解速度,以及非常广泛的兼容哈希类型。这个房间将假定没有以前的知识,所以我们必须首先涵盖一些基本的术语和概念,然后我们进入实际的哈希破解。

哈希值是什么?

哈希是一种获取任意长度的数据并以固定长度的另一种形式表示它的方法。这掩盖了数据的原始值。这是通过散列算法运行原始数据来完成的。有许多流行的散列算法,如MD4、MD5、SHA1和NTLM。让我们试着用一个例子来说明这一点:

如果我们取“polo”,一个4个字符的字符串,并通过MD5哈希算法运行它,我们最终得到的输出是:b53759f3ce692de7aff1b5779d3964da,一个标准的32个字符的MD5哈希。

同样,如果我们取“polomints”,一个9个字符的字符串,并通过相同的MD5哈希算法运行它,我们最终得到的输出是:584b6e4f4586e136bc280f27f9c64f3b,另一个标准的32个字符的MD5哈希。

是什么让哈希安全?

哈希算法被设计成只能以一种方式运行。这意味着不能仅使用给定的输出来反转计算过的哈希值。这又回到了一个被称为P对NP关系的基本数学问题。

虽然这是一个非常有趣的数学概念,被证明是计算和密码学的基础,但我没有资格在这里详细解释它;但抽象地说,它意味着哈希值的算法将是“NP”的,因此可以合理地计算。然而,反哈希算法将是“P”,难以解决——这意味着它不能在合理的时间内使用标准计算机计算出来。

约翰来了……

尽管算法本身是不可逆转的。这并不意味着破解哈希是不可能的。例如,如果你有一个散列版本的密码——你知道散列算法——你可以使用该散列算法对大量的单词进行散列,称为字典。然后,你可以将这些哈希值与你试图破解的哈希值进行比较,看看它们是否匹配。如果是这样,那么您现在就知道与该散列对应的单词了——您已经破解了它!

这个过程被称为字典攻击,开膛手约翰(John the Ripper)是一种工具,可以让你对大量不同哈希类型进行快速蛮力攻击。

学习更多

要了解更多关于特定哈希和加密方法的深入资料,我建议您查看NinjaJc01的惊人房间,其中涵盖了以下主题:encryptioncrypto101

Setting up John the Ripper

陷害开膛手约翰

许多不同的操作系统都支持开膛手约翰,而不仅仅是Linux发行版。在我们详细介绍之前,需要说明的是,John有多个版本,标准的“核心”发行版,以及多个社区版本——它们扩展了原始John发行版的功能集。这些发行版中最流行的是“Jumbo John”——我们将在后面使用它的特定特性。

鹦鹉,卡莉和攻击箱

如果你使用的是Parrot OS、Kali Linux或TryHackMe自己的AttackBox,你应该已经安装了Jumbo John。您可以通过在终端中输入john来再次检查。您应该看到john的使用指南,第一行是:“john the Ripper 1.9.0-jumbo-1”或类似的版本号。如果没有,可以使用sudo apt install john来安装它。

Blackarch

如果您正在使用Blackarch,或者Blackarch存储库中是否安装了Jumbo John,请使用pacman -Qe | grep " John “命令检查是否安装了,您应该会看到类似于” John 1.9.0 "的输出。Jumbo1-5”或类似的版本号不同。如果您没有安装它,您可以简单地使用pacman -S john来安装它。

从源代码构建Linux

如果您希望从源代码构建包以满足您的系统需求,您可以通过五个相当简单的步骤来完成。关于安装过程和如何配置从源代码构建的进一步建议可以在这里找到。

使用git clone https://github.com/openwall/john -b bleeding-jumbo john将jumbo john存储库克隆到您当前的工作中
然后cd john/src/将当前目录更改为源代码所在的目录。
进入该目录后,使用./configure来检查所需的依赖项和已配置的选项。
如果您对这个输出感到满意,并且已经安装了所需的依赖项,那么可以使用make -s clean && make -sj4来构建john的二进制文件。该二进制文件将位于上述运行目录中,您可以使用cd …/run将其更改为该目录
您可以使用./john——test测试这个二进制文件

Windows安装

要在Windows上安装“开膛手江伯约翰”,你只需要下载并安装64位系统或32位系统的压缩二进制文件。 64here32 here.

image-20230726102601432

字典wordlists

单词表

正如我们在第一个任务中解释的那样,为了字典攻击哈希,您需要一个可以哈希和比较的单词列表,不出所料,这被称为单词列表。有许多不同的单词列表,在SecLists存储库中可以找到一个很好的集合。在你选择的攻击系统中,有几个地方可以找到词表,我们将快速浏览一下你可以找到它们的地方。

鹦鹉,卡莉和攻击箱

在Parrot、Kali和TryHackMe的AttackBox上,你可以在/usr/share/wordlists目录下找到一系列惊人的单词列表。

rockyou

对于这个房间里的所有任务,我们将使用臭名昭著的rockyou.txt单词列表——这是一个非常大的普通密码单词列表,是从2009年rockyou.com网站的数据泄露中获得的。如果您没有使用上述任何一个发行版,您可以从/Passwords/ leaks - databases小节下的SecLists存储库中获取rock .txt wordlist。您可能需要从.tar.gz格式中提取它,使用tar xvzf rock .txt.tar.gz。

现在我们已经把哈希破解器和单词列表都设置好了,让我们开始一些哈希破解吧!

image-20230726102955995

破解基本哈希

破解基本哈希

有多种方法可以使用开膛手约翰来破解简单的哈希,在我们继续自己破解一些哈希之前,我们将介绍一些方法。

基本语法

开膛手约翰命令的基本语法如下。我们将介绍使用它们时使用的特定选项和修饰符。

John [options][文件路径]

约翰-调用开膛手约翰程序

[path to file] -包含你试图破解的哈希值的文件,如果它在同一目录下,你不需要命名路径,只需要命名文件。

自动破解
John有内置功能来检测给定的哈希类型,并选择适当的规则和格式来为您破解它,这并不总是最好的主意,因为它可能不可靠-但如果您无法识别正在使用的哈希类型,只是想尝试破解它,这可能是一个不错的选择!要做到这一点,我们使用以下语法:

John—wordlist=[到wordlist的路径][文件的路径]

——wordlist= -指定使用wordlist模式,从您在以下路径中提供的文件中读取…

[path to wordlist] -您正在使用的单词列表的路径,如前一个任务中所述。

使用示例:

John——wordlist=/usr/share/wordlists/rock .txt hash_to_crack.txt

识别散列

有时候John不能很好地自动识别和加载哈希值,这没关系!我们可以使用其他工具来识别散列,然后将john设置为使用特定格式。有多种方法可以做到这一点,例如使用像这样的在线散列标识符。我喜欢使用一个叫做hash-identifier的工具,这是一个非常容易使用的Python工具,它会告诉你输入的哈希可能是什么不同类型的哈希,如果第一个失败,它会给你更多的选择。

要使用哈希标识符,您可以使用:wget https://gitlab.com/kalilinux/packages/hash-identifier/-/raw/kali/master/hash-id.py从gitlab提取python文件。

然后简单地用python3 hash-id.py启动它,然后输入你想要识别的哈希值——它会给你可能的格式!

特定于格式的开裂

一旦你确定了你正在处理的哈希,你可以告诉john在使用下面的语法破解提供的哈希时使用它:

——format=[format]——wordlist=[到wordlist的路径][到文件的路径]

——format=——这是一个标志,告诉John你给了它一个特定格式的散列,并使用下面的格式来破解它

[format] -哈希值的格式

使用示例:

——format=raw-md5——wordlist=/usr/share/wordlists/rock .txt hash_to_crack.txt

格式说明:

当你告诉john使用格式时,如果你处理的是标准哈希类型,比如上面例子中的md5,你必须给它加上前缀withi——告诉john你处理的是标准哈希类型,尽管这并不总是适用。要检查是否需要添加前缀,您可以使用John——list=formats列出John的所有格式,然后手动检查,或者使用John——list=formats | grep -iF "md5"之类的命令grep查找您的哈希类型。

实用
现在您已经了解了破解基本哈希的语法、修饰符和方法,您可以自己尝试一下!下载附带的.txt文件

image-20230726105224279

破解Windows身份验证哈希

打碎窗户

现在我们了解了开膛手约翰的基本语法和用法,让我们继续破解一些更困难的东西,如果你在进行真正的渗透测试或红队参与,你甚至可能想尝试一下。身份验证散列是操作系统存储的密码的散列版本,有时可以使用我们正在使用的暴力破解方法来破解它们。要获得这些散列,您通常必须已经是一个特权用户—因此我们将在尝试时解释我们计划破解的一些散列。

NTHash / NTLM

NThash是现代Windows操作系统机器存储用户和服务密码的哈希格式。它通常也被称为“NTLM”,它引用了以前版本的Windows格式的散列密码,称为“LM”,因此是“NT/LM”。

稍微回顾一下历史,Windows产品的NT名称最初意味着“新技术(New Technology)”,并且从Windows NT开始,用于表示不是基于MS-DOS操作系统构建的产品。最终,“NT”系列成为微软发布的标准操作系统类型,这个名字被删除了,但它仍然存在于一些微软技术的名称中。

可以通过将SAM数据库转储到Windows机器上、使用Mimikatz之类的工具或从Active Directory数据库NTDS.dit获取NTHash/NTLM哈希值。您可能不必破解哈希来继续特权升级—因为您通常可以执行“传递哈希”攻击,但如果存在弱密码策略,有时破解哈希是一个可行的选择。

实用

现在您已经了解了它背后的理论,看看您是否可以使用我们在上一个任务中练习的技术,以及这是什么类型的散列来破解ntlm.txt文件!

image-20230726105702183

破解/etc/shadow哈希

从/etc/shadow 中破解散列

etc/shadow 文件是 Linux 机器上存储密码哈希的文件,它还会存储其他信息,如上次密码更改日期和密码过期信息,shadow文件的每一行都为系统的每个用户或用户帐户包含一个条目。

这个文件通常只有 root 用户才能访问——因此,为了获得文件的哈希值,你必须拥有足够的特权,你才有机会破解一些哈希值。

Unshadowing(去除shadow)

John 对于需要使用的数据格式有一定要求,所以为了破解/etc/shadow密码你必须将/etc/shadow与/etc/passwd 文件组合起来,以便 John 能够理解所给出的数据。为此,我们需要使用一个内置在 John 工具套件中的名为 unshadow 的工具。unshadow 的基本语法如下:

unshadow [path to passwd] [path to shadow]

unshadow            调用 unshadow 工具
[path to passwd]    包含从目标计算机获取的/etc/passwd 文件副本的文件路径
[path to shadow]    包含从目标计算机获取的/etc/shadow 文件副本的文件路径

示例用法:

unshadow local_passwd local_shadow > unshadowed.txt

注意:

在使用 unshadow 时,你可以使用完整的/etc/passwd 和/etc/shadow 文件——如果它们可用的话,也可以使用每个文件中的相关行,例如:

FILE 1 - local_passwd
包含 root 用户的/etc/passwd 行:
root:x:0:0::/root:/bin/bash

FILE 2 - local_shadow
包含 root 用户的/etc/shadow 行:
root:$6$2nwjN454g.dv4HN/$m9Z/r2xVfweYVkrr.v5Ft8Ws3/YYksfNwq96UL1FX0OJjY1L6l.DS3KEVsZ9rOVLB/ldTeEL/OIhJZ4GMFMGA0:18576::::::

在完成unshadow处理之后,我们将 unshadow 的输出直接提供给 John,在我们的示例中 这个输出结果被称为“ unshadowed. txt”。

我们不需要在这里指定哈希格式,因为我们已经专门为 John 做了输入处理(使用unshadow处理),但是在某些情况下,你仍然需要指定哈希格式:

--format=sha512crypt

john --format=sha512crypt --wordlist=/usr/share/wordlists/rockyou.txt unshadowed.txt

image-20230726110157604

Single Crack Mode

single模式简介

john还有另一种模式,叫做single破解模式。在这种模式下,john 只使用用户名中提供的信息,通过稍微更改用户名中包含的字母和数字(字词混淆),试探性地计算出可能的密码值。

字词混淆

要展示什么是single破解模式,什么是字词混淆,最好的方法是通过一个实际的例子:

如果用户名是 Markus
那么一些可能的密码可以是:
Markus1, Markus2, Markus3
MArkus, MARkus, MARKus 
Markus!, Markus$, Markus*
......

这种技巧被称为字词混淆,在这个过程中,John 正在建立一个自己的字典,这个字典是基于它接收到的信息所建立的,并且使用了一系列“混淆规则”,这些规则定义了它如何根据你想要破解的目标的相关因素来变异它开始的单词,进而生成一个字典。这是对弱密码生成策略的一种利用,因为很多弱密码都是基于用户名信息,或者用户所登录的服务而产生。

GECOS

John 实现的字词混淆处理还具有与 UNIX 操作系统(以及其他类 UNIX 操作系统,如 Linux)的 Gecos 字段兼容的特性。

那么,什么是 Gecos?还记得在上文中我们提到的/etc/shadow 和/etc/passwd 的数据条目吗?

如果你仔细看,你会发现shadow文件和passwd文件中的每个字段都用冒号":" 分隔,这些记录被分割成的每一个字段都称为 Gecos 字段。

John 可以将存储在这些记录中的信息,比如全名和主目录名等信息,添加到它用single模式破解/etc/shadow哈希时 生成的字符串中。

使用single模式

如果我们要破解用户名为Mike的密码,我们使用的语法如下:

john --single --format=[format] [path to file]
--single     这个标志让 john 知道你想使用单破解模式。

示例用法:

john --single --format=raw-sha256 hashes.txt

注意:如果你想在单破解模式下破解哈希,那么你需要更改提供给 john 的文件内容,以便john理解 根据哪些数据开始创建字典,为此,你可以将哈希文件所属的用户名添加到哈希值开头,根据上面的示例,我们将更改文件 hashes.txt

从
1efee03cdcb96d90ad48ccc7b8666033
改为
mike:1efee03cdcb96d90ad48ccc7b8666033

image-20230726113657037

自定义规则

理论

什么是自定义规则?

在我们探索 John的单破解模式能做什么的过程中——你可能会有一些关于什么是适合的破解模式的想法,或者你的密码经常使用什么哈希模式加密——这些想法可以通过某种破解模式来复制。你可以定义自己的规则集,John将使用这些规则来动态创建密码。当你足够了解关于你的目标密码结构的信息时,自定义规则非常有用。

通用的自定义规则

许多组织需要一定程度的密码复杂性来对抗字典攻击,也就是说,如果你在某个地方创建了一个帐户,你可以创建一个密码并输入:

polopassword(此处是举例)

然后你就可能会收到一个提示,告诉你密码必须至少包含以下内容之一:

大写字母

数字

符号

我们可以利用这样一个规则,即大多数用户在这些字符的输入位置上是可以预测的。对于上述密码标准要求,许多用户可能会使用以下内容:

Polopassword1!

密码首先是大写字母,最后是一个数字和一个符号,这种熟悉的密码模式,由修饰词(如大写字母或符号)附加和预置,是人们在创建密码时经常会使用和重用的令人难忘的模式。这种模式可以让我们利用密码复杂性的可预测性:从我们的字典中创建动态密码来进行密码破解。

如何创建自定义规则

自定义规则可以在john.conf配置文件中定义,通常路径是/etc/john/john.conf,如果你已经使用包管理器安装了 John,或者使用 make 从源代码构建了John,那么你可以直接在刚才提及的路径下找到并查看john.conf文件。

让我们了解一下这些自定义规则的语法:

第一行:
[List.Rules:THMRules] 用于定义自定义规则的名称,就是你将用来作为 John 参数调用自定义规则的名称。

然后,我们使用正则表达式模式匹配来定义字词中的哪些地方将被修改,我们在这里只讨论基本的和最常见的修饰符:
Az  获取原密码单词并将你定义的字符附加在其后面
A0  获取原密码单词并将你定义的字符前置在其前面
c   使用大写字母

这些修饰符可以结合使用来定义你要修改的原密码单词的位置和内容。

最后,我们要定义哪些字符应该被附加或者前置,我们通过在方括号中添加字符集来实现这一点,而且[ ]要放在" "里面,下面是一些常见的例子:
[0-9]       包括0-9数字
[0]         只包括数字0
[A-z]       包括大写和小写字母
[A-Z]       只包括大写字母
[a-z]       只包括小写字母
[a]         只包括字母a
[!£$%@]     包括特殊符号!£$%@

将我们需要的修饰符放在一起,以便根据与示例密码“Polopassword1!”匹配的规则来生成一个新的单词列表(假设初始密码单词polopassword在我们的原单词列表中,我们将基于原单词列表进行扩展),我们可以创建一个如下所示的规则条目:

[List.Rules:PoloPassword]
cAz"[0-9] [!£$%@]"

#c       表示把第一个字母大写
#Az      表示附加到原密码单词的末尾
#[0-9]   表示0-9范围内的一个数字
#[!£$%@] 表示在刚才的数字后面跟着一个特殊符号(指定范围内的符号)

使用自定义规则

我们现在可以使用--rule=PoloPassword参数选项来应用自定义规则并扩展原单词列表,最终我们将得到一个新的单词列表:

john --wordlist=[path to wordlist] --rule=PoloPassword [path to file]

注意:Jumbo John已经提供了包含许多密码规则的集合,对应着很多可以选择的修饰符组合;如果某个规则的语法无法正常工作,请尝试查看john.conf文件的第696行以后的List.Rules部分内容。

image-20230726114032536

破解受密码保护的Zip压缩文件

理论

我们可以用 John 破解密码保护的 Zip 文件:首先使用 John 工具套件的一个独立部分能将 zip 文件转换成 John 能够理解的格式(提取hash值),然后再进行破解。

zip2john

与我们之前使用的 unshadow 工具类似,我们将使用 zip2john 工具将 zip 文件转换为 John 能够理解的哈希格式(提取hash值),zip2john 的基本用法是这样的:

zip2john [options] [zip file] > [output file]

[options]           允许你向 zip2john 传递特定的校验和选项,这通常是不必要的
[zip file]          希望提取hash值的zip文件的路径
>                   这是输出指示器,我们用它来将这个文件的输出发送到..。
[output file]       这个文件将存储输出结果

示例用法
zip2john zipfile.zip > zip_hash.txt

开始破解

使用了zip2john之后,我们就能够在示例中获取从 zip2john 输出的名为“ zip _ hash.txt”的文件,正如我们使用 unshadow 所做的那样,我们将“ zip _ hash.txt”直接提供给 john,因为我们已经为该文件做了输入格式的处理:

john --wordlist=/usr/share/wordlists/rockyou.txt zip_hash.txt

image-20230726114829645

破解受密码保护的 RAR 归档文件

理论

我们可以使用与上一小节中类似的过程来破解rar归档文件的密码。 rar 归档文件是由 Winrar 归档管理器创建的压缩文件,和zip一样,rar可以作为各种各样的文件夹和文件的压缩格式。

rar2john

rar2john几乎与我们刚才使用的 zip2john 工具相同,我们可以使用 rar2john 工具将 rar 文件转换为john能够理解的hash格式(提取hash值)。基本语法如下:

rar2john [rar file] > [output file]

rar2john             调用 rar2john 工具
[rar file]           想要提取hash值的rar文件的路径
>                    这是输出指示器,我们用它来将这个文件的输出发送到..。
[output file]        这是存储输出结果的文件

示例用法
rar2john rarfile.rar > rar_hash.txt

开始破解

使用了rar2john之后,我们就能够在示例中获取从 rar2john输出的名为“ rar _ hash.txt”的文件,我们将“ zip _ hash.txt”直接提供给 john,因为我们已经为该文件做了输入格式的处理:

john --wordlist=/usr/share/wordlists/rockyou.txt rar_hash.txt

image-20230726115142382

使用john破解SSH密钥

理论

破解 SSH 密码

使用 John 可以破解id _ rsa文件的SSH 私钥密码。除非另外配置,否则你将使用密码对 SSH 登录进行身份验证。你可以配置基于密钥的身份验证,这使你可以使用你的私钥id _ rsa作为通过 SSH 登录到远程计算机的身份验证密钥。但是,这样做通常需要设置一个密码------在这里,我们将使用 john 来破解这个密码,以允许我们通过 SSH 使用密钥进行身份验证。

ssh2john

ssh2john 可以将用于登录到 SSH 会话的id _ rsa 私钥转换为 john能够识别的hash格式(提取hash值),使用语法如下:

ssh2john [id_rsa private key file] > [output file]

[id_rsa private key file]       希望提取hash值的id_rsa文件的路径
>                               这是输出指示器,我们用它来将这个文件的输出发送到..。
[output file]                   这是存储输出结果的文件

示例用法
ssh2john id_rsa > id_rsa_hash.txt

开始破解

使用了ssh2john之后,我们就能够在示例中获取从 ssh2john输出的名为“id_rsa_hash.txt”的文件,我们将“ id_rsa_hash.txt”直接提供给 john,因为我们已经为该文件做了输入格式的处理:

john --wordlist=/usr/share/wordlists/rockyou.txt id_rsa_hash.txt

语法如下:

ssh2john [id_rsa private key file] > [output file]

[id_rsa private key file]       希望提取hash值的id_rsa文件的路径
>                               这是输出指示器,我们用它来将这个文件的输出发送到..。
[output file]                   这是存储输出结果的文件

示例用法
ssh2john id_rsa > id_rsa_hash.txt

开始破解

使用了ssh2john之后,我们就能够在示例中获取从 ssh2john输出的名为“id_rsa_hash.txt”的文件,我们将“ id_rsa_hash.txt”直接提供给 john,因为我们已经为该文件做了输入格式的处理:

john --wordlist=/usr/share/wordlists/rockyou.txt id_rsa_hash.txt

image-20230726115234455

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值