Портирование эксплоитов

Портирование эксплоита в Metasploit Framework

 

Хоть Metasploit является коммерческой собственностью, он по-прежнему является открытым и процветает на основе внесенных пользователем модулей. У команды разработчиков существует прекрасная возможность портировать существующие публичные эксплоиты в Metasploit Framework. Портирование эксплоитов не только поможет сделать Metasploit более универсальным и мощным, это также отличный способ, для того чтобы узнать о внутренней работе Framework и поможет вам, в это же время, улучшить свои навыки на Ruby. Один очень важный момент, что необходимо помнить при написании Metasploit модулей, что необходимо вас всегда использовать жесткие вкладки, а не пробелы. За некоторыми иными важными деталями модуля, обратитесь к файлу HACKING находящуюся в корне каталога Metasploit. Существует некоторая важная информация, которая поможет убедиться, что ваши представления быстро добавят к стволу.

 

Для начала, нам необходимо выбрать порт эксплоита снова. Мы будем использовать конвертер эксплоита A-PDF WAV в MP3. При портировании эксплоитов, нет необходимости, начинать кодирование с нуля; мы можем просто выбрать уже существующий эксплоит модуль и модифицировать его в соответствии с нашими целями. Поскольку это формат файлов эксплоита, мы будем смотреть под modules/exploits/windows/fileformat/ от главного Metasploit каталога для подходящего кандидата. Этот эксплоит перезаписывает SEH таким образом, мы должны обнаружить эксплоит модуль, который использует mixin Msf::Exploit::Remote::Seh. Мы можем найти в верхней части эксплоита audiotran_pls.rb как это видно ниже.

Перезаписывание эксплоитом SEH
Dante

  Читать далее Портирование эксплоитов

Завершение Эксплоита

Завершение нашего эксплоита egghunter

 

Это переполнение стандарта SEH. Мы можем заметить кое-что из нашего пользовательского ввода в ‘pop, pop, ret‘ вдали от нашего stack. Интересной вещью что можно заметить из скриншота, является тот факт, что мы отправили 2000 байт payload — однако кажется что когда мы возвратимся к нашему буферу, он получается усеченным. У нас есть около 80 байт пространства для нашего shell кода (синим выделено). Мы используем невосприимчивость! Функция safeseh определит местоположение незащищенных библиотек, из которых может быть найден обратный адрес.

Исключение обработчика переполнения SEH
Dante

 

Мы копируем DLL и ищем POP POP RET комбинации команд при помощи msfpescan.

Используем msfpescan
Dante

 

Из доказательства концепции эксплоита

 

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

Используем pattern create
Dante

 

Мы модифицируем наш эксплоит путем введения действенного обратно адреса.

Ввод обратного адреса
Dante

 

Затем мы настроим буфер для перенаправления потока исполнения на момент краха нашего обратного адреса, перепрыгнув через него (xEB является коротким прыжком ‘short jump‘) и затем останавливаем точку остановки буфера (xCC).

Настраиваем буфер
Dante

 

Еще раз мы создаем наш файл эксплоита, приложим Audacity отладчику и импортируем вредоносный файл. На этот раз, SEH должны быть перезаписаны с нашего адреса — тот который приведет нас к набору команд pop, pop, ret. Там мы устанавливаем точку остановки, и еще раз возьмем исключение с shift + F9 и пройдем сквозь наш pop pop ret с F8.

SEH сети
Dante

 

Короткий прыжок перебросит нас через наш обратный адрес, в нашем ‘shellcode buffer‘.

Shell код эксплоита Egg Hunter
Dante

 

Снова мы имеем очень мало места в буфере для нашего payload. Быстрый осмотр памяти показывает что длина нашего полного буфера может быть найдена в динамической памяти. Зная это мы может использовать наше первоначальное пространство 80 байт в выполнении egghunter, который будет искать и найдет второй payload.

Egg-hunt эксплоит
Dante

 

Реализация Metasploit Framework egghunter достаточно проста:

Код Metasploit Framework egghunter
Dante

 

Окончательно эксплоит выглядит так:

Окончательный эксплоит
Dante

 

Мы запустим конечный эксплоит через отладчик чтобы убедится, что все в порядке. Мы видим egghunter был реализован корректно и замечательно работает.

Производим запуск egghunter
Dante

 

Мы генерируем наш окончательный взрывной эксплоит:

Производим генерацию эксплоита
Dante

 

И получим meterpreter shell.

 

Получаем Shell Meterpreter
Dante

Использование Egghunter Mixin

Отправление Egg-hunt

 

Metasploit Framework egghunter mixin является замечательным модулем который может быть чрезвычайно полезным в разработке эксплоитов. Для тех кто не знаком с понятием egghunters давайте объясню. Как смогу.

 

Egg-hunt

 

Это является еще одной формой staged shell кода, который используется если злоумышленник может ввести больший shell код в процесс, но не может определить где в процессе будет конец. Малый egg-hunt shell код вводится в процесс предсказанного расположения и выполняется. Этот код ищет пространство адресного процесса для большого shell кода(egg) и выполняет его.

 

Уязвимость в редакторе аудио Audacity представляет нам возможность изучить этот mixin в большей глубине. В следующем модуле, мы будем использовать Audacity и создадим Metasploit формат файла эксплоит модуля для него. Мы не будем фокусироваться на самом методе эксплуатации или начале теории, а окунемся прямо в практическое использование в Egghunter mixin.

Читать далее Использование Egghunter Mixin

Получение Shell

Написание эксплоит модуля

 

С тем что мы узнали, мы пишем эксплоит и сохраняем его на ‘windows/imap/surgemail_list.rb‘. Давайте взглянем на наш новый эксплоит модуль ниже:

Наш модуль эксплоит
Dante

 

Наиболее важные вещи, которые мы можем заметить в предыдущем эксплоит коде следующие:

 

Мы определили максимальное пространство для shell кода (Space => 10351) и имеется установка DisableNops, чтобы отключить автоматическое заполнение shell кода, мы сделаем площадку payload нашей собственной.

 

Мы ставим кодировщик по умолчанию в AlphanumMixed по причине особенностей протокола IMAP.

  Читать далее Получение Shell

Написание Эксплоита

Улучшение разработки нашего эксплоита

 

Ранее мы рассмотрели Fuxxing IMAP-сервера в разделе Simple IMAP Fuzzer. В конце наших усилий мы обнаружили что мы могли бы переписать EIP, сделав ESP только точкой регистра, указывающей на ячейку памяти под нашим управлением ( 4 байта после нашего возврата адреса). Мы продолжим и восстановим наш буфер (fuzzed = “A”*1004 + “B”*4 + “C”*4), для подтверждения, того что поток выполнил перенаправление через удаленный адрес JMP ESP.

Производим запуск fuzz_imap
Dante

 

Отладчик для поиска эксплоита
Dante

  Читать далее Написание Эксплоита

MSFrop

Поиск уязвимого кода с MSFrop

 

Вместе с разработкой эксплоитов для новых версий операционных систем Windows, вы обнаружите что теперь у них по умолчанию включено Предотвращение Выполнения Данных ‘Data Execution Prevention (DEP)‘. DEP предотвращает shell код из выполнения в стеке и заставляет эксплоит разработчиков искать пути обхода этого и разработки так называемого Возвратно ориентированного программирования (ROP).

 

ROP payload создается при помощи уже существующих наборов инструкций из non-ASLR включенных бинарных файлов, чтобы сделать ваш shell код исполняемым. Каждый набор инструкций должен заканчиваться в инструкции RETN чтобы перенести на ROP-цепи с каждого набора инструкций как правило называющихся гаджеты.

  Читать далее MSFrop

Буквенно-цифровой Shellcode в Metasploit

Генерирование буквенно-цифрового shell-кода с Metasploit

 

Бывают случаи когда вам необходимо получить чистый буквенно-цифровой shell код в связи с фильтрацией в эксплуатируемом приложении. Metasploit Framework способен генерировать буквенно-цифровой shell код легко через Msfvenom. Например, чтобы сгенерировать смешанный буквенно-цифровой shell код с прописными и строчными буками, мы можем использовать следующую команду:

Генерация буквенно-цифрового shell кода
Dante

  Читать далее Буквенно-цифровой Shellcode в Metasploit