【THM】开膛手约翰

约翰是谁?

开膛手约翰是目前最知名、最受欢迎和最通用的哈希破解工具之一。它结合了快速的破解速度和一系列非凡的兼容哈希类型。这个房间将假设没有以前的知识,因此在进入实际的哈希破解之前,我们必须首先介绍一些基本术语和概念。

单词列表

单词列表

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

 

鹦鹉、Kali 和 AttackBox

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

 

摇滚优

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

现在我们已经设置好了哈希破解和单词列表,让我们继续进行一些哈希破解!

破解基本哈希

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

可以加我发邮箱我获取练习a2791906083@163.com

John 基本语法

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

john [options] [path to file]

john- 调用开膛手约翰程序

[path to file]- 包含您正在尝试的哈希值的文件 要破解,如果它在同一个目录中,则无需命名路径, 只是文件。

自动破解

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

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

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

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

用法示例:

约翰 --wordlist=/usr/share/wordlists/rockyou.txt hash_to_crack.txt

识别哈希值

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

要使用 hash-identifier,您只需使用 gitlab 拉取 python 文件:。

wget https://gitlab.com/kalilinux/packages/hash-identifier/-/raw/kali/master/hash-id.py

然后只需启动它,然后输入您尝试识别的哈希值 - 它会为您提供可能的格式!

python3 hash-id.py

特定格式破解

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

john --format=[format] --wordlist=[path to wordlist] [path to file]

--format=- 这是一个标志,告诉 John 你给它一个特定格式的哈希值,并使用以下格式来破解它

[format]- 哈希的格式

用法示例:

john --format=raw-md5 --wordlist=/usr/share/wordlists/rockyou.txt hash_to_crack.txt

关于格式的说明:

当你告诉 john 使用格式时,如果你正在处理一个标准的哈希类型,例如上面的例子中 md5,你必须在它前面加上前缀,告诉 john 你只是在处理一个标准的哈希类型,尽管这并不总是适用。要检查是否需要添加前缀,您可以使用以下方式列出 John 的所有格式,然后手动检查,或者使用 grep 来查找您的哈希类型。

john --list=formats | grep -iF "md5"

实际

现在您知道了破解基本哈希的语法、修饰符和方法,请自己尝试一下!下载附加的 .txt 文件

破解 Windows 身份验证哈希

破解 Windows 哈希

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

NTHash / NTLM

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

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

可以通过将 SAM 数据库转储到 Windows 计算机上、使用 Mimikatz 等工具或从 Active Directory 数据库 NTDS.dit 获取 NTHash/NTLM 哈希。您可能不必破解哈希值即可继续权限提升 - 因为您通常可以进行“传递哈希值”攻击,但有时如果密码策略较弱,哈希破解是一个可行的选择。

实际

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

破解ntlm需要将john的format设置为nt模式。

 破解 /etc/shadow 哈希

从 /etc/shadow 破解哈希值

/etc/shadow 文件是 Linux 计算机上存储密码哈希的文件。它还存储其他信息,例如上次更改密码的日期和密码过期信息。 它包含一个条目 系统的每个用户或用户帐户的每行。此文件通常只能由 root 用户访问,因此为了获得哈希值,您必须具有足够的权限,但如果您这样做,您就有可能破解一些哈希值。

 

Unshadowing(去除shadow)

出于这个原因,John 可以非常讲究它需要数据的格式才能使用它 - 为了破解 /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

 

 

 

single破解模式

理论

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

 

                
复制代码

 

自定义规则

理论

什么是自定义规则?

在我们探索 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部分内容。

破解受密码保护的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

用类似unshadow的工具zip2john将文件转化为john认识的文件

 

破解受密码保护的 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

 

使用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

 

posted @   trymonoly  阅读(235)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程
点击右上角即可分享
微信分享提示