Генерация полезных нагрузок (Payload)

Генерация полезных нагрузок (Payload)

@webware

t.me/webware

Привет, в этой статье я продолжу освещать тему полезных нагрузок (Payloads) и их применение. В первой части мы ознакомились с типами Payloads, в этой разберемся с их созданием. В качестве примера будем использовать MetasploitFramework и Kali Linux в качестве ОС. В Metasploit мы можем, создать полезную нагрузку используя msfconsole.

> msfconsole

Когда мы используем пайлоад (use), Metasploit при вводе команды help покажет доступные действия:

> help

Посмотрим возможные опции, которые доступны, при использовании команды ‘generate’:

> generate -h

Для создания шеллкода, без каких либо опций, выполним команду ‘generate’:

> generate

Данный шеллкод является сырым и вероятность его отработки на целевом хосте, очень низка. Он содержит универсальную особенность, нулевой байт (\х00). Некоторые эксплойты его использует, но на этом мы не будем заострять внимание. Далее сгенерируем шеллкод, исключив этот нулевой байт.

Для этого выполняем команду ‘generate –b’ это своего рода переключатель байтов, которые мы хотим исключить в процессе создания.

> generate –b ‘\x00’

Глядя на этот шеллкод в глаза бросаются два существенных различия, первое, предыдущий имел размер 328 байт, новый – 355 байт. Так же, были успешно исключены нулевые байты.

Идем далее, во время генерации шеллкода, присутствующие в нем нулевые байты необходимо переместить или закодировать, для того, чтобы наша нагрузка успешно отработала в памяти хоста.

Теперь про кодирование, по умолчанию Metasploit будет использовать лучший кодер для выполнения этой задачи. Кодер будет отвечать за удаление нежелательных байтов, при использовании переключателя «-b». Исходя их этого, как только фреймворк находит плохие символы, подключится кодер. Таковым является ‘x86/shikata_ga_nai’, он выполнит свою работу в отношении помеченных плохих байтов. Если мы добавим еще плохих байтов в список, другой кодер должен справиться с этой задачей так же.

Попробуем на практике, добавим в список еще несколько байт и посмотрим, что произойдет:

> generate -b '\x00\x44\x67\x66\xfa\x01\xe0\x44\x67\xa1\xa2\xa3\x75\x4b' 

Видим, что на этот раз в работу включился другой кодер - Fnstenv_mov, так как, вероятно Shikata не смог справится с поставленной задачей.

Способность генерировать шеллкод без использования определенных байтов, это неоспоримый плюс, но и она не безгранична. Попробуем превысить допустимый объём опций.

> generate -b '\x00\x44\x67\x66\xfa\x01\xe0\x44\x67\xa1\xa2\xa3\x75\x4b\xFF\x0a\x0b\x01\xcc\6e\x1e\x2e\x26'

Эта задача не может быть выполнена из-за абсурдности самих условий.

Выбор кодера.

Как говорилось выше, исходя из указанных условий, Metasploit выбирает самый лучший кодер для создания пайлоада. Но бывают случаи, когда нам будет необходимо выбрать его самостоятельно. Введем следующую команду для просмотра доступных кодеров:

> show encoders

Теперь, используя приведенные ниже опции, выберем нужный нам кодер. К примеру x86/nonalpha:

> generate –e x86/nonalpha

Полученная в результате полезная нагрузка не должна содержать алфавитно-цифровых символов. Но при изменении применяемого кодера, мы должны учитывать размер полученного шеллкода, в этом примере, он несколько больше чем в предыдущих.

Следующая опция, которую мы рассмотрим это возможность импортировать шеллкод в файл, а не вывод его на экран консоли. Используем флаг –f:

> generate -b '\x00' -e x86/shikata_ga_nai -f /root/ shell.txt

Получаем код в файле:

Создание полезных нагрузок с множеством проходов.

Теперь рассмотрим такую опцию как итерация. Те, кто знаком с программированием, поймут. Это количество проходов кодирования, которое сделает кодер, прежде чем мы получим окончательный вариант шеллкода. Делается это для того, чтобы больше запутать код и осложнить обнаружение антивирусными программами. Сравним шеллкоды с разным количеством итераций. Сама опция используется так:

> generate -b '\x00' -i 2 (2 – количество проходов)

И в 2 итерации:

Сравнивая два шеллкода, мы видим очевидный эффект от двух проходов, наша нагрузка стала больше по размеру, и если сравнивать побайтово, то видим различия. Давайте увеличим количество проходов до 5.

По сравнению с предыдущими примерами, эта нагрузка самая большая по размеру, байты в ней так же уникальны. Теоретически, такой шеллкод труднее обнаружить антивирусным софтом.

Теперь обратим внимание на другие опции, которые Metasploit может нам позволить применить к нашим нагрузкам.

> show options

По умолчанию наш шеллкод будет прослушиваться на порту '4444', а функция выхода будет "process". Изменим порт на '1234' а функцию выхода на ‘seh’ с помощью флага '-o'. Синтаксис таков - переменная = значение, разделяются запятой между каждым параметром. В нашем случае используется следующий синтаксис 'LPORT = 1234, EXITFUNC = SEH'.

> generate -o LPORT=1234,EXITFUNC=seh -b '\x00' -e x86/shikata_ga_nai

И в конце рассмотрим NOP slide и опции формата вывода.

Про NOP slide можно прочитать тут - https://en.wikipedia.org/wiki/NOP_slide

При создании полезной нагрузки по умолчанию используется язык Ruby, хоть он и гибкий и мощный, но не универсальный. Metasploit дает возможность изменить выходной формат данных используя флаг –t. Нам доступны Perl, C, Java к примеру. Проверим это следующей командой:

> generate –t c

> generate –t java

Python тоже присутствует:

> generate –t python

Глядя на результат для различных языков программирования, мы видим, что каждый выход придерживается синтаксиса соответствующего языка. Хэш '#' используется для комментариев в Ruby, но в C он заменен звездочкой с косой чертой, для Python - #. Это делает наш шеллкод готовым к вставке в скрипт.

Добавление NOP (No Operation or Next Operation) осуществляется с помощью флага '-s' с последующим числом NOP. NOP добавляется в начале нашей полезной нагрузки. Имейте в виду, чем больше NOP тем больше будет выходной размер кода. Таким образом, добавив 10 NOP, мы добавим 10 байт к общему размеру.

> generate

> generate –s 10

Результат без NOP байтов:

Результат с добавленными 10 байтами NOP:

Полезная нагрузка, как и ожидалось, увеличилась в размере на 10 байт.

На этом не все, будем учиться работать с шеллкодами далее.

Спасибо за внимание.

Источник codeby.net

Report Page