理解和使用 Metasploit 中的 Staged 与 Stageless Payloads

Kali LinuxBeginner
立即练习

引言

在 Metasploit Framework 的渗透测试领域,payload(载荷)是在成功利用漏洞后在目标系统上运行的代码。理解不同类型的 payload 对于成功的渗透至关重要。payload 的两大主要类别是“staged”(分阶段)和“stageless”(无阶段)。

staged payload 分为两部分发送:一个小的初始“stager”(阶段器)和一个较大的最终“stage”(阶段)。stager 的任务是建立与攻击者机器的连接,然后下载 payload 的其余部分。而 stageless payload 则是一个单一的、自包含的包,其中包含在目标上执行所需的所有代码。

在本实验中,你将获得这两种类型的实践经验。你将使用 Metasploit 控制台来选择每种 payload 类型,观察它们的主要区别,特别是大小方面,并了解使用每种 payload 的优缺点。

选择一个 exploit 和 staged payload,例如 windows/meterpreter/reverse_tcp

在此步骤中,你将启动 Metasploit Framework 控制台并选择一个通用的 exploit handler。然后,你将配置它使用一个常见的 staged payload。我们使用 exploit/multi/handler 模块,因为它是一个通用的监听器,非常适合演示 payload,而无需特定的易受攻击目标。

首先,打开你的终端并启动 Metasploit 控制台。我们将使用 -q(quiet,安静)标志来跳过启动横幅。

msfconsole -q

看到 Metasploit 提示符 (msf6 >) 后,你需要选择 exploit handler。

use exploit/multi/handler

接下来,让我们设置 payload。staged payload 的名称通常格式为 platform/stage/stager。例如,windows/meterpreter/reverse_tcp 表示平台是 Windows,最终 payload(stage)是 Meterpreter,而初始连接方法(stager)是反向 TCP shell。

使用以下命令设置 staged payload:

set payload windows/meterpreter/reverse_tcp

你将看到一条确认消息 payload => windows/meterpreter/reverse_tcp。为了确保无误,你可以查看当前配置。

show options

你将在选项中看到列出的 payload。我们不需要设置 LHOSTLPORT,因为我们实际上并没有运行 exploit;我们只是在检查 payload 的属性。

msf6 exploit(multi/handler) > show options

Module options (exploit/multi/handler):

   Name  Current Setting  Required  Description
   ----  ---------------  --------  -----------


Payload options (windows/meterpreter/reverse_tcp):

   Name      Current Setting  Required  Description
   ----      ---------------  --------  -----------
   EXITFUNC  process          yes       Exit technique (Accepted: '', seh, thread, process, none)
   LHOST                      yes       The listen address (an interface may be specified)
   LPORT     4444             yes       The listen port


Exploit target:

   Id  Name
   --  ----
   0   Wildcard Target

观察 staged payload 的小尺寸

在此步骤中,你将使用 info 命令来检查你选择的 staged payload 的详细信息。最需要注意的细节是它的尺寸。

在 Metasploit 控制台中,仍然选择 windows/meterpreter/reverse_tcp payload,输入 info 命令:

info

Metasploit 将显示 payload 的详细信息,包括其名称、平台、架构和尺寸。滚动浏览输出,找到“Payload size”这一行。

msf6 exploit(multi/handler) > info

       Name: Windows Meterpreter, Reverse TCP Stager
     Module: payload/windows/meterpreter/reverse_tcp
   Platform: Windows
       Arch: x86
Needs Admin: No
 Total size: 354
       Rank: Normal

Provided by:
  skape <stephen_fewer@harmonysecurity.com>
  sf <stephen_fewer@harmonysecurity.com>

Basic options:
Name      Current Setting  Required  Description
----      ---------------  --------  -----------
EXITFUNC  process          yes       Exit technique (Accepted: '', seh, thread, process, none)
LHOST                      yes       The listen address (an interface may be specified)
LPORT     4444             yes       The listen port

Description:
  Connect back to the attacker and spawn a Meterpreter server (staged).
  Listen for a connection from the stager and send the second stage.

请注意,Total size 非常小(例如,354 字节)。这是 staged payload 的关键特征。这小段代码,即 stager,仅用于连接回你的机器并下载更大的 Meterpreter stage。如此小的尺寸使其非常适合某些 exploit 的内存限制。

选择相同的 exploit 和 stageless payload,例如 windows/meterpreter_reverse_tcp

现在,让我们切换到 stageless payload 来看看区别。stageless payload 的名称通常格式为 platform/payload_type,使用下划线 _ 而不是第二个斜杠 /。这种命名约定可以帮助你快速识别它们。

在同一个 msfconsole 会话中,再次使用 set payload 命令,但这次是为 stageless 版本:windows/meterpreter_reverse_tcp

set payload windows/meterpreter_reverse_tcp

你将看到确认信息 payload => windows/meterpreter_reverse_tcp。注意名称中的下划线。这个单一的 payload 包含完整的 Meterpreter 服务器和连接逻辑,全部打包在一起。

让我们再次检查选项以确认更改。

show options

输出现在将反映新选择的 stageless payload。

msf6 exploit(multi/handler) > show options

Module options (exploit/multi/handler):

   Name  Current Setting  Required  Description
   ----  ---------------  --------  -----------


Payload options (windows/meterpreter_reverse_tcp):

   Name      Current Setting  Required  Description
   ----      ---------------  --------  -----------
   EXITFUNC  process          yes       Exit technique (Accepted: '', seh, thread, process, none)
   LHOST                      yes       The listen address (an interface may be specified)
   LPORT     4444             yes       The listen port

...

你现在已成功从 staged payload 切换到 stageless payload。

观察 stageless payload 的较大尺寸

在此步骤中,你将检查刚刚选择的 stageless payload,并将其尺寸与步骤 2 中的 staged payload 进行比较。

和之前一样,使用 info 命令获取当前 payload 的详细信息。

info

检查输出并找到“Payload size”这一行。

msf6 exploit(multi/handler) > info

       Name: Windows Meterpreter, Reverse TCP Inline
     Module: payload/windows/meterpreter_reverse_tcp
   Platform: Windows
       Arch: x86
Needs Admin: No
 Total size: 999335
       Rank: Normal

Provided by:
  skape <stephen_fewer@harmonysecurity.com>
  sf <stephen_fewer@harmonysecurity.com>

Basic options:
Name      Current Setting  Required  Description
----      ---------------  --------  -----------
EXITFUNC  process          yes       Exit technique (Accepted: '', seh, thread, process, none)
LHOST                      yes       The listen address (an interface may be specified)
LPORT     4444             yes       The listen port

Description:
  Connect back to the attacker and spawn a Meterpreter server (inline).
  This payload is a single executable and does not need to download a
  second stage.

正如你所见,Total size 显著增大(例如,999335 字节或近 1 MB),而 staged payload 的尺寸只有几百字节。这是因为 stageless payload 包含了完整的 Meterpreter 功能。执行后无需下载任何其他内容。

现在你已经看到了主要区别,可以退出 Metasploit 控制台了。

exit

讨论每种 payload 类型的优缺点

在最后一步,我们将总结 staged 和 stageless payload 的优点和缺点。理解这些权衡是为特定场景选择正确工具的关键。此步骤无需运行任何命令,仅用于概念理解。

Staged Payloads (例如 windows/meterpreter/reverse_tcp)

优点:

  • 尺寸小: 初始 stager 非常小。当 exploit 的 payload 缓冲区大小或内存空间非常有限时,这是一个显著的优势。
  • 隐蔽性(初始阶段): 与大型、功能丰富的 payload 相比,小型 stager 被基于签名的简单杀毒软件标记的可能性较低。

缺点:

  • 多次连接: 需要第二次连接来下载主 stage。这会产生更多的网络流量,并为防火墙、入侵检测系统 (IDS) 或网络管理员提供了另一个检测和阻止攻击的机会。
  • 稳定性较差: 连接可能不稳定。如果在下载第二个 stage 的过程中连接中断,exploit 将会失败。
  • 回连问题: 目标机器必须能够通过网络连接到攻击者机器以下载 stage,这在高度受限的网络中可能是一个问题。

Stageless Payloads (例如 windows/meterpreter_reverse_tcp)

优点:

  • 可靠性与稳定性: 由于所有内容都打包在一起,payload 更具独立性和稳定性。它只需要建立一次连接,一旦运行,就不依赖于下载更多组件。
  • 在受限环境中工作: 一旦 payload 被传递到目标,它就可以执行而无需下载任何其他内容,这在目标机器的入站互联网访问受限或没有访问权限时非常有用。

缺点:

  • 尺寸大: 其较大的尺寸是最大的缺点。它们可能无法适应许多 exploit 所允许的内存空间,从而在那些情况下无法使用。
  • 更容易被检测: 大型、单一的可执行文件通常更容易被杀毒软件和安全解决方案基于其大小和签名进行分析和标记为恶意软件。

总而言之,在处理有尺寸限制的 exploit 时,你应该选择 staged payload。当可靠性至关重要且 exploit 方法能够处理更大的 payload 尺寸时,选择 stageless payload。

总结

在此实验中,你探索了 Metasploit Framework 中 staged 和 stageless payload 的基本区别。

你首先启动了 msfconsole 并选择了 staged payload windows/meterpreter/reverse_tcp。你观察到它非常小的尺寸,这是为了成为一个轻量级的 stager 而设计的。然后,你切换到其对应的 stageless payload windows/meterpreter_reverse_tcp,并注意到其尺寸显著增大,因为它将整个 payload 包含在一个单独的包中。

最后,你回顾了每种类型的优缺点,了解到它们之间的选择涉及尺寸、隐蔽性和可靠性之间的权衡。Staged payload 体积小但需要第二次连接,而 stageless payload 体积大但更稳定且自包含。这些知识对于在渗透测试过程中做出有效决策至关重要。