Egg Hunter - это метод, используемый во время разработки эксплойта, который может искать один шелл-код во всем диапазоне памяти и перенаправлять на него поток. В этом посте будет рассказано о процессе разработки одного возможного эксплойта HTTP-сервера Kolibri v2.0, который использует технику Egg Hunter.

Заявление об ограничении ответственности: ПОЖАЛУЙСТА! Это делается только для исследовательских целей и должно использоваться только в авторизованных системах. Доступ к компьютерной системе или сети без авторизации или явного разрешения является незаконным.

HTTP-сервер Kolibri v2.0:

  • Работает на 8080 порте Windows XP SP3 на 10.10.0.20.
  • Kali атакующая машина 10.10.0.22.
  • Эксплуатируйте в HTTP-методе HEAD.

Сбой службы:

Это мой первоначальный скрипт Python, используемый для репликации сбоя:

Управление EIP:

Сколько отметок нам нужно использовать, чтобы достичь EIP? Давайте воспользуемся pattern_create.rb + patern_offset.rb из Metasploit Framework, чтобы узнать:

Поиск обратного адреса:

Поскольку у нас есть контроль над EIP, мы можем вставить любой адрес, соответствующий любой инструкции, которую мы хотим выполнить. Поскольку мы обнаружили, что ESP указывает на часть наших A, JMP ESP отлично подходит для использования в качестве адреса возврата. Эту инструкцию можно найти в .dll, используемых службой. Чтобы проверить это, мы можем использовать mona script внутри Immunity Debugger:

Мало места для работы

После перенаправления нашего потока с помощью «JMP ESP» у нас осталось мало места для работы. Хотя у нас есть только 2 байта (C = \ x43), есть хорошее пространство вверху, где находятся некоторые из наших начальных «A»:

Что мы могли теперь, так это перепрыгнуть на несколько байтов назад, чтобы у нас было больше места для работы. Один простой ассемблерный код для этого - «\ xEB \ x ??», где «\ xEB» соответствует прыжку, а «\ x ??» к количеству байтов, на которое нужно вернуться. Если мы выберем 50 байт для возврата, давайте воспользуемся calc.exe, чтобы помочь нам с этой математикой:

Наш Stage1 сейчас выглядит так:

Stage1 = «A» * 515 + «\ x8B \ x1C \ xA9 \ x71» + «\ xEB \ xCE»

Создание охотника за яйцами:

Теперь, когда у нас есть около 50 байтов для использования, мы можем сгенерировать 32-байтовое Egg Hunter, используя сценарий mona со значением яйца «r4f4»:

Теперь Egg Hunter будет запущен и попытается найти строку «r4f4r4f4» в памяти, чтобы перенаправить туда поток выполнения. Теперь нам нужно создать новую сцену, чтобы разместить наш шелл-код, который будет добавлен сразу после яйца:

Создание окончательного шелл-кода:

Здорово! Все, что мы введем в переменную шелл-кода, будет выполнено. Давайте воспользуемся Metasploit для генерации одной командной оболочки TCP на порту 4444:

msfvenom -a x86 - платформа Windows -p windows / shell_bind_tcp LPORT = 4444 -f python -e x86 / alpha_mixed

Получение оболочки:

И это все! Все, что нам нужно сделать сейчас, это выполнить последний код эксплойта и надеяться на открытие нового порта 4444 на машине жертвы:

Окончательный код эксплойта можно найти здесь на моем Github.

Спасибо Fuzzy Security и Corelan Team за отличный справочник по разработке эксплойтов!