Web渗透测试实战:基于Metasploit 5.0
上QQ阅读APP看书,第一时间看更新

2.5.2 MSF控制台命令

MSF控制台命令可以分类如下:

·核心MSF控制台命令:这些命令是MSF控制台中最常用和通用的命令。

·模块管理命令:使用这些命令管理MSF模块。你可以在这些命令的帮助下编辑、加载、搜索和使用Metasploit模块。

·MSF作业管理命令:使用这些命令,你可以处理Metasploit模块作业操作,例如使用处理程序创建作业,列出在后台运行的作业以及取消和重命名作业。

·资源脚本管理命令:使用资源脚本时,可以通过这些命令在控制台中执行脚本。你可以执行一个存储的脚本文件,也可以将MSF控制台启动时使用的命令存储到一个文件中。

·后台数据库命令:这些命令用于管理数据库,也就是说,可以用来检查数据库连接、建立连接和断开连接、在MSF中还原/导入数据库、从MSF中备份/导出数据库,以及列出与目标有关的已保存信息。

·凭证管理命令:你可以使用creds命令查看和管理保存的凭证。

·插件命令:可以使用插件命令管理MSF控制台中的插件。这些命令可用于所有已加载的插件。

要了解如何使用msfconsole命令,请参考以下URL:https://www.offensive-security.com/metasploit-unleashed/msfconsole-commands/

MSF控制台不仅允许我们使用其中的大量模块,还为我们提供了自定义控制台的选项。让我们看看如何自定义控制台。

2.5.2.1 自定义全局设置

在自定义控制台之前,我们需要知道当前应用到控制台的(默认)全局设置。

1)可以在MSF启动时使用show options命令完成此操作,如图2-15所示。

图 2-15

2)我们可以从这些设置中更改提示(msf文本)。要更改提示和提示字符,可以执行set Prompt和set PromptChar命令,如图2-16所示。

图 2-16

3)我们甚至可以使用一些扩展格式来设置更多高级提示,如图2-17所示。

图 2-17

表2-1是可以使用的扩展格式。

表 2-1

同样的格式也可以用于设置提示字符。

2.5.2.2 MSF中的变量操作

MSF中的变量处理可以帮助用户充分利用模块的功能。作为渗透测试人员,有时我们需要扫描很多目标,并且在几乎所有测试场景中都必须设置Metasploit模块所需的选项。这些选项(例如,远程主机IP/端口和本地主机IP/端口)是针对正在使用的特定Metasploit模块设置的。我们越早了解变量操作,就能越有效地使用模块。

datastore是一种变量,具有以下功能,使用datastore可以进行变量操作:

·将数据存储在键/值对中。

·使MSF控制台可以在模块执行时设置配置。

·使MSF可以将值在内部传递给其他模块。

各种类使用datastore来保存选项值和其他状态信息,datastore有两种类型:

·datastore模块:此datastore仅保存与已加载模块有关的信息和选项(本地声明)。在MSF控制台中,可以使用set命令保存模块选项,并使用get命令来获取已保存的值。

·全局datastore:此datastore将信息和选项保存到所有模块(全局声明)。在MSF控制台中,可以使用setg命令保存模块选项,并使用getg命令来获取。

如图2-18所示,已成功加载smb_version模块,并且RHOSTS选项设置为192.168.2.17。但是一旦我们卸载了模块(使用back命令),就不能全局设置RHOSTS选项。要全局设置这些选项,我们需要使用全局datastore。

图 2-18

从图2-19中可以看出,我们全局保存了RHOSTS选项的值192.168.2.17,这意味着在使用其他模块时,RHOSTS选项会默认使用这个值。如果使用了setg命令进行设置,那么就可以使用get或getg检索设置的值。

图 2-19

仅在模块中执行set命令将显示已保存的所有可用选项(对于模块datastore和全局datastore),如图2-20所示。

图 2-20

如果想从datastore中删除值,你始终可以使用unset和unsetg命令。

注意:如果使用setg全局设置了一个选项,则不能使用unset命令将其删除,你需要使用unsetg命令。

2.5.2.3 探索MSF模块

可以使用show命令查看MSF中可用的所有选项和模块。

1)要查看show命令的所有有效参数,你可以在MSF控制台中执行show -h命令,如图2-21所示。

图 2-21

2)要显示MSF中可用的辅助模块,可以使用show auxiliary命令,如图2-22所示。

图 2-22

3)可以使用相同的命令列出其他模块和其特定的参数。另外,你可以按两次键盘上的Tab键以查看show命令的可用参数,如图2-23所示。

图 2-23

4)对于特定模块的参数,只需加载要使用的模块,然后执行show命令即可。在本例中,我们使用了smb_version辅助模块,并按了两次Tab键以查看可用于show命令的所有参数,如图2-24所示。

图 2-24

5)我们可以使用show evasion命令查看该特定模块可用的所有逃逸选项,如图2-25所示。

图 2-25

注意:这些选项通常用于绕过网络过滤端点,例如入侵检测/防护系统(IDS/IPS)。

2.5.2.4 在MSF中运行OS命令

MSF的功能之一是可以从控制台执行普通的shell命令。你可以执行shell支持的任何命令(bash/sh/zsh/csh)。在本例中,我们从控制台执行了whoami && id命令。命令执行结果显示在控制台中,如图2-26所示。

图 2-26

我们还可以通过控制台使用/bin/bash -i命令或仅使用/bin/bash(-i开关用于以交互模式运行bash)从控制台执行交互式bash脚本,如图2-27所示。

图 2-27

注意:要在Windows中获得交互式命令行提示符,请执行控制台中的cmd.exe。

2.5.2.5 在MSF中设置数据库连接

MSF的最炫酷功能之一是使用后端数据库来存储与目标有关的所有内容。在运行MSF时,请按照以下步骤设置数据库:

1)使用控制台上的db_status命令检查数据库是否已连接到MSF,如图2-28所示。

图 2-28

2)由图2-28可知,该数据库尚未连接。我们可以使用数据库配置文件、单行命令或使用RESTful HTTP API数据服务(MSF 5的新功能)来连接到数据库。默认情况下,不会有database.yml文件,但是你可以从database.yml.example文件中复制内容。可以像图2-29中所示那样编辑文件。

图 2-29

注意:如果不初始化就安装数据库,则此方法将不会生效。更多相关信息,请访问https://fedoraproject.org/wiki/Metasploit_Postgres_Setup

3)编辑并保存文件后,可以使用db_connect命令中的-y开关连接到数据库,如图2-30所示。

图 2-30

4)让我们再次检查状态,参见图2-31,控制台现在已连接到后端数据库。

图 2-31

2.5.2.6 在MSF中加载插件

插件是MSF中的扩展功能,通过利用Ruby语言的灵活性来扩展MSF的功能。这使插件几乎可以执行任何操作,从构建新的自动化功能到提供数据包级内容过滤以及绕过IDS/IPS。插件还可以用于将第三方软件(如Nessus、OpenVAS和Sqlmap)集成到框架中。步骤如下:

1)使用load命令加载插件,如图2-32所示。

图 2-32

2)默认情况下,Metasploit带有一些内置插件。在使用load命令后,可以通过按两次Tab键来找到它们,如图2-33所示。

图 2-33

注意:所有可用的内置插件都可以在https://github.com/rapid7/metasploit-framework/tree/master/plugins中找到。

3)让我们通过在控制台中执行load openvas命令来加载OPENVAS插件(见图2-34)。此插件将在后面的章节中介绍。

图 2-34

4)插件成功加载后,你可以在控制台中执行help命令,并查找“OpenVAS Commands”以查看该插件支持的所有命令,如图2-35所示。

图 2-35

可以通过复制<MSF_INSTALL_DIR>/plugins/目录中的.rb插件文件并执行load<插件名称>命令来加载自定义插件。

2.5.2.7 使用Metasploit模块

Metasploit模块非常易于使用。简而言之,任何人都可以按照图2-36所示的过程熟悉这些模块。

图 2-36

在本例中,我们使用smb_version辅助模块:

1)通过执行auxiliary/scanner/smb/smb_version命令,将模块加载到控制台中,如图2-37所示。

图 2-37

2)现在,我们需要根据需求来配置模块。可以使用show options命令查看smb_version的可用选项,如图2-38所示。

图 2-38

3)我们可以使用set/setg命令来配置模块选项,也可以使用smb_version的高级选项,通过使用show advanced命令显示,如图2-39所示。

4)要绕过IDS/IPS端点,可以为smb_version模块设置绕过选项。使用show evasion命令列出该模块支持的所有绕过选项,如图2-40所示。

5)配置完成后,可以在最后一次运行模块之前通过执行show missing命令检查缺少的选项,如图2-41所示。

6)在本例中,我们将设置RHOSTS为192.168.2.17,然后使用run命令或execute命令执行模块,如图2-42所示。

注意,除非已设置所有必需的配置,否则这些模块将无法运行。

图 2-39

图 2-40

图 2-41

图 2-42

2.5.2.8 在MSF中搜索模块

在Metasploit中进行搜索非常容易,search命令接受用户提供的字符串值。如图2-43所示,搜索windows字符串将列出所有适用于Windows操作系统的模块。

图 2-43

Metasploit搜索还允许我们根据模块类型进行搜索。例如,输入search windows type:exploit将显示所有Windows利用模块的列表。同样,我们可以限定CVE(Common VulnerabiCity and Exposures,通用漏洞列表)。要搜索2018年发布的Windows漏洞,我们可以输入search windows type:exploit cve:2018,如图2-44所示。

图 2-44

接下来,我们将学习如何在MSF中检查主机和服务。

2.5.2.9 在MSF中检查主机和服务

到目前为止,我们已经介绍了msfconsole的基础知识。现在,我们继续学习如何管理主机和服务。

1)要查看已添加的所有主机的列表,可以使用hosts命令,如图2-45所示。

图 2-45

2)要添加新主机,可以使用hosts -a <IP>命令,如图2-46所示。

图 2-46

3)要删除主机,可以使用hosts -d <IP>命令,如图2-47所示。

图 2-47

同样,通过services命令我们可以查看已添加到Metasploit的所有主机上可用的所有服务的列表。让我们来看一看。

1)首先,我们需要使用services命令,如图2-48所示。

图 2-48

2)要查看单个主机的服务列表,我们可以使用services <IP>命令,如图2-49所示。

图 2-49

我们不能一次添加多个端口。这样做会引发错误,如图2-49所示,只能是一个端口。

Metasploit还允许我们使用services -a -p <port number> 原书中应该缺失了<IP>,即命令应为services -a <Ip> -p <port number>。——译者注命令手动添加定制服务,如图2-50所示。

图 2-50 原书中此处截图是错误的,直接替换为正确的。

接下来,让我们看看如何使用MSF进行Nmap扫描。

2.5.2.10 使用MSF进行Nmap扫描

将主机添加到Metasploit后,下一步就是扫描。Metasploit具有用于Nmap的内置包装器,该包装器在Metasploit控制台中为我们提供了与Nmap相同的功能。这个包装器的好处是默认情况下可以将输出保存在数据库中。

要对主机进行扫描,我们可以使用db_nmap <IP>命令(见图2-51)。在这里,我们使用--open标志仅查看打开的端口。-v用于显示详细信息,-Pn用于执行无ping扫描,-sV用于执行服务扫描,-sC用于对发现的端口运行脚本扫描。

图 2-51

图2-52显示了在主机上运行扫描的输出。

图 2-52

Metasploit还允许我们使用db_import命令将Nmap完成的外部扫描导入其数据库,如图2-53所示。

目前,MSF支持以下格式的数据导入数据库:Acunetix、Amap Log、Amap Log-m、Appscan、Burp Session XML、Burp Issue XML、CI、Foundstone、FusionVM XML、Group Policy Preferences Credentials、IP Address List、IP360 ASPL、IP360 XML v3、Libpcap Packet Capture、Masscan XML、Metasploit PWDump Export、Metasploit XML、Metasploit Zip Export、Microsoft Baseline Security Analyzer、NeXpose Simple XML、NeXpose XML Report、Nessus NBE Report、Nessus XML(v1)、Nessus XML(v2)、NetSparker XML、Nikto XML、Nmap XML、OpenVAS Report、OpenVAS XML、Outpost24 XML、Qualys Asset XML、Qualys Scan XML、Retina XML、Spiceworks CSV Export和Wapiti XML。

图 2-53

2.5.2.11 在MSF中设置载荷操作

在启动模块之前,我们需要设置处理程序。处理程序是一个存根(stub),用于处理在MSF外部启动的漏洞利用。

1)使用use exploit/multi/handler命令加载处理程序模块,如图2-54所示。

图 2-54

2)接下来,我们使用show options命令查看可用选项,如图2-55所示。

图 2-55

如你所见,选项当前为空。一旦定义了载荷,就会加载这些选项。例如,我们将在此处使用windows/x64/meterpreter/reverse_tcp载荷,并为载荷设置标准选项,例如LHOST和LPORT。设置stageencoder和enablestageencoding选项以对处理程序发送给受害者的第二个stage进行编码,如图2-56所示。

图 2-56

首先,我们在选择编码器之前设置LHOST和LPORT,使用shikata_ga_nai编码器对Stager进行编码。我们使用Stager编码机制的原因是通过对Stager进行编码来绕过IPS/DPS,从而即时更改签名。

我们还需要通过将其值设置为true来启用Stage编码。此选项将使用我们选择的编码器启用第二个Stage编码过程。设置了stageencoding选项后,执行run -j命令以在后台启动处理程序。

运行处理程序的另一种方法是使用控制台的handler命令,并将参数传递给它,如图2-57所示。

图 2-57

因此,执行先前讨论的处理程序的单行命令将是handler -H <IP> -P <Port> -e <encoder> -P <payload>,如图2-58所示。

图 2-58

接下来,我们将研究MSF载荷的生成。

2.5.2.12 MSF载荷的生成

载荷生成是MSF中最有用的功能之一。从简单的shellcode生成到功能齐全的EXE/DLL文件,Metasploit都可以在单行命令中生成。载荷可以通过两种方式生成。

1.使用msfconsole(oneliner)生成MSF载荷

通过使用MSF控制台并执行用于生成载荷的命令,可以生成任何MSF支持的载荷。使用此技术的一个优势是你不必单独启动载荷处理程序。可以使用单行命令来完成。要生成载荷并启动处理程序,请执行以下代码:

图2-59显示了上述命令的输出。

图 2-59

上面的命令将生成reverse_https Meterpreter载荷。列出它以确认生成的载荷,并在端口9090上启动处理程序以传入连接。生成载荷的另一种方法是使用MSFvenom。

在上面的命令中,-q开关用于在静默模式下启动MSF,而-x表示启动后在控制台中执行该命令。

2.使用msfvenom生成MSF载荷

msfvenom是一个内置工具,无须启动MSF即可生成和混淆载荷。执行msfvenom -p <MSF支持的载荷> lhost = <IP> lport = <PORT> -f <输出文件格式> -o <载荷文件名>命令,可以EXE格式生成reverse_https Meterpreter载荷并保存文件,如图2-60所示。

图 2-60

在这两种情况下,我们都使用ls -alh https_2.exe。

现在,可以上传此载荷到被攻击者的系统并执行,以通过安全的HTTPS隧道将反向的Meterpreter连接返回给我们。

[1] 原书中应该缺失了<IP>,即命令应为services -a <Ip> -p <port number>。——译者注

[2] 原书中此处截图是错误的,直接替换为正确的。