第 8 章 Metasploit的扩展功能

本章将介绍Metasploit的扩展功能和后渗透模块中的核心部分。我们会将重点放在后渗透模块中可以直接使用的功能上,还会尝试各种复杂的任务,例如提升权限、获取明文密码、查找有用信息,等等。

在学习本章的过程中,我们将对以下几个要点进行重点讲解。

现在就开始学习Metasploit中的后渗透模块,下一节将从基础知识讲起。

前面的章节已经涉及了许多后渗透模块和脚本的使用方法,本章要介绍的是前面没有提到过的功能。下一节将从最基本的后渗透命令开始讲起。

核心Meterpreter命令指的是已经被Meterpreter成功渗透的计算机向我们提供的用于后渗透操作的基本功能。现在先从一些可以帮助你实现后渗透操作的最基本的命令开始。

使用帮助菜单列出在目标上可以使用的所有命令。按照下图所示,输入help或者?就可以打开帮助菜单。

在进行后渗透任务的时候,有时也可能需要执行其他任务(比如测试另一个渗透模块,或者运行提升权限的模块)。为了执行新的任务,需要将当前执行的Meterpreter会话切换到后台,这时就可以如下图所示使用background命令。

从上面的截图可以看出,我们已经成功将会话切换到了后台。当需要将一个会话切换到前台的时候,就可以使用session命令加上该会话的会话标识符,命令格式为sessions –i。在上图中这个会话标识符的值为1。

Meterpreter可以通过多个通信信道与目标进行互动。为了实现后渗透操作,我们可能需要列出通信信道,并指定使用的信道。这些操作可以通过channel命令实现,如下图所示。

在上图中,我们使用channel –1命令列出了所有可用的通信信道,然后使用channel –r [channel-id]命令选择了读取数据的通信信道。信道子系统允许通过所有的逻辑信道进行读取、列举、写入等操作,这些逻辑信道都是通过Meterpreter命令行实现的通信子信道。

前面的章节中已经涉及了一些文件操作命令,现在我们来回顾一下,就从pwd开始吧。输入pwd命令,可以查看当前的工作目录,如下图所示。

此外,还可以使用cd命令来浏览目标文件夹,使用mkdir来创建一个文件夹,如下图所示。

使用Meterpreter中的upload命令就可以将文件上传到目标系统,如下图所示。

接着还可以使用edit命令加文件名实现对所有文件的修改,如下图所示。

更可以使用cat命令查看文件的内容,如下图所示。

使用ls命令可以列出指定目录中的所有文件,如下图所示。

使用rmdir命令可以从目标系统上删除指定的文件夹,使用rm命令可以删除指定的文件,如下图所示。

使用download命令可以从目标下载文件,如下图所示。

Metasploit中还提供了各种桌面命令,例如桌面列举、使用网络摄像头拍照、使用麦克风录音、使用摄像机录视频等。下面给出这些命令的使用示例。

使用enumdesktopsgetdesktop命令可以查看被渗透主机的桌面信息:enumdesktops命令列出了所有可以访问的桌面,而getdesktop列出了当前桌面的相关信息。

在进行屏幕截图、摄像头拍照、实时记录视频或者记录键盘操作时,必须事先获得客户的许可。不过可以使用snapshot命令获取当前桌面的快照,这样就可以查看目标的桌面,如下图所示。

可以按照下图所示的方法查看保存的图片。

下面来看看是否可以将所有摄像头列举出来,并查看是谁在使用这个系统。

使用webcam_list命令就可以将目标上的所有摄像头列举出来。然后使用webcam_stream命令使用摄像头录制实时视频,如下图所示。

输入了这个命令之后,就在浏览器中打开了一个网络摄像头,如下图所示。

也可以使用webcam_snap命令拍摄一张照片,而不是观看实时视频,如下图所示。

某些时候我们可能出于监视目的需要进行环境监听,那么就可以使用record_mic命令,如下图所示。

也可以在使用record_mic命令的同时加上-d作为参数来指定录音的长度,这个参数的单位是秒。

Meterpreter的另一个强大功能是可以计算出目标系统的闲置时间,以此推算用户的使用时间表,从而在用户不怎么使用计算机的时间段发起攻击。这个功能可以使用idletime命令实现,如下图所示。

通过监控目标的按键敲击也可以发现很多有趣的信息,如下图所示输入keyscan_start命令就可以启动键盘监听模块。

几秒钟之后,使用keyscan_dump命令来导出键盘记录,如下所示。

在这一节中,我们已经学习了很多命令。接着来看一些高级后渗透模块。

在这一节中,我们将通过由基本命令获取的信息来扩大战果。

如果被成功渗透的应用程序是以管理员权限运行的,那么仅输入getsystem命令就可以获取系统级管理权限,如下图所示。

系统级管理权限提供了最高级别的管理权限,所以我们可以完成目标系统上的任何操作。

 getsystem模块在比较新的Windows系统中运行不太稳定,最好使用本地的提升权限方法和模块来提升控制权限。

Metasploit的使用范围很广,从私人机构到执法部门都可以看到它的身影。进行隐秘操作的时候修改文件的访问时间、修改时间和创建时间是一个绝佳的做法。在上一节中,我们创建了一个名为creditcard.txt的文件,现在就使用timestomp命令来修改它的属性,如下图所示。

这个文件的访问时间是2016-06-19 23:23:15,可以使用参数-z将这个时间修改为如上图所示的1999-11-26 15:15:25。下面来看看文件是否被成功修改。

我们已经使用timestomp命令成功修改了creditcard.txt文件。也可以如下图所示使用参数-b将一个文件的所有时间信息清空。

 使用timestomp命令可以分别修改文件的访问时间、修改时间和创建时间。

Metasploit提供了250多个后渗透模块,现在只能挑选其中一些比较典型的进行讲解,其余的模块有待你自己去深入发掘。

使用wlan_bss_list模块可以轻松发现目标系统附近的无线网络,这样就可以对目标进行踩点并收集更多的重要信息,如下图所示。

跟上一个模块类似,使用wlan_profile模块可以收集目标系统上保存的Wi-Fi登录凭证。可以如下图所示使用这个模块。

在上图的<name>标签中可以找到网络的名字,在<keyMaterial>中可以找到登录网络的密码。

Metasploit中内置了对各种应用程序的登录凭证采集器。不过为了了解目标系统上都安装了哪些程序,需要使用get_application_list模块获取应用程序列表,如下图所示。

找到所有的应用程序之后,就可以在目标系统上运行各种采集模块了。

假设我们发现目标系统上运行着Skype,用Metasploit中的Skype模块就可以获取Skype的密码。

Metasploit包含了一个恢复USB使用历史的模块,通过它可以查看在目标系统中都使用过哪些USB设备。当目标系统中采用了USB限制措施,只有特定的USB设备才允许连接的情况下,这个模块就非常有用了——利用这个模块可以轻松地伪造USB描述符和硬件ID。

 有关伪造USB描述符和绕过端点保护的更多信息,请访问http://www.slideshare.net/the_netlocksmith/defcon-2012-hacking-using-usb-devices

下面来看看如何使用这个模块。

Metasploit提供了一个非常酷的文件查找命令,利用它可以找到你感兴趣的文件,甚至还可以下载这些文件。使用search命令可以列出所有具有特殊扩展名的文件,比如*.doc、*.xls等,如下图所示。

可以使用clearev命令清除目标系统上的所有日志文件。

不过除非是执法部门,否则你不应该从目标系统上删除日志,因为这些日志可以向蓝队提供大量有用的信息供其加固防御措施。Metasploit中另一个用来处理日志的模块就是event_manager,使用方法如下图所示。

下一节将会讲解Metasploit中的高级扩展功能。

本章涵盖大量后渗透模块,现在先来介绍Metasploit中的一些高级渗透功能。

Metasploit中提供了两个功能极为强大的命令:pushmpopm。使用pushm命令可以将当前模块放入模块栈中,而popm命令可以将位于栈顶部的模块弹出。不过这并不是可以用于进程的标准栈,而是Metasploit中一个概念相同的工具——它们并不相同。使用这些命令的优势在于可以实现快捷操作,从而为测试者节省大量的时间和精力。

下面来考虑一个场景:我们正在测试一台有多种漏洞的内部网络的服务器,而且要对内部网络中的所有系统都进行两种不同的渗透测试。为了能对每台服务器都进行这两种测试,我们就需要一种能在这两个渗透模块之间快速切换的机制。在这种情况下就可以使用pushmpopm命令。我们可以使用一个渗透模块对服务器的某个漏洞进行测试,然后将这个模块放入模块栈中,操作完成之后再载入另一个渗透模块。使用第二个模块完成任务之后,就可以使用popm命令将第一个模块(仍然保持之前的所有选项设置)从栈中弹出。

通过下图来了解更多内容。

从上图可以看出,我们已经使用pushm命令将psexec模块放入栈中,并加载了exploit/multi/handler模块。当使用handler完成操作之后,就可以使用popm命令从栈中再次加载psexec模块,如下图所示。

从模块栈中弹出的psexec跟之前的设置一样,所以无须再设置这个模块的选项了。

在模块的开发阶段,我们可能需要对它进行一次又一次的测试。每次修改新模块时都要关闭Metasploit,这不仅十分耗时还让人觉得厌烦。因此必须有一种能让Metasploit模块开发变得简单、快速而有趣的机制。所幸Metasploit提供了具备类似功能的reloadeditreload_all命令,使模块的开发过程变得轻松了许多。我们可以使用edit命令动态修改Metasploit中的模块,并在不关闭Metasploit的情况下使用reload命令重新载入编辑过的模块。如果对多个模块进行了修改,就可以在Metasploit中使用reload_all命令一次性载入所有模块。

下面来看一个示例。

在上面的截图中,我们输入了edit命令,对exploit/windows/ftp文件夹下的freefloatftp_user.rb渗透脚本进行了修改。我们将攻击载荷的大小从444修改为448,然后保存了这个脚本。接下来只需要输入reload命令,更新Metasploit模块的源代码即可,这个过程如下图所示。

使用reload命令就无须在启用新模块时重新启动Metasploit了。

 在Metasploit中使用edit命令将会启用VI编辑器对模块进行编辑。有关VI编辑器的更多信息,请访问http://www.tutorialspoint.com/unix/unix-vi-editor.htm

Metasploit可以通过资源脚本实现自动化。使用资源脚本可以免去手动设置选项,实现选项的自动化设置,从而节省了配置模块选项和攻击载荷所需的时间。

创建资源脚本有两种方法:手动创建脚本或使用makerc命令创建脚本。我个人比较偏向使用makerc命令,因为这样可以避免输入错误。makerc命令将之前输入过的所有命令都保存到了一个文件中,可以使用resource命令来使用这个文件。下图中给出了一个示例。

由上图可知,我们通过设置攻击载荷和各种选项(例如LHOSTLPORT)成功启动了一个渗透模块handler。输入makerc命令就可以将这些命令保存到一个指定的文件中,在这个例子中是multi_hand文件。我们保存了最近使用的6条命令。下面如下图所示使用这个资源脚本。

输入resource命令和脚本的名字就可以自动粘贴脚本中保存的命令,从而避免对选项进行重复设置。

Metasploit还提供了十分强大的AutoRunScript工具,可以通过输入show advanced命令查看AutoRunScript的选项。AutoRunScript可以实现自动化的后渗透测试,一旦获得目标的控制权限就开始执行。我们可以通过输入set AutoRunScript[script-name]来设置AutoRunScript的选项,也可以在资源脚本中直接设置,后者可以一次性自动完成渗透操作和后渗透操作。通过使用multi_scriptmulti_console_command模块,AutoRunScript还可以一次运行多个后渗透脚本。下面来看一个使用了两个脚本的示例,一个用于自动化的渗透测试,另一个用于自动化的后渗透测试,如下图所示。

上面给出的是一个实现了checkvm(检查目标系统是否运行在虚拟环境中的模块)和migrate(将攻击载荷迁移到安全进程的模块)模块自动化的后渗透脚本,这个脚本十分小巧。下面看看这个渗透测试脚本的内容。

上面的资源脚本设置了对HFS文件服务器进行渗透所必需的所有参数,并实现了攻击的自动化。我们还使用multi_console_commandAutoRunScript进行了设置,并将multi_console_command设定为-rc,这样就允许执行多个后渗透脚本了。这个过程如同上图所示。

接下来运行渗透测试的脚本,并分析它的执行结果。

当渗透测试结束时,我们获得了如上图所示的结果:checkvmmigrate两个模块都已经成功执行,而且目标运行在Sun公司的VirtualBox虚拟机上,控制程序也已经迁移到notepad.exe进程中。脚本成功运行之后,就可以看到如下输出。

我们已经成功将控制程序迁移到了notepad.exe进程上。不过如果notepad.exe有多个运行的实例,还可以将其迁移到其他进程上。

可以使用multiscript模块代替multi_console_command模块。我们来创建一个后渗透脚本,如下图所示。

从上图可以看出,我们已经成功创建了一个名为multi_scr.rc的后渗透脚本。现在对这个后渗透脚本做些修改,修改后的脚本如下图所示。

如上图所示,只需使用multiscript替换multi_console_command,然后更新后渗透脚本的路径即可。下面来看看执行这个后渗透脚本会发生什么。

当我们获得目标系统的控制权限之后,checkvm模块就会开始执行,之后migrateget_envevent_manager命令依次执行,如下图所示。

在资源脚本中使用event_manager模块和参数-i可以查看目标系统上的所有日志。执行event_manager命令的结果如下图所示。

在渗透测试的过程中,经常会遇到访问受限的情况,例如在运行hashdump命令时,可能会遇到如下的错误。

在这种情况下,如果试图使用getsystem命令获得系统级权限,就会遇到如下错误。

但是遇到这种情况时该怎么做呢?答案就是使用后渗透模块将控制权限提高至最高级别。下面的演示是在Windows Server 2008 SP1操作系统上进行的,其中使用本地渗透模块绕过了限制并获得了目标的完全管理权限。

在上面的截图中,我们使用exploit/windows/local/ms10_015_kitrap0d渗透模块提升了控制权限,并获得了最高级别的管理权限。接下来使用getuid命令检查当前的权限级别。

我们已经获得了系统级管理权限,现在就可以在目标系统上执行任何操作了。

 有关kitrap0d渗透模块的更多信息,请访问https://docs.microsoft.com/en-us/security-updates/SecurityBulletins/2010/ms10-015

运行hashdump命令,检查这个模块能否正常工作。

干得不错!我们已经获得了系统的散列值。

mimikatz是Metasploit中一个功能极为强大的附加工具,它可以直接从lsass服务获取Windows中状态为活跃的账号的明文密码。虽然之前我们已经通过pass-the-hash使用过散列值,不过在很多时候渗透都是把时间放在第一位的,知道了密码就可以节省大量时间。另外在HTTP进行基本身份认证的时候,也需要知道密码(而不是散列值)。

可以在Metasploit中使用load mimikatz命令载入mimikatz模块,之后就可以使用mimikatz模块中的kerberos命令来查找密码。

对了,Metasploit还提供了嗅探目标主机流量的功能——而且不仅可以嗅探特定网络接口的流量,还可以嗅探目标上所有网络接口的流量。我们可以先列出目标主机上的所有网络接口,然后选择列表中的一个。

目标主机上有多个网络接口。现在在无线网络接口上启动嗅探功能,这个网络接口的ID为2,如下图所示。

输入sniffer_start 2 1000命令启动无线网络接口上的嗅探功能,其中2表示无线网卡的ID,1000是缓冲区的大小。使用sniffer_dump命令便可以成功下载pcap文件。如果你想查看在pcap文件中收集了哪些数据包,可以使用如下图所示的命令在Wireshark中查看。

在pcap文件中有大量数据包,其中包含了DNS查询、HTTP请求和以明文保存的密码。

可以通过对目标主机的host文件进行注入展开钓鱼攻击——将指定域名的条目添加到目标主机的host文件中。

下面来看看如何使用Metasploit实现对host文件的注入。

可以看到我们在会话1中使用了post/windows/manage/inject_host模块,并在目标的host文件中添加了一个条目。现在来看看当目标试图访问https://www.yahoo.com时会发生什么。

目标主机的浏览器被定位到了我们的恶意服务器,这个服务器上运行着钓鱼网站。

Metasploit包含了一个针对登录密码的钓鱼窗口模块。它可以生成一个钓鱼窗口,这个窗口的外观和Windows系统的认证弹窗一模一样。攻击者可以利用这个窗口来获取登录凭证。由于它冒充成了合法的登录窗口,用户必须填写登录凭证才能继续正在进行的操作。我们可以使用模块post/windows/gather/phish_login_pass来实现对用户登录凭证的钓鱼式渗透测试。运行这个模块的时候,目标上就会弹出一个如下图所示的钓鱼窗口。

当目标填写了用户名和密码之后,我们就可以看到以纯文本形式保存的信息,如下图所示。

我们轻而易举地获得了目标的登录信息。正如在本章所看到的,Metasploit提供了大量用于后渗透的功能,还具备与独立工具(例如mimikatz)和本地脚本协同工作的能力。

本章详细介绍了后渗透模块,以及从基础到高级的各种后渗透测试场景。此外,还介绍了在Windows环境中提升权限的方法和高级技术。

你应当尝试进行如下练习。

在下一章中,我们将利用本章介绍的大部分后渗透测试技巧来规避目标系统的保护机制。另外,我们还将展示一些最先进的Metasploit功能,并尝试以此来击破杀毒软件和防火墙的防御。