John the ripper是一款大受欢迎的、基于字典的密码破解工具。它使用内容全是密码的单词表,然后使用单词表中的每一个密码,试图破解某个特定的密码散列。换句话说,它又叫蛮力密码破解,这是一种最基本的密码破解方式。不过它也是最耗费时间、最耗费处理器资源的一种方法。尝试的密码越多,所需的时间就越长。
John有别于Hdra之类的工具。Hydra进行盲目的蛮力攻击,其方法是在FTP服务器或Telnet服务器上的服务后台程序上尝试用户名/密码组合。不过,John首先需要散列。所以,对黑客来说更大的挑战是,先搞到需要破解的散列。如今,使用网上随处可得的免费彩虹表(rainbow table),比较容易破解散列。只要进入到其中一个网站,提交散列;要是散列由一个常见单词组成,那么该网站几乎立马就会显示该单词。彩虹表基本上将常见单词及对应散列存储在一个庞大的数据库中。数据库越大,涵盖的单词就越多。
但是如果你想在自己的系统上本地破解密码,那么John是值得一试的好工具之一。John跻身于Kali Linux的十大安全工具。在Ubuntu上,它可以通过新立得软件包管理器(synaptic package manager)来安装。
我在本文中将向各位介绍如何使用unshadow命令连同John,在Linux系统上破解用户的密码。在Linux上,用户名/密钥方面的详细信息存储在下面这两个文件中。
/etc/passwd/etc/shadow
实际的密码散列则存储在/etc/shadow中;只要对该机器拥有根访问权,就可以访问该文件。所以,试着从你自己的Linux系统来访问该文件。或者先创建一个使用简单密码的新用户。我会在自己的Linux系统上创建一个名为happy的新用户,其密码为chess。
root@kali:~# adduser happyAdding user `happy' ...Adding new group `happy' (1001) ...Adding new user `happy' (1000) with group `happy' ...Creating home directory `/home/happy' ...Copying files from `/etc/skel' ...Enter new UNIX password: Retype new UNIX password: passwd: password updated successfullyChanging the user information for happyEnter the new value, or press ENTER for the default Full Name []: Room Number []: Work Phone []: Home Phone []: Other []: Is the information correct? [Y/n] yroot@kali:~#
为了方便演示,最好使用一个简单的密码,那样你没必要等待太长的时间。由于我们的新用户已创建完毕,现在可以破解其密码了。
unshadow
unshadow命令基本上会结合/etc/passwd的数据和/etc/shadow的数据,创建1个含有用户名和密码详细信息的文件。用法相当简单。
root@kali:~# unshadowUsage: unshadow PASSWORD-FILE SHADOW-FILEroot@kali:~# unshadow /etc/passwd /etc/shadow > ~/file_to_crack
我们将unshadow命令的输出结果重定向至名为file_to_crack的新文件。
借助John来破解
现在这个新文件将由John来破解。就单词表而言,我们将使用Kali Linux上的John随带的密码列表。它位于下面这个路径:
/usr/share/john/password.lst
你也可以使用自己的密码列表。
root@kali:~# john --wordlist=/usr/share/john/password.lst ~/file_to_crack Warning: detected hash type "sha512crypt", but the string is also recognized as "crypt"Use the "--format=crypt" option to force loading these as that type insteadLoaded 2 password hashes with 2 different salts (sha512crypt [64/64])chess (happy)guesses: 1 time: 0:00:00:21 DONE (Tue May 14 06:47:58 2013) c/s: 300 trying: sssUse the "--show" option to display all of the cracked passwords reliablyroot@kali:~#
所以在上面这个命令中,John能够破解散列,为我们破解出用户“happy”的密码“chess”。现在,John能够破解,就因为密码“chess”出现在密码列表中。要是该密码没有出现在密码列表中,那么John就会失败。
使用show选项,列出所有被破解的密码。
root@kali:~# john --show ~/file_to_crack happy:chess:1000:1001:,,,:/home/happy:/bin/bash1 password hash cracked, 1 leftroot@kali:~#
剩余的1个密码是用户root的密码。所提供的单词表中没有一个密码破解得了。
不用单词表
要是不使用密码列表就想借助John破解密码,最简单的办法就是这样:
root@kali:~# john ~/file_to_crack
按照说明文档
这会先尝试“简单破解”(single crack)模式,然后使用带规则的单词表,最后是尝试“增强破解”(incremental)模式。