0Pricing
Ethical Hacking Academy · Урок

Управление EIP

Перезапись адреса возврата

«Управление EIP» — бесплатный урок Ethical Hacking Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Ethical Hacking Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Ethical Hacking Academy содержит 4 уроков всего.

Цель

Теперь у Вас есть смещение, поэтому Вы можете поместить любые четыре байта в EIP. Возникает вопрос: какой адрес следует туда записать?

Вы хотите, чтобы EIP указывал на Ваш шелл-код. Но нельзя просто жёстко задать адрес стека: нужен надёжный переход.

Почему нельзя жёстко задать адрес стека

Адрес стека, по которому находится Ваш шелл-код, может меняться между запусками и в разных системах. Даже небольшие изменения окружения сдвигают его.

Вместо этого используется стабильная инструкция, уже находящаяся в памяти, которая перенаправляет выполнение туда, куда в данный момент указывает ESP.

Приём с JMP ESP

Если в момент сбоя ESP указывает на Ваш шелл-код, можно установить в EIP адрес инструкции JMP ESP. Когда EIP загрузит этот адрес, CPU выполнит jmp esp и перейдёт к Вашему шелл-коду.

Такое косвенное перенаправление делает эксплойт надёжным независимо от точного адреса стека.

jmp esp   ; opcode FF E4

Поиск JMP ESP

Ищите в загруженных модулях (желательно без ASLR) байты опкода FF E4. Базовый адрес модуля остаётся постоянным, поэтому этот гаджет надёжен.

Такие инструменты, как mona.py, автоматически находят подходящие инструкции.

!mona jmp -r esp -cpb "\x00"

Исключение недопустимых символов

Некоторые значения байтов повреждают входные данные до того, как они целиком попадут в буфер. Классический пример — нулевой байт 0x00, завершающий строки C. К другим относятся 0x0a (перевод строки) и 0x0d (возврат каретки).

Адрес JMP ESP не должен содержать ни одного из этих недопустимых символов.

Определение недопустимых символов

Чтобы определить, какие байты являются недопустимыми, отправьте в буфер все значения байтов от 0x00 до 0xff и изучите память в отладчике. Повреждённые или отсутствующие байты являются недопустимыми символами.

Их нужно исключить и из адреса возврата, и из шелл-кода.

!mona bytearray -cpb "\x00"

Формирование перезаписи EIP

Теперь сформируйте входные данные: сначала заполнение до смещения, затем адрес JMP ESP в порядке от младшего байта к старшему.

Если JMP ESP находится по адресу 0x625011AF, записываемые байты идут в обратном порядке.

buf = "A"*offset + "\xaf\x11\x50\x62"  # 0x625011AF, little-endian

Проверка перехода

Установите точку останова на адресе JMP ESP в отладчике и запустите эксплойт. Когда EIP достигнет этого адреса и перейдёт к ESP, Вы подтвердите надёжность перенаправления.

На этом этапе EIP указывает туда, где будет размещён Ваш шелл-код.

Освобождение места для шелл-кода

После адреса возврата оставшаяся часть буфера (куда указывает ESP) содержит Ваш шелл-код. Если места мало, может потребоваться короткий переход или перемещение данных.

Цепочка NOP (последовательность байтов без операции 0x90) перед шелл-кодом допускает неточность, поэтому переход может попасть в любую её часть.

buf = "A"*offset + ret + "\x90"*16 + shellcode

Сборка эксплойта

Теперь полная структура эксплойта выглядит так:

  • Заполнение до смещения.
  • Адрес JMP ESP (без недопустимых символов, в порядке от младшего байта к старшему).
  • Цепочка NOP.
  • Шелл-код.

Остался один шаг до командной оболочки.

Альтернативы JMP ESP

JMP ESP — классический способ перенаправления, но не единственный. Если на Ваш буфер указывает другой регистр, можно использовать гаджет jmp eax, call esp или push esp; ret.

Принцип тот же: найдите стабильную инструкцию, которая передаст управление туда, где находится Ваш шелл-код.

Быстрая проверка

Вспомните, почему JMP ESP предпочтительнее жёстко заданного адреса стека.

Повторение

Теперь Вы управляете ходом выполнения:

  • Перезаписывайте EIP адресом гаджета JMP ESP, а не ненадёжным адресом стека.
  • Находите гаджет в модуле без ASLR, избегая недопустимых символов, таких как 0x00.
  • Записывайте адрес в порядке от младшего байта к старшему и добавляйте цепочку NOP перед шелл-кодом.

Далее Вы сгенерируете шелл-код и запустите командную оболочку.

Часто задаваемые вопросы

Урок «Управление EIP» бесплатный?

Да — полный текст урока «Управление EIP» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Ethical Hacking Academy, подпишись на CoddyKit PRO. Курс Ethical Hacking Academy содержит 4 уроков всего.

Чему я научусь в уроке «Управление EIP»?

Перезапись адреса возврата Ты практикуешь Ethical Hacking Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Ethical Hacking Academy?

Предыдущий опыт не требуется. Ethical Hacking Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Управление EIP»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Ethical Hacking Academy?

Да. Каждый урок Ethical Hacking Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Память и стек
  2. Фаззинг для поиска сбоев
  3. Управление EIP
  4. Шелл-код и эксплуатация
← Назад к Ethical Hacking Academy