0Pricing
Ethical Hacking Academy · Урок

Память и стек

Как работают переполнения

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

Структура памяти процесса

При запуске программы операционная система выделяет ей структуру памяти с отдельными областями: текстовая область (код), data/BSS (глобальные данные), куча (динамическое выделение) и стек.

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

Что такое стек?

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

В x86 стек растет вниз: помещение данных в стек перемещает указатель стека к меньшим адресам. Это направление важно при возникновении переполнения.

Кадры стека

Каждый вызов функции создает кадр стека. Обычно кадр содержит локальные переменные, сохраненный указатель базы (EBP) и адрес возврата (сохраненный EIP).

Адрес возврата сообщает CPU, с какого места продолжить выполнение после завершения функции. Управление им — основа эксплуатации переполнения стека.

Ключевые регистры

В 32-битной архитектуре x86 важны следующие регистры:

  • ESP: указатель стека, вершина стека.
  • EBP: указатель базы, опорный адрес текущего кадра.
  • EIP: указатель инструкций, адрес следующей инструкции.

Если Вы управляете EIP, Вы управляете потоком выполнения.

Что такое буфер?

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

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

char buffer[64];
strcpy(buffer, user_input); // no bounds check

Переполнение

Переполнение буфера происходит, когда входные данные превышают размер буфера и перезаписывают соседние данные в стеке.

Поскольку сохранённые EBP и адрес возврата находятся сразу за локальными буферами, достаточно большие входные данные могут перезаписать адрес возврата и перехватить управление выполнением.

Опасные функции

Переполнения обычно возникают из-за небезопасных функций C, которые не проверяют длину:

  • strcpy, strcat, sprintf, gets.

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

gets(buffer); // never use: no length limit at all

Что даёт перезапись EIP

Когда уязвимая функция возвращает управление, CPU извлекает (теперь контролируемый атакующим) адрес возврата в EIP и переходит по нему.

Если направить EIP на внедрённый машинный код (шелл-код), CPU выполнит его с привилегиями программы.

Адресация с прямым порядком байтов

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

Неверный порядок байтов — распространённая ошибка новичков, из-за которой эксплойты завершаются неудачно без каких-либо сообщений.

address 0x080414C3 -> bytes \xc3\x14\x04\x08

Современные средства защиты

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

  • DEP/NX: помечает стек как область, из которой нельзя выполнять код.
  • ASLR: рандомизирует адреса в памяти.
  • Защитные значения стека: обнаруживают перезапись до возврата из функции.

В этом курсе рассматривается классический случай (с отключёнными средствами защиты), чтобы Вы освоили основы.

Почему это по-прежнему важно

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

Освоение базового случая также является необходимым условием для изучения продвинутых техник, таких как ROP, обходящих современные меры защиты.

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

Вспомните, каким значением в конечном счёте хочет управлять атакующий.

Повторение

Теперь Вы понимаете основы:

  • Стек хранит локальные данные, сохранённый EBP и адрес возврата и растёт вниз.
  • ESP, EBP, EIP — ключевые регистры x86; управление EIP означает управление выполнением.
  • Небезопасные функции, такие как strcpy и gets, вызывают переполнения.
  • x86 использует прямой порядок байтов; современные средства защиты — DEP, ASLR и защитные значения.

Далее Вы выполните фаззинг программы, чтобы найти смещение сбоя.

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

Урок «Память и стек» бесплатный?

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

Чему я научусь в уроке «Память и стек»?

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

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

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

Сколько времени занимает урок «Память и стек»?

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

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

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

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

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