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进行破解。