Pwn / бинарные уязвимости

От переполнений стека до heap-магии и ROP-цепочек: как получить контроль над потоком исполнения и «утащить» флаг.
Информацию собрал: Владимир Щеголев

Stack/Heap ROP / ret2libc Format strings UAF / Double free pwntools / gdb AFL / honggfuzz

Что такое PWN и как он связан с бинарными уязвимостями

PWN (от «own/pwn») — полный контроль над программой/системой через эксплуатацию уязвимостей.

Бинарные уязвимости — ошибки на уровне машинных инструкций: небезопасная работа с памятью, указателями, числами и форматами. Позволяют буквально подменять поток выполнения.

Пример: разработчик на C не проверил размер буфера → длинная строка переписывает адрес возврата → выполняется чужой код.

Роль PWN в CTF и в безопасности

  • Найти уязвимость в бинаре (реверсинг + тесты).
  • Спланировать атаку (ROP, ret2libc, heap-trюки).
  • Написать эксплойт.
  • Добыть флаг (часто cat flag.txt).

В практике ИБ знание PWN критично: помогает писать защищённый код и находить реальные баги.

Категории уязвимостей и приёмы эксплуатации

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

  • Stack Buffer Overflow (CWE-121): запись за границы стека → перезапись адреса возврата.
  • Heap Overflow (CWE-122): порча структур динамической памяти.
  • Bypass Canary: обход защиты стека.
  • ret2libc: вызов функций libc (напр., system("/bin/sh")).
  • ROP: цепочки гаджетов для произвольных действий.

Ошибки управления памятью

  • Use-After-Free (CWE-416): доступ к освобождённому объекту.
  • Double Free (CWE-415): повторное освобождение.
  • House of Spirit / Unsafe Unlink: атаки на аллокатор.

Форматные строки

  • CWE-134: неконтролируемый ввод в printf → утечки/запись через %n.

Целочисленные ошибки

  • Overflow/Underflow (CWE-190/191): неверные размеры/арифметика.

Другие

  • Memory Leak: утечки данных/ресурсов.
  • Race Conditions (CWE-362): гонки доступа.
  • Function Pointer Exploitation: подмена указателей на функции.

CVE и CWE

  • CVE (Common Vulnerabilities and Exposures) — реестр уязвимостей с ID (пример: Heartbleed — утечка памяти в OpenSSL).
  • CWE (Common Weakness Enumeration) — классификация типов ошибок (например, CWE-121 — stack overflow).

В Pwn-тасках часто моделируют уязвимости «по мотивам» известных CVE.

Инструменты для PWN

IDA Pro / Ghidra / Radare2 / Binary Ninja

Дизассемблеры/декомпиляторы для статического анализа.

checksec (pwntools)

Проверка защит: NX, PIE, RELRO и др.

gdb + pwndbg/gef/peda

Отладка, визуализация стек/heap, удобные макросы.

strace / ltrace

Системные и библиотечные вызовы.

qemu-user

Запуск бинарей под другие архитектуры.

pwntools

Python-фреймворк для написания эксплойтов.

ROPgadget / Ropper

Поиск гаджетов для ROP-цепочек.

angr

Символическое исполнение, анализ путей.

Metasploit

Эксплуатация реальных сервисов (за пределами CTF-бинарей).

Фаззинг

Фаззинг — автоматическая генерация входных данных для поиска крашей/багов. В PWN помогает ловить нестабильное поведение бинарей.

AFL

Coverage-guided лидер в CTF и практике.

Honggfuzz

Альтернатива AFL, умеет HW-счётчики.

libFuzzer

Встроен в LLVM/Clang, юнит-фаззинг.

Radamsa

Быстрые мутации входов.

boofuzz

Фаззинг протоколов/сетевых сервисов.

syzkaller

Kernel-фаззинг для Linux.