接上文Kali渗透测试:散列密码破解(一)
1.4 散列值传递攻击
前面已经介绍了如何破解基于LM散列方法加密的Windows密码,但是Windows操作系统中除了会使用LM散列方法之外,还会使用NTLM散列方法对密码进行加密。这是一种比LM散列安全性高很多的方法。实际上我们无须进行密码的破解。如果已经取得了一台计算机中加密之后的密码值,无论是使用LM散列还是NTLM散列加密的,都可以利用这个值直接获得系统的权限,这种方式被称为“散列值传递攻击”。 这是一种经典的攻击方式,虽然每一种网络攻击方式慢慢地都会过时,但是这种攻击方式目前仍然可以起作用,而且这种攻击方式也可以为我们提供一个较好的思路。
有些操作系统采用了一些可以阻止这种“散列值传递攻击”的机制,Windows7操作系统使用了用户账户控制(User Account Control, UAC)技术,这个技术最早出现于Windows Vista,并在更高版本的操作系统中保留下来,它可以阻止恶意程序(有时也称为恶意软件)损坏系统,同时也可以帮助组织部署更易于管理的平台。
使用UAC技术,应用程序和任务总是在非管理员用户的安全权限中运行,但管理员专门系统授予管理员级别的访问权限时除外。UAC技术会阻止未经授权的应用程序的自动安装,防止无意中对系统设置进行更改,这种机制已经解决了Windows XP的大量安全方面的问题。但是这种机制时可以关闭的。所以散列值传递攻击仍然有我们值得学习的地方。
我们以一个Windows7操作系统作为攻击目标。首先开启Win7操作系统的文件共享功能,最简单的做法就是共享一个目录,这一点很重要,如果我们不这样做,就无法实现远程攻击。
我们可以提前关闭这个系统上的UAC功能(也可以不关闭,而是在Meterpreter控制中远程关闭),关闭的步骤如下所示:
◆ 1. 在“开始”菜单的文本搜索框中输入“UAC”,如下图所示:
◆ 2.这样就可以打开“用户账户控制设置”,然后将“选择何时通知您有关计算机更改的消息”改为“从不通知”(即将左侧的滑动条拖动到最下方),如下图所示:
◆ 3. 单击“确定”按钮,重启计算机。
现在我们可以开始攻击了,首先我们需要想办法获得目标主机加密之后的密码散列值,上面我们介绍了两种方法。就利用Windows XP启动系统, 然后复制出SAM文件。
另外,当我们利用Metasploit控制目标主机的时候,也可以获取它的密码散列值。演示如下:
我们要从已经成功渗透的目标主机中导出加密之后的密码散列值,这个操作需要系统级(管理员级别)的管理权限,而且需要关闭目标主机上的UAC功能。在这个实验中,我们事先关闭了UAC功能,所以无须再进行这方面的操作。如果事先没有关闭就可以使用bypassuac_eventvwr模块来远程关闭。
首先需要将当前session切换到后台,使用background命令;然后使用命令use exploit/windows/local/bypassuac_eventvwr, 如下图所示,注意,只有当前你没有修改UAC设置时,才能使用这个模块。
本实验我们只需要获取系统级别管理员权限即可,这里可以使用getsystem命令,如下图所示:
我们已经获取了系统管理权限,然后我们使用getuid命令获取用户名,如下图所示:
接下来,我们就可以到处目标系统的密码散列值了,使用命令hashdump, 如下图所示:
如果这个命令不成功,可以尝试将Meterpreter的进程迁移到其他进程上,如拥有系统级system管理权限的进程;如果还不成功,可以使用post/windows/gather/smart_hashdump模块。如下图所示:
利用在线cmd5,根据散列值进行查询,如下图所示:
我们还可以在Meterpreter中使用kiwi模块,这个模块可以获取明文密码,先使用load kiwi命令载入这个模块,然后使用creds_all 命令显示明文密码,如下图所示:
1.4 字典
当对密码进行破解的时候,一个字典示必不可少的。所谓字典就是一个由大量词汇构成的文件。
在Kali 中字典的来源一共有3种,如下所示:
◊ 使用字典生成工具生成需要的字典,当我们需要字典,手头又没有合适的字典时,就可以考虑使用工具来生成 所需要的字典。
◊ 使用Kali 中自带的字典,Kali将所有的字典都保存在了/usr/share/wordlists/目录下,如下图所示:
◊ 从互联网上下载热门的字典。如下图所示:
dirb目录中包含3个目录和9个文件,其中, big.txt是一个比较完备的字典,大小为179KB;相对而言,small.txt则是一个比较精简的字典,大小只有6.4KB;catala.txt为项目配置字典;spanish.txt为方法名或库目录字典。3个目录中,others目录主要包含一些与漏洞相关的字典,如其中的tomcat.txt就是与tomcat配置相关的字典。
另外,在fern-wifi目录中只有一个common.txt,主要是一些可能的公共Wi-Fi账户的密码;metasploit目录中文件比较多,几乎包含各种常用类型的字典;wfuzz目录主要用来进行模糊测试。Crunch的主页提供了这个工具的使用方法和范例。这个工具的使用十分简单,你所做的只是向Crunch提供以下3个值。
◊ 字典中包含词汇的最小长度
◊ 字典中包含词汇的最大长度
◊ 字典中包含词汇所使用的字符。要生成密码包含的字符集(小写字符、大写字符、数字、符号)。这个选项是可选的,如果不选这个选项,将使用默认字符集(默认为小写字符)。
剩下的工作只需要交个Crunch去完成就可以了。下面我们给一个简单的Crunch使用实例。首先在Kali中启动一个终端,然后输入如下命令:
┌──(kali㉿kali)-[~]
└─$ cruch 2 3 -o /home/kali/Downloads/passwords.txt
结果如下图所示:
这条命令会生成长度为2位或3位的密码,然后将这些密码爆存在passwords.txt中。默认会生成“aa”“ab”之类的密码,如下图所示:
如果我们对目标比较熟悉,也可以指定目标常用的字符。如我们看到某人的键盘上的Q、W、E、R、T和1、2、3、4几个键磨损的比较厉害,就可以指定这几个字符来生成一个密码。执行的命令如下:
┌──(kali㉿kali)-[~]
└─$ cruch 4 4 quert1234 -o /home/kali/Downloads/password2.txt
生成的密码如下图所示:
现在可以看到我们生成的密码只包含q、w、e、r、t、1、2、3、4这几个字符。