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

Завершение нашего эксплоита 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