msfvenom — это инструмент, входящий в состав Metasploit Framework. С помощью этого инструмента вы можете создавать пользовательские полезные нагрузки, адаптированные к конкретным целям и требованиям. Кроме того, вы можете прикреплять полезные данные к другим файлам, которые сделают вашу полезную нагрузку менее подозрительной. Вы также можете отредактировать коды своих полезных нагрузок и изменить их, чтобы избежать обнаружения системами обнаружения угроз.

Полезные нагрузки(payloads)

Чтобы увидеть все варианты создания полезной нагрузки, вы можете перечислить модули, используя флаг -l, за которым следует тип модуля. На выходе получается длинный список полезной нагрузки. Вы можете использовать команду grep, чтобы сузить результат по своему вкусу. Вот пример для показа полезных нагрузок для Android устройств:

┌──(k1ber㉿kali)-[~]
└─$ msfvenom -l payloads | grep android
    android/meterpreter/reverse_http                                   Run a meterpreter server in Android. Tunnel communication over HTTP
    android/meterpreter/reverse_https                                  Run a meterpreter server in Android. Tunnel communication over HTTPS
    android/meterpreter/reverse_tcp                                    Run a meterpreter server in Android. Connect back stager
    android/meterpreter_reverse_http                                   Connect back to attacker and spawn a Meterpreter shell
    android/meterpreter_reverse_https                                  Connect back to attacker and spawn a Meterpreter shell
    android/meterpreter_reverse_tcp                                    Connect back to the attacker and spawn a Meterpreter shell
    android/shell/reverse_http                                         Spawn a piped command shell (sh). Tunnel communication over HTTP
    android/shell/reverse_https                                        Spawn a piped command shell (sh). Tunnel communication over HTTPS
    android/shell/reverse_tcp                                          Spawn a piped command shell (sh). Connect back stager

Что бы узнать, какие параметры необходимы для конкретной полезной нагрузки, используйте параметр --list-options .

┌──(k1ber㉿kali)-[~]
└─$ msfvenom -p android/shell/reverse_https --list-options
Options for payload/android/shell/reverse_https:
=========================

       Name: Command Shell, Android Reverse HTTPS Stager
     Module: payload/android/shell/reverse_https
   Platform: Android
       Arch: dalvik
Needs Admin: No
 Total size: 10399
       Rank: Normal

Provided by:
    mihi
    egypt <[email protected]>
    anwarelmakrahy
    OJ Reeves

Basic options:
Name   Current Setting  Required  Description
----   ---------------  --------  -----------
LHOST                   yes       The local listener hostname
LPORT  8443             yes       The local listener port
LURI                    no        The HTTP Path

Description:
  Spawn a piped command shell (sh). Tunnel communication over HTTPS

Advanced options for payload/android/shell/reverse_https:
=========================

    Name                        Current Setting                                                    Required  Description
    ----                        ---------------                                                    --------  -----------
    AndroidHideAppIcon          false                                                              no        Hide the application icon automatically after launch
    AndroidMeterpreterDebug     false                                                              no        Run the payload in debug mode, with logging enabled
    AndroidWakelock             true                                                               no        Acquire a wakelock before starting the payload
    AutoRunScript                                                                                  no        A script to run automatically on session creation.
    AutoVerifySession           true                                                               yes       Automatically verify and drop invalid sessions
    CommandShellCleanupCommand                                                                     no        A command to run before the session is closed
    CreateSession               true                                                               no        Create a new session for every successful login
    EnableStageEncoding         false                                                              no        Encode the second stage payload
    HandlerSSLCert                                                                                 no        Path to a SSL certificate in unified PEM format
    HttpCookie                                                                                     no        An optional value to use for the Cookie HTTP header
    HttpHostHeader                                                                                 no        An optional value to use for the Host HTTP header
    HttpReferer                                                                                    no        An optional value to use for the Referer HTTP header
    HttpServerName              Apache                                                             no        The server header that the handler will send in response to requests
    HttpUnknownRequestResponse  <html><body><h1>It works!</h1></body></html>                       no        The returned HTML response body when the handler receives a request that is not from a payload
    HttpUserAgent               Mozilla/5.0 (Macintosh; Intel Mac OS X 13_1) AppleWebKit/605.1.15  no        The user-agent that the payload should use for communication Max parameter length: 255 characters
                                 (KHTML, like Gecko) Version/16.1 Safari/605.1.15
    IgnoreUnknownPayloads       false                                                              no        Whether to drop connections from payloads using unknown UUIDs
    InitialAutoRunScript                                                                           no        An initial script to run on session creation (before AutoRunScript)
    OverrideLHOST                                                                                  no        When OverrideRequestHost is set, use this value as the host name for secondary requests
    OverrideLPORT                                                                                  no        When OverrideRequestHost is set, use this value as the port number for secondary requests
    OverrideRequestHost         false                                                              no        Forces a specific host and port instead of using what the client requests, defaults to LHOST:LPORT
    OverrideScheme                                                                                 no        When OverrideRequestHost is set, use this value as the scheme for secondary requests, e.g http or https
    PayloadUUIDName                                                                                no        A human-friendly name to reference this unique payload (requires tracking)
    PayloadUUIDRaw                                                                                 no        A hex string representing the raw 8-byte PUID value for the UUID
    PayloadUUIDSeed                                                                                no        A string to use when generating the payload UUID (deterministic)
    PayloadUUIDTracking         false                                                              yes       Whether or not to automatically register generated UUIDs
    PingbackRetries             0                                                                  yes       How many additional successful pingbacks
    PingbackSleep               30                                                                 yes       Time (in seconds) to sleep between pingbacks
    ReverseAllowProxy           false                                                              yes       Allow reverse tcp even with Proxies specified. Connect back will NOT go through proxy but directly to LHOST
    ReverseListenerBindAddress                                                                     no        The specific IP address to bind to on the local system
    ReverseListenerBindPort                                                                        no        The port to bind to on the local system if different from LPORT
    ReverseListenerComm                                                                            no        The specific communication channel to use for this listener
    SSLVersion                  Auto                                                               yes       Specify the version of SSL/TLS to be used (Auto, TLS and SSL23 are auto-negotiate) (Accepted: Auto, TLS, SSL23, SSL3, TLS1,
                                                                                                             TLS1.1, TLS1.2)
    StageEncoder                                                                                   no        Encoder to use if EnableStageEncoding is set
    StageEncoderSaveRegisters                                                                      no        Additional registers to preserve in the staged payload if EnableStageEncoding is set
    StageEncodingFallback       true                                                               no        Fallback to no encoding if the selected StageEncoder is not compatible
    StagerVerifySSLCert         false                                                              no        Whether to verify the SSL certificate in Meterpreter
    VERBOSE                     false                                                              no        Enable detailed status messages
    WORKSPACE                                                                                      no        Specify the workspace for this module

Evasion options for payload/android/shell/reverse_https:
=========================

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

Как видите, параметров для этого эксплоита довольно много. Они делятся на две категории. Основные(Basic) параметры и дополнительные(Advanced) параметры. Вы можете создать полезную нагрузку, настроив как минимум основные параметры. Тем не менее, дополнительные параметры также очень важны. Они предлагают настройку, а также играют решающую роль в обходе систем обнаружения угроз.

Типы полезных нагрузок

В Metasploit Framework есть три разных типа модулей полезной нагрузки: Singles, Stagers и Stages. Эти различные типы обеспечивают большую гибкость и могут быть полезны в различных сценариях.

Что бы понять, является ли нагрузка поэтапной или нет, она представлена символом «/» в имени полезной нагрузки. Например, windows/shell_bind_tcp — это одна полезная нагрузка без стадии**(Single)**, тогда как windows/shell/bind_tcp состоит из стейджа(bind_tcp) и стейджера (оболочки).

Создание поэтапной полезной нагрузки позволяет атакующему разделить атаку на несколько этапов, чтобы увеличить вероятность ее успешного выполнения. Обычно первая стадия (stage 1) полезной нагрузки создает небольшой код, который загружает и выполняет более сложную стадию (stage 2) на целевой системе. Это может быть полезно в сценариях, где доступность или ограничения памяти на целевой системе могут затруднить выполнение полной полезной нагрузки сразу.

Кодировщики(encoders)