John the Ripper 实例

John the Ripper的用法例子

这些例子是为了给你一些关于John的特征可以用来做什么的建议。

命令行

  1. 首先,您需要获得密码文件的副本。如果您的系统使用影子密码,您可以使用John的“unshadow”工具来获取传统的Unix密码文件,作为root用户:
    umask 077
    unshadow /etc/passwd /etc/shadow > mypasswd

(如有需要,你可能需要更换档案名称。)

然后,让“mypasswd”对您将运行John的非根用户帐户可用。不需要以root用户身份运行其他命令。

如果您的系统足够古老,它将密码保存在 world-readable /etc/passwd中,只需复制该文件。

如果您想破解Kerberos AFS密码,请使用John的“unafs”实用程序获取一个类似passwd的文件。

类似地,如果要破解Windows密码,可以使用Jeremy Allison的PWDUMP输出格式中的任意一种工具来转储Windows密码散列(LM和/或NTLM)。其中一些实用程序可在此获得:https://www.openwall.com/passwords/pwdump

  1. 现在,假设您有一个密码文件“mypasswd”,并希望破解它。最简单的方法是让John使用其默认的顺序破解模式:
    john mypasswd

这将首先尝试“单一破解”模式,然后使用带有规则的wordlist,最后使用“增量”模式。有关这些模式的更多信息,请参阅模式。

强烈建议您获取一个比John的默认password.lst更大的单词列表,并在运行John之前,编辑配置文件中的”Wordlist =…”行。以下是一些词汇表:https://www.openwall.com/wordlists/

在上述网址集合中都是可用的,all.lst(可下载为all.gz)和huge.lst(仅在CD上可用)是“Wordlist=…”设置的好选项。

  1. 如果你的一些密码被破解了,它们就储存在$JOHN/ JOHN .pot中。John.pot文件对人类并不是友好的。您应该使用John本身以方便的格式显示其“pot文件”的内容:
    john --show mypasswd

如果帐户列表变大,屏幕无法显示,当然,您应该使用shell的输出重定向。

您可能会注意到,许多帐户都禁用了shell。你可以让John跳过报告中的那些。假设禁用的shell调用为“/etc/expired”,该命令为:
john --show --shells=-/etc/expired mypasswd

或更短,但也匹配“/any/path/expired”:
john --show --shells=-expired mypasswd

或者如果你也想忽略一些其他shell,说“/etc/newuser”:

john——show——shell =-expired,newuser mypasswd

检查是否有根账户(UID 0)被破解:

user =0 mypasswd

或检查多个文件中的root (UID 0)帐户:

john——show——users=0 *passwd* *.pwd

仅显示根(用户名“根”)帐户:

john -show -users=root mypasswd

最后,检查一下特权群体:

john --show --groups=0,1 mypasswd

  1. 您可能更喜欢手动管理破解模式。从“单一破解”模式开始是明智的:

john --single mypasswd

或者因为gnu样式的双破折号是可选的,因为选项名可以缩写,只要它们保持不模糊:

john -si mypasswd

您不应该在您希望与John的未来版本一起使用的脚本中缩写选项,因为现在没有歧义的内容可能会随着更多选项的添加而变得模糊。

如果你有更多的文件破解,最好是加载他们在同一时间:

john --single passwd1 passwd2

或者

john --single *passwd* *.pwd

这样,John会比你在每个密码文件上分别运行它更快,甚至可能破解更多的密码。

  1. 为了捕获不来自于可用用户个人信息的弱密码,您应该继续使用需要更多处理器时间的破解模式。首先,让我们尝试一个小小的单词列表,启用了单词混乱规则:

John——wordlist =password.lst --rules mypasswd

或缩写选项:

John- w =password.lst -ru mypasswd

然后继续做一个更大的单词列表,也应用混乱的规则:

john --wordlist=all.lst --rules mypasswd

如果你有很多空闲的磁盘空间来交换性能和你的密码文件的哈希类型是相对缓慢,你可以使用John的“唯一”实用程序来消除任何重复的候选密码:

John——wordlist =。stdout | unique mangled.lst
John——wordlist =mangled.lst mypasswd

如果你知道你的目标哈希类型截断密码在一个给定的长度,你可以进一步优化:

john --wordlist=all.lst --rules --stdout=8 | unique mangled8.lst
john --wordlist=mangled8.lst mypasswd

或者,您可以简单地使用在Openwall wordlist收集CDs上可用的huge.lst。它为最常见的语言预先应用了单词混淆规则,并且清除了所有重复的内容。

根据目标哈希类型、不同salt的数量(如果适用)、wordlist的大小、规则和处理器性能,基于wordlist的破解可能需要不到一秒到多天的时间。

您不必让John在(伪)终端上运行。如果在类unix系统上运行John,您可以简单地断开与服务器的连接,关闭xterm等。John会赶上SIGHUP(“挂断”信号)并继续跑。或者,你也可以选择在后台立即启动:

john --wordlist=all.lst --rules mypasswd &

显然,“&”是Unix shell特有的,不能在大多数其他平台上工作。

你可以通过指定一个会话名来进一步增强这一点:

john --session=allrules --wordlist=all.lst --rules mypasswd &

这确保了在继续启动其他会话时,不会意外地干扰在后台运行的John实例。

要查看正在运行的会话的状态,使用:

john --status

为默认会话:

john --status=allrules

这对中断的和正在运行的会话都有效。要从unix-like系统上运行的会话中获得最新的信息,请向适当的“john”进程发送SIGHUP。

任何中断的会议可继续:

john --restore
或者:

john --restore=allrules

最后,为了减少John对其他进程的影响,您应该在配置文件(参见CONFIG)中设置选项“Idle = Y”。默认值可能会根据JtR的版本和构建版本而有所不同。

破解帐户只携带了一个“good”shell(通常,上面描述的shell、用户和组过滤器也适用于所有破解模式):

john --wordlist=all.lst --rules --shells=sh,csh,tcsh,bash mypasswd

像所有其他破解模式,它是更快破解所有文件,你需要同时破解:

john --wordlist=all.lst --rules passwd1 passwd2

你只能破解一些密码。这将尝试破解所有密码文件中的所有根(UID 0)帐户:

john --wordlist=all.lst --rules --users=0 *passwd*

或者,你可能希望不要浪费时间破解你自己的密码,如果你确定他们是不可破解的:

john --wordlist=all.lst --rules --users=-root,solar *passwd*

有时,把你的密码散列分解成两个单独破解的集合是有用的,如:
john --wordlist=all.lst --rules --salts=2 *passwd*
john --wordlist=all.lst --rules --salts=-2 *passwd*

这将使John先尝试在两个或多个密码散列上使用salt,然后再尝试其余的。总的破解时间几乎是相同的,但是您会提前破解一些密码,这对于渗透测试和对管理的演示非常有用。类似地,你可以用一个小单词列表来检查所有的密码散列,但是只有那些你可以用一个大单词列表更快地检查的密码散列(用“—salts=2”)。对于大量的密码散列和/或salt高度不均匀分布的情况,使用大于2的阈值(有时甚至高达1000也可以)是合适的。

请注意,默认的wordlist规则在第一行包括“:”(在列表中不使用的单词)。如果您已经在没有使用规则的情况下浏览了wordlist,然后又决定尝试使用相同的wordlist规则,那么您最好将这一行注释掉。

  1. John中最强大的破解模式被称为“增量式”(这不是一个恰当的名称,但由于历史原因保留了下来)。你可以简单地运行:

john --incremental mypasswd

或者:

john -i mypasswd

这将使用默认的“增量”模式参数,这些参数是在配置文件的节中定义的,名为 incremental:ASCII 或[incremental:LM_ASCII ](对于Windows LM哈希)。默认情况下,[Incremental:ASCII ]参数被设置为使用完整的可打印ASCII字符集(95个字符),并尝试从0到13的所有可能的密码长度(如果当前哈希类型的最大密码长度较低,则递增模式的长度限制相应减少)。[Incremental:LM_ASCII ]与此类似,只是它利用了LM哈希不区分大小写的优点,而且每个哈希的两部分限制为7个字符。

不要期望“增量”模式会话在合理的时间内终止(除非所有密码都很弱并被破解),请阅读模式来对此进行解释。

在某些情况下,使用其他预先定义的增量模式参数,并且只破解有限的字符集中的较简单的密码会更快。下面的命令将只尝试10个不同的字符,密码从“0”到“999999999999999999”(按最佳顺序):

john -i=digits mypasswd

当然,您也可以将上面演示的大多数附加特性用于wordlist模式和“增量”模式。例如,在大规模渗透测试中,您可能在一组密码文件中拥有John crack only root (UID 0)帐户:

john -i -u=0 *.pwd

  1. 如果你有一个密码文件,你已经有很多密码破解或通过其他方式获得,密码是不寻常的,然后你可能想要生成一个新的字符集文件,基于字符频率从该密码文件:

john --make-charset=custom.chr mypasswd

然后使用“增量”模式的新文件。

如果你有很多密码文件来自一个特定的国家,组织,等等,它可能是有用的使用他们所有的字符集文件,然后你使用这些文件破解更多的密码或其他密码文件从相同的地方:

john --make-charset=custom.chr passwd1 passwd2

现在配置你的自定义“增量”模式。
john -i=custom passwd3

你可以使用一些预先定义或自定义的字过滤器时,产生的字符集文件,让John考虑一些简单的密码只有:

john --make-charset=my_alpha.chr --external=filter_alpha mypasswd

如果你的“pot文件”足够大(或者你根本没有任何字符集文件),你可能想用它来生成一组新的主字符集文件:

makechr

其中,“makechr”是调用“john—make-charset=…”的脚本,文件名不同,用于配置文件中定义的所有外部模式字过滤器。在本例中,John将使用基于整个$ John / John.pot的新字符集文件覆盖字符集文件。(如果您没有指定任何密码文件,John会使用整个“pot文件”)。

  1. 最后,您可能希望向所有使用弱密码的用户发送电子邮件,告诉他们更改密码。(但这并不总是一个好主意,因为很多人不检查他们的电子邮件或忽略这些信息,这些信息可能是cookie的提示。)编辑John提供的“mailer”脚本:它发送的消息和可能的邮件命令(特别是如果密码文件来自另一台机器)。然后运行:

mailer mypasswd

配置文件

有关配置文件及其可能位置的一般信息,请参阅配置。

  1. 让我们假设您注意到在某个密码文件中,许多用户的密码被设置为附加了“?!”的登录名。然后创建一个新的“single crack”模式规则(关于语法的信息,请参阅规则),并将其放在开始的附近:

[List.Rules:Single]
Az"?!"

提示:如果你想暂时禁用所有默认的规则,您可以简单地将部分重命名为John不使用和定义一个新的部分的旧名字,但一定要离开“列表。”前缀的名字完好保持正确的配置文件的语法。

同样也适用于wordlist模式规则。

  1. 如果您生成了一个定制的charset文件(如上所述),那么您还需要定义一个配置文件节,该节使用“增量”模式参数。最简单的情况是这样的(“Custom”可以替换为任何你喜欢的名字):

[Incremental:Custom]
File = custom.chr

这样,John将只使用用于生成字符集文件的密码中的字符。为了让John尝试更多的角色,添加:

Extra = !@#$%

这些额外的字符将被添加,但仍然被认为是最不可能的。如果你想确定,John会在你的额外角色中尝试95个不同的角色,你可以加上:

CharCount = 95

这将使John打印一个警告,如果它的字符集中只有少于95个字符。

你也可以使用CharCount来限制John尝试的不同字符的数量,即使charset文件有更多:

CharCount = 20

如果在生成charset文件时没有使用任何过滤器,那么将CharCount设置得这么低将使John永远不会尝试稀有字符和字符组合,即使对于非常短的密码也不会,而是将时间花在简单的较长的候选密码上。然而,默认的长度切换通常足够聪明,所以你不需要这个技巧。

要让John尝试特定长度的密码,请使用以下代码行:

MinLen = 6
MaxLen = 8

设置“MinLen”,在上面的示例中,是合理的,如果短密码不允许在机器上设置你的密码文件(然而,注意根通常可以设置任何用户和密码经常有漏洞操作系统的密码策略执行功能)。

相反,如果您认为有很多短密码,您可能会希望将“MaxLen”设置得较低。

  1. 另一个例子:很多网站的用户使用简短的重复单词作为密码,比如“fredfred”。由于这种潜在密码的数量相当低,因此编写一种新的外部破解模式是有意义的,该模式可以尝试所有这些密码,直到一定长度。

您可以在John提供的默认配置文件中找到这种破解模式的实际实现,其中有许多注释。有关所使用的编程语言的信息,请参阅外部模式。

本文章首发在 网安wangan.com 网站上。

上一篇 下一篇
讨论数量: 0
只看当前版本


暂无话题~