Payloads 有效载荷

在 Metasploit 中, Payload 指的是帮助漏洞利用模块(通常)向攻击者返回 shell 的模块。有效载荷与漏洞利用本身一起发送,以绕过易受攻击服务的标准运行程序 ( exploits job ) ,然后在目标操作系统上运行,通常会向攻击者返回反向连接并建立立足点 ( payload's job ) 。

Metasploit 框架中有三种不同类型的有效载荷模块:Singles、Stagers 和 Stages。使用三种类型的有效载荷交互将证明对 pentester 有益。它可以为我们执行某些类型的任务提供所需的灵活性。有效载荷是否分阶段由有效载荷名称中的 / 表示。

例如, windows/shell_bind_tcp 是一个没有阶段的单一有效载荷,而 windows/shell/bind_tcp 则由一个阶段启动器 ( bind_tcp ) 和一个阶段 ( shell ) 组成。

Singles - 独立负载

Single 有效载荷包含所选任务的漏洞利用程序和整个 shellcode。内联有效载荷在设计上比同类有效载荷更稳定,因为它们包含所有内容。 Singles 是独立的有效载荷。它们是在目标系统上发送和执行的唯一对象,运行后会立即得到结果。单个有效载荷可以简单到在目标系统中添加一个用户或启动一个进程。

Stagers - 阶段启动器

Stager 有效载荷与 Stage 有效载荷配合执行特定任务。Stager 在攻击者机器上等待,一旦阶段完成在远程主机上的运行,它就准备好与受害者主机建立连接。Stager 通常用于在攻击者和受害者之间建立网络连接,设计小巧可靠。Metasploit 会使用最好的分段器,并在必要时退而求其次。

Stages - 阶段

Stages 是由 stager 模块下载的有效载荷组件。各种有效载荷阶段提供无大小限制的高级功能,如 Meterpreter、VNC 注入等。有效载荷阶段会自动使用中间分期器:

  • 一个单一的 recv() 调用在接收大型有效负荷时可能会失败,需要分段接收

  • Stager(分阶段载荷发送器)接收中间stager,中间stager是payload的一部分

  • 中间stager负责完整下载剩余的payload数据

  • 使用分阶段payload的staged方式有利于获取可读写执行(RWX)权限的内存区域,以执行有效负荷代码

由于单个大型payload可能无法一次性传输,需要先传输一个小的stager,然后中间stager来下载剩余部分。这种分阶段方式也更利于在目标系统获取可执行内存区域。

Staged Payloads - 分阶段有效载荷

简单地说,分阶段有效载荷就是将 exploitation process 模块化并进行功能分离,以帮助将其完成的不同功能分隔成不同的代码块,每个代码块单独完成其目标,但又将攻击串联在一起。如果所有阶段都能正常工作,攻击者最终就能远程访问目标计算机。

与其他有效载荷一样,该有效载荷除了授予对目标系统的外壳访问权限外,其作用范围是尽可能小巧、不显眼,以帮助杀毒软件 ( AV ) / 入侵防御系统 ( IPS ) 尽可能地逃避攻击。

Stage0 分阶段有效载荷中的 "shellcode "代表通过网络发送到目标计算机易受攻击服务的初始 shellcode,其唯一目的是初始化与攻击者计算机的连接。这就是所谓的反向连接。作为 Metasploit 用户,我们会在reverse_tcpreverse_httpsbind_tcp这些通用名称下遇到它们。例如,在 show payloads命令下,您可以查找如下所示的有效载荷:

MSF - Staged Payloads

反向连接不太可能触发防范系统,因为初始化连接的是受害主机,而受害主机大多数情况下位于所谓的 security trust zone 中。当然,网络安全设备和人员不会盲目遵循这一信任策略,因此攻击者即使采取这一步骤也必须小心谨慎。

第 0 阶段代码的目的还在于,一旦到达内存,就会读取更大的后续有效载荷。在攻击者和受害者之间建立起稳定的通信渠道后,攻击者机器很可能会发送一个更大的有效载荷阶段,该阶段应该会授予他们 shell 访问权限。这个更大的有效载荷就是 Stage1 有效载荷。

Meterpreter Payload

Meterpreter 有效载荷是一种特定类型的多层面有效载荷,它使用 DLL injection 来确保与受害主机的连接稳定,难以通过简单的检查发现,并在重启或系统更改时持续存在。Meterpreter 完全存在于远程主机的内存中,不会在硬盘上留下任何痕迹,因此很难用传统的取证技术检测出来。此外,脚本和插件可以根据需要动态地 loaded and unloaded

一旦执行了 Meterpreter 有效载荷,就会创建一个新会话,并生成 Meterpreter 界面。

最后更新于

这有帮助吗?