Pwn / бинарные уязвимости
От переполнений стека до heap-магии и ROP-цепочек: как получить контроль над потоком исполнения и «утащить» флаг.
Информацию собрал: Владимир Щеголев
Что такое 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
Инструменты для 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.