4.6 Kali中的密码破解工具
Kali提供了各种各样的工具来绕过密码安全。密码破解工具可以在Password Attacks 中找到,具体分为离线破解工具和在线破解工具两大类。本节将会着重介绍在Web应用渗透测试中危害主机系统的工具。Kali中也有其他一些工具,比如用来破解无线协议密码的工具,不过,本书不会涉及这些。
John the Ripper命令行和Hydra工具在第3章中已经做过介绍。
4.6.1 Johnny
Johnny 是流行的John the Ripper密码破解工具的一个图形化界面。我们在第3章中介绍了传统的John the Ripper命令行版本。跟命令行版本类似,Johnny有若干个引擎,这样它就能破解不同类型的密码,包括加密过的密码和哈希化处理过的密码。Johnny能够自动检测大多数哈希化的密码和加密过的密码,这点使得这个过程对渗透测试人员来说更简单。攻击者都喜欢这个工具,因为它的可定制性非常强,能以各种方式定制,以便加快破解密码的速度。
有些定制可能在Johnny中不可用。对于大多数攻击,我们推荐使用它的命令行版本,John the Ripper。
John the Ripper按如下方式工作:
要使用Johnny,你可以浏览Password Attacks > Offline Attacks ,然后选择Johnny 。点击Open Password File ,选择你要破解的密码文件。下面的截图显示了将带有用户BOB 、mary 和joey 的shadow 文件作为目标的场景。
随着Johnny开始破解密码,Password 列会被逐渐填满。
左侧面板上有Johnny的配置标签。Options 标签是你选择攻击类型的地方。下面的截图显示了默认行为的定义和选择哈希类型的选项。Johnny的自动检测通常能有90%的正确率。
Statistics 标签会显示Johnny已经运行某个活动会话多长时间了。Settings 标签则会指定Johnny以何种方式运行,如下图所示。
默认的John the Ripper的路径设置不一定正确。为了保险起见,你最好验证一下Settings 中的John the Ripper路径。在早期的BackTrack版本中,我们发现必须手动将此路径改为/pentest/passwords/john/john。Kali 1.0默认的路径是/user/sbin/john。
Output 标签显示的是Johnny正在攻击的目标。在这里你还能看到攻击会话中的错误消息和状态更新。下面的例子显示的是一条状态消息,表明Johnny正在识别密码的哈希类型。
John the Ripper和它的GUI前端——Johnny——的默认单词列表非常有限。我们推荐用更大的列表,你可以在线搜索找到。要使用定制的单词列表,跳到Options 标签,然后选择Wordlist mode 。浏览到你期望的定制单词列表,点击Apply 。
随着破解密码的进行,Johnny会逐渐填充用户名一列旁边的密码单元格。下面的截图显示三个密码中的两个已经被破解了。
4.6.2 hashcat和oclHashcat
hashcat 和oclHashcat 是密码破解工具。oclHashcat是基于GPGPU的版本。hashcat/oclHashcat工具都是多线程工具。它们可以在单个攻击会话中并行处理多个哈希和密码列表。hashcat/oclHashcat工具提供了多个攻击选项,比如暴力破解、密码合成、字典、混合、掩码和基于规则的攻击。
BackTrack在Privilege Escalation > Password Attacks > Offline Attacks 下面提供了多个版本的hashcat。“ocl”,或者叫“open cl”(开源cl),是指统一Nvidia和ATI的GPU驱动的开放实现。有些版本在更新BackTrack后就无法工作了,所以你可能需要从www.hashcat.net 下载安装最新的版本。
要使用hashcat,打开hashcat应用,或是浏览Password Attacks > Offline Attacks > hashcat 即可。
要针对某个文档运行hashcat,你可以输入hashcat [选项] 哈希文件名 [单词文件|目录]。下面的例子演示了hashcat 在针对shadow文件运行单词列表中的单词:
hashcat还会提供给一个GUI,它可以用作命令行版本的前端。有些人会偏好使用图形化界面,因为使用起来方便,在下方的窗口还能显示命令行代码。
4.6.3 samdump2
samdump2 是一个用来转存微软的Windows中密码哈希的SAM文件的工具,这样密码就可以用离线工具进行破解。对于较新版本的Windows,你可能需要借助其他工具来抓取SYSKEY (启动密文)文件,进而访问存在SAM数据库中的哈希。
samdump2位于Password Attacks > Offline Attacks > samdump2 。当你启动samdump 时,它会弹出一个终端窗口。
你必须先挂载目标Windows系统,这样samdump 才能访问SAM文件。
下一步,将SAM文件和SYSKEY文件复制到你的攻击目录中。
cp SAM SYSTEM /root/AttackDirectory
切换到攻击目录,调用bkhive SYSTEM bootkey命令来获得启动密文。将启动密文复制到一个文本文件中,这样samdump就拿到了带有启动密文的SAM文件。
cd /root/AttackDirectory /*> windowshashfiles.txt
运行命令samdump SAM bootkey 命令,将输出复制到另一个文本文件中。
Samdump2 SAM bootkey > windowshashfiles2.txt
现在你可以用密码破解工具如John the Ripper来破解这些哈希了。
4.6.4 chntpw
chntpw 是Kali Linux、BackTrack和其他Linux发行版中带有的一个工具。可以用它重置Windows 8或早期Windows版本中的本地密码,也可以用它修改Windows的密码数据库。不过,主要是用于在不知道密码的情况下侵入Windows系统。
要使用chntpw ,需要用Kali Live CD启动Windows机器。你可以从http://www.kali.org/downloads/ 下载Kali Linux的ISO映像文件。
将ISO文件烧录至CD中,用此Live CD启动Windows机器。在Kali的启动菜单上,选择Forensics 选项。
SAM文件通常位于/Windows/System32/config目录中。你需要在终端中切换到此目录。在你的系统上,情况可能是这样的:
/media/hda1/Windows/System32/config
每个系统都有轻微的区别。在这个例子中,Kali看起来是将我的硬盘的序列号用作了设备位置地址。这是因为我已经用Kali Live CD启动了一个Windows 7虚拟机。SAM数据库通常位于/media/硬盘名称/Windows/System32/config。
下面的截图列出了我的硬盘上的SAM数据库文件:
命令chntpw -l SAM会列出Windows系统中含有的所有用户名。下面的截图显示的是运行了chntpw -l SAM命令的输出结果:
该命令输出了系统中的用户名列表,当我们有要修改的用户名时,我们可以运行命令chntpw -u "用户名" SAM 。
在这个例子中,我们输入了chntpw -u "Administrator" SAM ,然后看到了如下菜单:
我们还可以选择清除密码、修改密码或是将用户提升为管理员。但是在Windows 7上,修改密码并非总能起作用,所以我们建议使用清除密码。这么操作的话,你可以用一个空密码登录到目标系统。
要访问chntpw,浏览Password Attacks > Offline Attacks > chntpw 。它会打开一个终端窗口,显示chntpw 的欢迎界面。chntpw有若干种用法,如主启动界面所描述:
要使用交互模式,输入chntpw -i和SAM文件的路径。如果目标是一个挂载的系统,你需要指定SAM文件在挂载目录中的位置。
它会弹出一个菜单,提供若干种修改SAM文件的选项。你可以选择选项1来清除密码。
4.6.5 Ophcrack
Ophcrack 是一个机遇彩虹表的Windows密码破解器。Kali提供了一个命令行版本和一个图形化界面版本。Ophcrack可以从多种格式中导入哈希,包括直接从Windows的SAM文件中直接转存。下面的截图显示的是可以加载到Ophcrack中的几种格式:
Ophcrack自带了彩虹表,如下面的例子中所示。我们建议加载最新的彩虹表,而不是用默认的。
彩虹表可以从在线资源中下载,比如开发者网站http://ophcrack.sourceforge.net/tables.php 。
要访问ophcrack ,浏览Password Attacks > Offline Attacks ,并选择命令行或GUI版本。点击Load ,选择你要破解的文件的路径(例如Windows的SAM文件)。
在这个例子中,我们是在Windows机器上使用Kali的ISO文件,并以取证(Forensics) 模式启动。我们浏览到/windows/system32/config目录以获取SAM数据库。你可以在本书第7章-防御对策 中了解更多有关使用Kali Linux的取证 模式的内容。你也可以直接将SAM数据库的离线版本跟Kali一起使用。
你应该能看到哈希和用户名、用户ID是在一起。点击Crack 按钮,等待破解后的密码出现。
4.6.6 Crunch
Crunch 是一个用来生成密码列表的工具。如果你能够收集到有关目标如何创建密码的情报的信息,那么这个工具会非常有用。举个例子,如果你抓取了两个密码并观察到目标都是用一个短语后跟随机数字来作为密码,那么Crunch可以用来快速生成那个短语后跟所有可能的随机数字的密码列表。
Crunch有一些特殊标记字符,可以翻译成如下:
举个例子,假定我们已经知道目标在密码中用pass后跟两个不确定的字符。为了针对六位字符密码运行Crunch,我们会先让pass后跟两位不确定的数字。可用%%来代表任意数字。运行这个命令,并将输出放到一个名为newpasswordlist.txt的文本文件中,可用如下示例输入:
输出的文本文件含有所有可能的数字组合。下面的截图演示了输出文件的首部:
为了添加所有小写字母到pass后面,我们可以用crunch 6 6 -t pass后跟@@来代表所有小写字母,如下面的截图所示:
现在文本文件中的密码组合都是pass后跟小写字母和数字了,如下面的截图所示: