如果你是一个安全测试人员,破解密码是你每天都会做的事情,这可能包括登录密码,文件密码,以及几乎所有使用密码保护的东西。
John the Ripper(JtR)是一个流行的密码破解工具。John the Rippe 支持Windows和Unix系统(包括Mac)的许多加密技术。
约翰的一个显著特点是,它可以自动检测常见格式的加密。这将为我们研究哈希格式和寻找正确的工具来破解它们节省大量的时间。
John也是一个基于字典的工具。这意味着,John用常见的密码字典来与手中的哈希值进行比较。这里有一个名为rockyou.txt的常见密码列表。
虽然你可以使用像RockYou这样的流行词表,但John也有自己的一套词表,其中有成千上万的常见密码,这使得John在破解具有弱密码的系统时非常有效。
John默认情况下是这样工作的:
- 识别当前哈希值的哈希类型
- 为字典中的所有密码即时生成哈希值
- 当生成的哈希值与当前哈希值相匹配时停止。
这并不是John寻找密码的唯一方法。我们还可以根据自己的要求对John进行定制,例如,使用- – format标志指定密码的格式。
在这篇文章中,我们将首先安装John,然后对John的不同模式进行演练。然后,我们将使用John来破解三个不同的使用案例的密码—Windows密码、Linux密码和压缩文件密码。
让我们开始破解吧!
安装John the Ripper
如果你使用的是Kali Linux,John已经被预装了。你可以通过输入以下命令来使用John:
john
对于Ubuntu/Debian,你可以从apt源代码中获得John。以下是在Ubuntu中安装John的命令:
apt install John
在Mac,你可以在Homebrew找到John the Ripper:
brew install john
对于windows和其他操作系统,你可以在这里找到二进制文件。
一旦你安装了John,请尝试使用help命令,以确保你的安装是有效的。在使用约翰时,帮助命令也可以作为参考。
下面是帮助命令的输出:

现在我们知道John是什么,让我们看看John提供的三种模式。在你的大多数用例中,你将使用这三种模式之一:
- 单一破解模式
- 词表模式
- 递增模式
让我们来详细了解一下每一种模式
单一破解模式
在单次破解模式下,John接受一个字符串并生成该字符串的变体,以生成一组密码。例如,如果我们的用户名是 “stealth”,密码是 “StEaLtH”,我们就可以使用John的单一模式来生成密码变体(STEALTH、Stealth、STealth,等等)。
我们使用 “format “标志来指定哈希类型,使用 “single “标志来让John知道我们要使用单一破解模式。我们还将创建一个 crack.txt 文件,其中包含用户名和密码的哈希值。
stealth:d776dd32d662b8efbdf853837269bd725203c579
现在我们可以用下面的命令来使用john的单一破解模式:
john --single --format=raw-sha1 crack.txt
这里是结果。你可以看到,john已经成功地找到了正确的密码 “StEaLtH”。
这很有趣,不是吗?现在我们来看看用字典模式来破解更复杂的密码。
字典模式
在字典模式下,我们将向约翰提供一个密码列表。约翰将为这些密码即时生成哈希值,并与我们的密码哈希值进行比较。
在这个例子中,我们将使用RockYou的单词表。如果你使用Kali,你可以在/usr/share/wordlists/rockyou.txt找到它。我们还将有一个只有密码哈希值的crack.txt文件
edba955d0ea15fdef4f61726ef97e5af507430c0
下面是使用单词表在字典模式下运行John的命令。
john --wordlist=/usr/share/wordlists/rockyou.txt --format=raw-sha1 crack.txt
而John很快就找到了密码:

密码越弱,John就能越快地找出它。这就是为什么我们总是建议拥有强大的密码。
递增模式
递增模式是John提供的最强大的模式。它尝试所有可能的字符组合作为密码。
这听起来不错,但有一个问题。如果密码太长或者是字母数字字符和符号的组合,破解会持续很长时间。
除非你没有其他选择,否则你很少会使用这种模式。在通常情况下,社会工程攻击和单词表模式的组合将帮助我们破解大部分的哈希值。
如果你想尝试增量模式,下面是语法:
john -i:digits passwordfile.txt
这里,-i标志告诉约翰,我们要使用增量模式。”digits “占位符可以用来设置密码的最大位数。
你还可以添加 “格式 “选项,使约翰更容易开始破解。
案例
现在我们了解了John的不同模式,让我们来看看几个用例。
我们将用John来破解三种类型的哈希值,一个Windows NTLM密码,一个Linux影子密码,以及一个压缩文件的密码。
破解Windows密码
让我们从Windows开始。在Windows中,密码哈希值被存储在SAM数据库中(https://en.wikipedia.org/wiki/Security_Account_Manager)。SAM使用LM/NTLM哈希格式的密码,所以我们将使用John来破解一个密码。
从SAM数据库中获取密码不在本文的讨论范围之内,但让我们假设你已经获得了一个Windows用户的密码哈希值。
下面是破解它的命令。
john
crack.txt将包含密码的哈希值。如果约翰使用其默认的词表无法破解密码,你可以使用RockYou词表,使用- -词表标志。
破解Linux密码
现在,让我们来破解一个Linux密码。在Linux中,有两个重要文件保存在/etc文件夹中:passwd和shadow。
- /etc/passwd → stores information like username, user id, login shell, etc.
- /etc/shadow → contains password hash, password expiry, etc.
除了 “john “命令外,John还附带了一些其他的实用程序。其中一个叫做 “unshadow”。
unshadow命令将passwd和shadow文件合并为一个文件。然后,这可以被John用来破解密码。
下面是我们如何使用unshadow命令:
$ unshadow /etc/passwd /etc/shadow > output.db
这个命令将把这些文件合并在一起并创建一个output.db文件。我们现在可以用John破解output.db文件。
$ john output.db
John试图在passwd文件中找到所有用户的密码,并生成带有破解密码列表的输出。同样,你可以通过- – 字表标志使用自定义字表。
破解Zip文件密码
最后,让我们来破解一个压缩文件的密码。要做到这一点,我们首先要得到压缩文件的密码的哈希值。
和unshadow一样,John还有一个叫zip2john的工具。zip2john可以帮助我们从压缩文件中获得哈希值。如果你正在破解一个.rar文件,你可以使用rar2john工具。
以下是获取压缩文件的密码哈希值的语法
$ zip2john file.zip > zip.hashes
上述命令将从压缩文件中获取哈希值,并将其存储在zip.hashes文件中。然后你可以用John来破解这个哈希值。
$john zip.hashes
John还具有其他一些功能,可以帮助你破解各种密码。你可以在这里找到约翰(https://www.openwall.com/john/doc/)的完整文档。
如何抵御密码攻击?
到目前为止,我们已经看到如何用开膛手约翰破解密码。但我们如何抵御这些类型的暴力攻击呢?
抵御密码攻击的最简单方法是设置一个强密码。密码越强,它就越难被破解。
第二步是停止在多个网站使用相同的密码。如果一个网站被黑了,你的密码就会暴露在互联网上。然后,黑客可以使用电子邮件/密码组合,在其他网站上测试你的凭证。你可以在这里检查你的密码是否在互联网上(https://haveibeenpwned.com/)。
最后一步是生成随机密码并使用一个密码管理器。有多种选择,包括Chrome内置的谷歌密码管理器。如果你对你使用的每个网站都使用一个强大的密码,那么要破解你的密码就变得非常困难。