Metasploit: Introduction
本房间链接:https://tryhackme.com/room/metasploitintro
Metasploit:简介
任务 1Metasploit 简介
Metasploit 是使用最广泛的开发框架。Metasploit 是一个功能强大的工具,可以支持渗透测试参与的所有阶段,从信息收集到后利用。
Metasploit 有两个主要版本:
- Metasploit Pro:促进任务自动化和管理的商业版本。此版本具有图形用户界面 (GUI)。
- Metasploit 框架 :从命令行工作的开源版本。本室将重点介绍安装在 AttackBox 和最常用的渗透测试 Linux 发行版上的此版本。
Metasploit 框架是一组工具,允许信息收集、扫描、利用、利用开发、后利用等。虽然 Metasploit 框架的主要用途集中在渗透测试领域,但它也可用于漏洞研究和漏洞利用开发。
Metasploit 框架的主要组成部分可以总结如下:
- msfconsole:主命令行界面。
- 模块: 支持漏洞利用、扫描程序、有效负载等模块。
- 工具 :有助于漏洞研究、 漏洞评估或渗透测试的独立工具。其中一些工具是 msfvenom、pattern_create 和 pattern_offset。我们将在本模块中介绍 msfvenom,但 pattern_create 和 pattern_offset 是漏洞利用开发中有用的工具,超出了本模块的范围。
本室将介绍 Metasploit 的主要组件,同时为您提供如何查找相关漏洞、设置参数和利用目标系统上易受攻击的服务的坚实基础。完成此房间后,您将能够舒适地导航和使用 Metasploit 命令行。

任务 2Metasploit 的主要组成部分
使用 Metasploit 框架时,您将主要与 Metasploit 控制台进行交互。您可以使用 msfconsole 命令从 AttackBox 终端启动它。控制台将是您与 Metasploit 框架的不同模块交互的主要界面。模块是 Metasploit 框架中的小组件,用于执行特定任务,例如利用漏洞、扫描目标或执行暴力攻击。
在深入研究模块之前,澄清一些反复出现的概念会很有帮助:漏洞、漏洞利用和有效负载。
- 利用: 使用目标系统上存在的漏洞的代码段。
- 脆弱性: 影响目标系统的设计、编码或逻辑缺陷。利用漏洞可能会导致泄露机密信息或允许攻击者在目标系统上执行代码。
- 有效载荷: 漏洞利用将利用漏洞。但是,如果我们希望漏洞利用达到我们想要的结果(访问目标系统、读取机密信息等),我们需要使用有效负载。有效负载是在目标系统上运行的代码。
下面列出了每个模块下的模块和类别。这些仅供参考,但您将通过 Metasploit 控制台 (msfconsole) 与它们进行交互。
辅助
任何支持模块,例如扫描仪、爬虫和模糊器,都可以在这里找到。

编码
编码器将允许您对漏洞和有效负载进行编码,希望基于签名的防病毒解决方案可能会遗漏它们。
基于签名的防病毒和安全解决方案具有已知威胁的数据库。他们通过将可疑文件与此数据库进行比较来检测威胁,并在匹配时发出警报。因此,编码器的成功率可能有限,因为防病毒解决方案可以执行额外的检查。

规避
虽然编码器会对有效负载进行编码,但不应将其视为直接试图逃避防病毒软件。另一方面,“规避”模块会尝试这样做,或多或少会成功。

利用
漏洞利用,按目标系统整齐地组织。
NOP
NOP(无作)从字面上看什么都不做。它们在具有 0x90 的 Intel x86 CPU 系列中得到代表,之后 CPU 将在一个周期内不执行任何作。它们通常用作缓冲区以实现一致的有效负载大小。

负载
有效负载是在目标系统上运行的代码。
漏洞利用将利用目标系统上的漏洞,但要达到预期的结果,我们需要有效负载。例子可能是;获取 shell、将恶意软件或后门加载到目标系统、运行命令或启动 calc.exe 作为概念验证以添加到渗透测试报告中。通过启动 calc.exe 应用程序在目标系统上远程启动计算器是一种良性方法,可以表明我们可以在目标系统上运行命令。
在目标系统上运行命令已经是一个重要的步骤,但拥有一个交互式连接,允许您键入将在目标系统上执行的命令会更好。这种交互式命令行称为“shell”。Metasploit 提供了发送可以在目标系统上打开 shell 的不同有效负载的能力。

您将在有效负载下看到四个不同的目录:适配器、单曲、暂存器和阶段。
- 适配器: 适配器包装单个有效负载以将其转换为不同的格式。例如,可以将普通的单个有效负载包装在 Powershell 适配器中,这将生成一个执行有效负载的单个 powershell 命令。
- 单打: 独立的有效负载(添加用户、启动 notepad.exe 等),无需下载其他组件即可运行。
- 分阶段: 负责在 Metasploit 和目标系统之间建立连接通道。在处理暂存有效负载时很有用。“暂存有效负载”将首先在目标系统上上传暂存器,然后下载其余有效负载(暂存)。这提供了一些优势,因为与一次发送的完整有效负载相比,有效负载的初始大小相对较小。
- 阶段: 由分阶段下载。这将允许您使用更大尺寸的有效负载。
Metasploit 有一种微妙的方法来帮助您识别单个(也称为“内联”)有效负载和分阶段有效负载。
- 通用/shell_reverse_tcp
- windows/x64/shell/reverse_tcp
两者都是反向 Windows shell。前者是内联(或单个)有效负载,如“shell”和“reverse”之间的“_”所示。而后者是分级有效载荷,如“shell”和“reverse”之间的“/”所示。
发布
帖子模块将在上面列出的渗透测试过程的最后阶段(开发后)中发挥作用。

如果您想进一步熟悉这些模块,可以在 Metasploit 安装的 modules 文件夹下找到它们 。对于 AttackBox,这些位于 /opt/metasploit-framework/embedded/framework/modules 下,kali位于/usr/share/metasploit-framework/modules下。

任务 3Msf 控制台
如前所述,控制台将是 Metasploit 框架的主界面 。您可以在 AttackBox 终端或任何系统上使用 msfconsole 命令启动它,Metasploit 框架已安装在。

启动后,您将看到命令行更改为 msf6(或 msf5,具体取决于已安装的 Metasploit)。Metasploit 控制台 (msfconsole) 可以像常规命令行 shell 一样使用,如下所示。第一个命令是 ls,它列出了使用 msfconsole 命令从中启动 Metasploit 的文件夹的内容 。``
随后会发送到 Google 的 ``DNS IP 地址 (8.8.8.8) 的 ping。当我们在 AttackBox 上运作时, 这是 Linux 我们必须添加 -c 1 选项,因此只发送了一个 ping。否则,ping 进程将继续,直到使用 CTRL+C 停止。

它将支持大多数 Linux 命令,包括 clear(清除终端屏幕),但不允许您使用常规命令行的某些功能(例如不支持输出重定向),如下所示。

在主题上,help 命令可以单独使用,也可以用于特定命令。以下是我们即将介绍的设置命令的帮助菜单。

您可以使用 history 命令查看您之前键入的命令。

msfconsole 的一个重要功能是支持制表符补全。这在以后使用 Metasploit 命令或处理模块。例如,如果您开始输入 he 并按 Tab 键,您会看到它会自动完成以提供帮助 。
Msfconsole 由上下文管理;这意味着,除非设置为全局变量,否则如果您更改决定使用的模块,所有参数设置都将丢失。在下面的示例中,我们使用了漏洞 ms17_010_eternalblue,并设置了 RHOSTS 等参数。如果我们要切换到另一个模块(例如端口扫描器),我们将需要再次设置 RHOSTS 值,因为我们所做的所有更改都保留在ms17_010_eternalblue漏洞利用的上下文中。
让我们看下面的示例,以便更好地理解此功能。我们将使用 MS17-010“Eternalblue”漏洞进行说明。
键入命令 use exploit/windows/smb/ms17_010_eternalblue 后,您将看到命令 行提示符从 MSF6 更改为“MSF6 Exploit(Windows/SMB/ms17_010_eternalblue)”。“EternalBlue”是一个漏洞 据称由美国国家安全局 (NSA) 针对影响 SMBv1 服务器的漏洞而开发 众多 Windows 系统。SMB(服务器消息块)广泛用于 Windows 网络中的文件共享和 甚至用于将文件发送到打印机。EternalBlue 于 4 月被网络犯罪组织“Shadow Brokers”泄露 2017. 2017 年 5 月,该漏洞在 WannaCry 勒索软件攻击中在全球范围内被利用。

也可以使用 use 命令选择要使用的模块,后跟 搜索结果行的开头。
虽然提示已更改,但您会注意到我们仍然可以运行前面提到的命令。这意味着我们没有像您在作系统命令行中通常期望的那样“输入”文件夹。

提示告诉我们,我们现在有一个上下文集,我们将在其中工作。您可以通过键入 show options 命令来查看这一点。

这将打印与我们之前选择的漏洞相关的选项。show options 命令将具有不同的输出,具体取决于使用它的上下文。上面的示例表明,此漏洞需要我们设置 RHOSTS 和 RPORT 等变量。另一方面,后利用模块可能只需要我们设置一个 SESSION ID(见下面的屏幕截图)。会话是与攻击后模块将使用的目标系统的现有连接。

show 命令可以在任何上下文中使用,后跟模块类型(辅助、有效负载、漏洞利用等)来列出可用模块。下面的示例列出了可用于 ms17-010 Eternalblue 漏洞利用的有效负载。

如果从 msfconsole 提示符使用,则 show 命令将列出所有模块。
到目前为止,我们看到的 use 和 show options 命令对于 Metasploit。
您可以使用 back 命令离开上下文。

可以通过在其上下文中键入 info 命令来获取有关任何模块的更多信息。

或者,您可以使用 info 命令,后跟 msfconsole 提示符中的模块路径(例如 info exploit/windows/smb/ms17_010_eternalblue )。信息不是帮助菜单;它将显示有关模块的详细信息,例如其作者、相关来源等。
搜索
msfconsole 中最有用的命令之一是 search。此命令将在 Metasploit Framework 数据库中搜索与给定搜索参数相关的模块。您可以使用 CVE 编号、漏洞利用名称(eternalblue、heartbleed 等)或目标系统进行搜索。

《TryHackMe | Metasploit 入门指南》 search 命令会返回每个模块的概览信息。您可能会注意到”name”这一列 相比仅仅显示模块名称,这里提供了更多信息。您可以看到模块的类型(辅助模块、漏洞利用模块等) 以及模块的类别(扫描器、管理员、Windows、Unix 等)。您可以使用搜索返回的任何模块 使用命令”use”加上结果行首的编号即可(例如 use 0) 而非 use auxiliary/admin/smb/ms17_010_command )
另一项关键信息是”rank”(评级)列。漏洞利用模块按可靠性分级,下表为各等级的具体说明。

来源:https://github.com/rapid7/metasploit-framework/wiki/Exploit-Ranking
你可以使用诸如类型和平台等关键词来定向搜索功能。
例如,如果我们希望搜索结果仅包含辅助模块,可以将类型设置为 auxiliary。下方截图展示了执行 search type:auxiliary telnet 命令后的输出结果。

请记住,漏洞利用程序会利用目标系统的漏洞,并可能总是表现出不可预期的行为。一个评级较低的漏洞利用程序可能完美运行,而一个评级优秀的漏洞利用程序可能无法运行,甚至更糟,导致目标系统崩溃。

任务 4使用模块
你可以启动本任务房间附带的靶机,以复现以下示例。任何版本的 Metasploit 5 或 6 将显示与此处类似的菜单和界面,因此您可以使用 AttackBox 或本地计算机上安装的任何操作系统 已安装的系统。
一旦使用 use 命令后跟模块名称进入模块上下文, 如前面所示,您需要设置参数。下面列出了您将使用的最常见参数。请记住, 根据所采用的模块不同,可能需要设置额外或不同的参数。最佳做法是使用 show options 命令来列出必备参数。
所有参数都采用相同的命令语法进行设置:set PARAMETER_NAME VALUE
继续操作前,请务必检查 msfconsole 提示符以确保处于正确上下文中。使用 Metasploit 时,你可能会遇到五种不同的提示状态:
- 普通命令提示符: 此处无法使用 Metasploit 命令。

- **msfconsole 提示符:**msf6(或根据安装版本显示为 msf5)是 msfconsole 的提示符。如你所见,此处未设置上下文,因此无法使用设置参数和运行模块等上下文相关命令。

- 上下文提示: 当你决定使用某个模块并通过 set 命令选中后,msfconsole 将显示对应的上下文环境。此时你可以在此处使用上下文特定命令(例如 set RHOSTS 10.10.x.x)。

- **Meterpreter 命令行提示符:**Meterpreter 是我们将在本模块后续详细讲解的重要载荷。这意味着目标系统已加载 Meterpreter 代理并与您建立了反向连接。您可以在此处使用 Meterpreter 专属命令。

- 目标系统上的 Shell: 成功利用漏洞后,您可能会获得目标系统的命令行访问权限。 这是一个常规的命令行界面,在此输入的所有命令都将在目标系统上执行。

如前所述,show options 命令将列出所有可用参数。

如上图截图所示,部分参数需赋值才能触发漏洞利用。某些必填参数值会预先填充,请务必核对这些值是否适用于您的目标环境。例如某个网页漏洞利用模块可能预设了 RPORT(远程端口:目标系统上 Metasploit 尝试连接并执行漏洞利用的端口)值为 80,但您的目标 Web 应用可能运行在 8080 端口。
在此示例中,我们将使用 RHOSTS 参数设置目标系统的 IP 地址 set 命令。

设置完参数后,您可以使用 show options 命令来检查该值是否已正确设置。
您经常会用到的参数包括:
- RHOSTS: “远程主机”,即目标系统的 IP 地址。可以设置为单个 IP 地址或网络范围。支持 CIDR(无类别域间路由)表示法(如/24、/16 等)或网络范围(例如 10.10.10.x – 10.10.10.y)。您也可以使用文件来列出目标,每行一个目标,格式为 file:/目标文件路径.txt,如下所示。

- RPORT:“远程端口”,即目标系统上运行易受攻击应用程序的端口。
- 载荷(PAYLOAD): 与漏洞利用模块配合使用的攻击载荷。
- 本地主机(LHOST): “本地主机”,即攻击机(您的 AttackBox 或 Kali Linux)的 IP 地址。
- 本地端口(LPORT): “本地端口”,用于反向 shell 连接回连的端口。这是攻击机上的端口,可设置为任意未被其他应用程序占用的端口。
- 会话: 每次使用 Metasploit 与目标系统建立的连接都会分配一个会话 ID。在后续利用模块中,您将通过这个现有连接与目标系统交互时需要使用该 ID。
您可以通过再次执行 set 命令并指定新值来覆盖任何已设置的参数。若要清除单个参数值,可使用 unset 命令;要清除所有参数设置,则使用 unset all 命令。

您可以使用 setg 命令来设置将应用于所有模块的值。setg 命令的使用方式与 set 命令类似,区别在于:若使用 set 命令在某个模块中设置值后切换至其他模块,需重新设置该值;而 setg 命令允许设置的值在不同模块中默认通用。您可通过 unsetg 命令清除所有由 setg 设置的值.
以下示例采用如下流程:
- 我们使用ms17_010_eternalblue可被利用的
- 我们使用
setg命令而非 set 命令来设置 RHOSTS 变量 - 我们使用
back命令来退出漏洞利用上下文 - 我们使用辅助模块(该模块是用于发现 MS17-010 漏洞的扫描器)
show options命令显示 RHOSTS 参数已自动填入目标系统的 IP 地址。

这 setg 命令设置一个全局值,该值将持续有效,直到您退出 Metasploit 或使用 unsetg 命令清除它。
使用模块
设置完所有模块参数后,可以使用 exploit 命令启动模块。Metasploit 还支持 run 命令,这是为 exploit 命令创建的别名,因为在使用非攻击类模块(端口扫描器、漏洞扫描器等)时,”exploit”这个术语并不贴切。
这 exploit 命令可不带任何参数使用,或者搭配 “-z“ 参数使用。
exploit -z 命令会在渗透成功后立即将会话转为后台运行。

这将让你返回到运行该漏洞利用的上下文提示符。
某些模块支持 check 选项,它能检查目标系统是否存在漏洞而无需实际利用。
会话
一旦漏洞被成功利用,一个 将会建立一个会话。这是在目标系统与 Metasploit 之间建立的通信通道。
你可以使用 background 命令将当前会话置于后台运行,并返回 msfconsole 提示符。

或者可以使用 CTRL+Z 将会话置于后台运行。
在 msfconsole 提示符或任何上下文中,都可以使用 sessions 命令来查看现有会话。

要与任何会话进行交互, 你可以使用 sessions -i 命令后跟所需的会话编号。


任务 5总结
截至目前我们看到,Metasploit 是一个能简化漏洞利用过程的强大工具。漏洞利用过程包含三个主要步骤:寻找漏洞利用代码、定制漏洞利用代码,以及攻击存在漏洞的服务。
Metasploit 提供了许多模块,可用于渗透过程的每个步骤。通过本实验,我们了解了 Metasploit 的基本组件及其各自用途。
您还应该使用ms17_010_eternalblue漏洞利用程序来获取目标虚拟机的访问权限。
在后续实验中,我们将更详细地介绍 Metasploit 及其组件。完成本模块后,您应能充分理解 Metasploit 的功能。