网络攻防实战研究:漏洞利用与提权
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.3 使用John the Ripper破解Linux密码

John the Ripper(以下简称“John”)是Kali Linux的十大安全工具之一,是一款基于字典的密码破解工具,官方网站为http://www.openwall.com/john/,目前适用于Windows的版本为john179j5w,适用于Linux的版本为John 1.8.0。John的内容全是密码的单词表,它使用单词表中的每一个密码,试图破解特定的密码散列。换句话说,John使用暴力破解,其破解效率与字典和密码设置强度有关。从总体上看,John是一款不错的Linux密码暴力破解工具,在Windows和Linux下都有图形界面。Windows图形界面可以访问http://openwall.info/wiki/john/johnny下载。

1.3.1 准备工作

1.下载并解压

访问John的官方网站,下载Windows环境下的john179j5w版本(http://www.openwall.com/john/g/john179j5w.zip),将文件直接解压到run目录下。

2.字典文件

需要提前准备密码字典文件,一个密码占一行。如果是有针对性的破解,可以收集网站的所有密码,进行社工组合。

3.整理需要破解的密码文件

Linux密码涉及两个文件,分别是/etc/passwd和/etc/shadow。先将passwd和shadow文件下载,或者读取其内容并保存为相应的文件,然后将用户名后面的字符串复制到一个txt文件中(例如命名为shadow.txt),如图1-39所示。

图1-39 整理需要破解的Linux密码

1.3.2 John的4种破解模式

下面介绍John的4种破解模式。

1.字典文件破解模式(Wordlist Mode)

这是John所支持的破解模式中最简单的一种,我们要做的唯一工作就是告诉John字典文件在哪里(字典文件是文本文件,每行一个单字,代表尝试的密码),以便John取出破解。在字典文件破解模式里,可以使用“字词变化”功能让每个读入的单字自动套用这些规则,以提高破解机率。

2.简单破解模式(Single Crack)

简单破解模式是针对将账号作为密码使用的“懒人”所设计的。如果一个使用者的账号是“john”,密码也为“john”,那么在简单破解模式里John会拿密码文件内“账号”列的相关信息来破解密码,并且将多种字词变化规则套用到“账号”内,以提高破解的机率。例如,对账号“john”,会尝试用“john”、“john0”、“njoh”、“j0hn”等来破解。

3.增强破解模式(Incremental Mode)

这是John功能最强大的破解模式,它会自动尝试所有可能的字符组合,然后将其当作密码来破解。这个破解模式所需要的时间非常长,因为尝试组合字符要耗费非常多的时间,所以John定义了一些字符频率表(Character Frequency Tables)来帮助破解。简言之,这种破解方法就是暴力破解法,把所有可能的密码组合都测试一次,以得到正确的结果。

4.外挂破解模式(External Mode)

这种破解模式让使用者可以自己用C语言编写一些破解模式程序,然后将其挂在John里面使用。其实所谓“破解模式程序”就是一些用C语言设计的函数,其功能就是产生一些单字来让John尝试破解。运行John,当载入破解模式程序时会自动编译这些C语言函数并使用它们。

在默认情况下,John使用passwd.lst作为攻击用的字典文件。我们可以编辑这个文件或创建自己的口令文件,命令如下。

        john -single passwd                           //单一模式
        john -wordfile:bigdict.dic passwd             //字典破解模式
        john -wordfile:bigdict.dic -rules passwd     //字典加规则进行破解
        john -i:all passwd                            //增强模式破解
        john -external:double passwd                  //外挂模式破解

1.3.3 使用John破解Linux密码

将密码字典文件及其需要破解的Shadow放在John目录的run文件夹中,然后根据情况进行破解。password.dic为密码字典,shadow.txt是需要破解的Linux密码文件。

1.简单密码破解

“John-single shadow.txt”和“john shadow.txt”命令是最直接、最简单的破解方式。如图1-40所示,简单密码的破解效果不一定很好,主要是根据用户名来做一些变化。例如,“antian”是用户名,使用简单模式,可能会设计密码“antian123”、“antian456”等来破解“傻瓜型”的密码。

图1-40 使用简单模式进行破解

2.使用密码字典进行破解

这是John破解模式中最简单的一种,需要指定字典位置,如果没有指定路径,则默认是在当前目录下。在字典破解模式里,可以使用字词变化功能在每个读入的单字中自动套用这些规则,以提高破解机率,命令如下。

        john -wordlist=password.dic shadow.txt

或者

        john -w:pass.txt shadows.txt

或者

        john.exe -wordlist=D:\john\dic\password.dic  D:\john\shadow\shadow.txt

密码字典可以访问https://wiki.skullsecurity.org/Passwords下载。一般来讲,如果有特定信息组合的字典,破解效果会比较好,也就是说,要收集一切可能是被破解用户密码的信息(目前有社工字典生成器可供选择)。本例随机使用一些组合字典,如图1-41所示,对shadow.txt文件中的密码进行破解,破解成功的会显示密码和用户名。如果需要查看详细信息,可以打开John目录下的john.pot文件,如图1-42所示,会显示密码值和破解的密码明文。

图1-41 显示破解成功的用户名和密码

图1-42 查看john.pot文件

3.使用规则模式+字典进行破解

        john  -w: password.dic  -rules   shadow.txt

rules在john.ini文件中定义。

1.3.4 查看破解结果

使用“john-show shadow.txt”命令可以查看破解结果。

破解Linux密码,首先需要使用unshadow命令,得到一个破解程序识别的口令文件,然后将/etc/passwd和/etc/shadow文件组合起来,执行“unshadow/etc/passwd/etc/shadow>passwd”命令,再使用John进行破解。