0Pricing
Ethical Hacking Academy · Урок

Фаззинг для поиска сбоев

Поиск смещения

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

Что такое фаззинг

Фаззинг — это отправка программе искажённых или слишком больших входных данных для вызова неожиданного поведения, особенно сбоев. Сбой часто указывает на ошибку, связанную с повреждением памяти.

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

Порядок действий

Классический порядок эксплуатации таков:

  • Выполнить фаззинг, чтобы вызвать сбой программы.
  • Найти точное смещение до адреса возврата.
  • Получить управление EIP.
  • Перенаправить выполнение на шелл-код.

В этом уроке рассматриваются первые два шага.

Подключение отладчика

Чтобы наблюдать сбои, подключите отладчик (например, Immunity Debugger или x64dbg в Windows либо GDB в Linux) к целевой программе.

Когда программа завершается сбоем, отладчик показывает состояние регистров, особенно EIP, что позволяет определить, перезаписали ли Вы адрес возврата.

Отправка увеличивающихся входных данных

Простой фаззер отправляет строки всё большей длины, пока программа не завершится сбоем. Обычно начинают с отправки множества символов «A» (0x41).

Если после сбоя EIP содержит 41414141, Вы подтвердили возможность управления адресом возврата.

python -c 'print("A"*2000)' | ./vuln

Подтверждение сбоя

Когда приложение завершается сбоем и EIP равен 41414141, переполнение достигло сохранённого адреса возврата.

Однако Вы ещё не знаете, сколько именно байтов находится перед EIP. Отправка одинакового байта показывает, что EIP можно контролировать, но не показывает его положение.

Поиск смещения: циклические шаблоны

Чтобы найти точное смещение, отправьте уникальный неповторяющийся шаблон вместо одних только «A». Каждое 4-байтовое окно отличается от остальных, поэтому значение, попавшее в EIP, определяет смещение.

Metasploit поставляется с инструментом pattern_create.rb для этой цели.

msf-pattern_create -l 2000

Считывание смещения

После сбоя с шаблоном запишите значение в EIP. Передайте его инструменту pattern_offset.rb, и он вернёт точное число байтов перед EIP.

Это смещение равно размеру заполнения перед байтами адреса возврата.

msf-pattern_offset -l 2000 -q 39654138

Проверка смещения

Всегда выполняйте проверку. Сформируйте входные данные из offset байтов «A», за которыми следуют четыре байта «B» (0x42). Если EIP станет равен 42424242, смещение определено точно.

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

"A"*offset + "B"*4   # EIP should become 42424242

Определение ESP

Получив управление EIP, также запишите, куда указывает ESP в момент сбоя. Обычно ESP указывает сразу за перезаписанным адресом возврата — в оставшуюся часть Вашего буфера.

Именно там Вы позже разместите шелл-код.

Повторение: инструменты

К полезным инструментам для фаззинга и работы с шаблонами относятся:

  • Spike и boofuzz: фаззеры сетевых протоколов.
  • pattern_create / pattern_offset: поиск смещения EIP.
  • mona.py в Immunity: автоматизация работы с шаблонами, смещением и недопустимыми символами.
!mona pattern_create 2000

Воспроизводимость важна

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

Непредсказуемые сбои часто означают, что ошибка не является обычным переполнением стека или что некоторое условие (время, длина, содержимое) меняется между запусками.

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

Вспомните, почему циклический шаблон лучше строки из одинаковых байтов.

Повторение

Теперь Вы знаете, как найти смещение сбоя:

  • Выполните фаззинг с увеличивающимися входными данными, чтобы вызвать сбой; подтвердите его появлением 41414141 в EIP.
  • Используйте циклический шаблон с pattern_create / pattern_offset, чтобы найти точное смещение.
  • Проверьте результат с помощью заполнения и четырёх байтов «B» (42424242).
  • Запишите, куда указывает ESP, чтобы позже разместить шелл-код.

Далее Вы полностью получите управление EIP и перенаправите выполнение.

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

Урок «Фаззинг для поиска сбоев» бесплатный?

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

Чему я научусь в уроке «Фаззинг для поиска сбоев»?

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

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

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

Сколько времени занимает урок «Фаззинг для поиска сбоев»?

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

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

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

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

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