Как подойти к задачам на heap exploitation в CTF если опыт только со stack buffer overflow

Рейтинг: 43.9% · 3 голосов
Capture The Flag, реверс бинарных файлов, разработка эксплойтов, ассемблер, форензика, крэкми и задачи по информационной безопасности.
Ответить
Аватара пользователя
nerd_max
Сообщения: 34
Зарегистрирован: 11 май 2026, 14:33

Как подойти к задачам на heap exploitation в CTF если опыт только со stack buffer overflow

Сообщение nerd_max »

Несколько месяцев занимаюсь pwn-задачами в CTF, освоил классику на стеке: ret2win, ROP-цепочки, ret2libc с утечкой адреса. Теперь пробую задачи на heap — и полный ступор. Смотрю на задачу с malloc/free, открываю Ghidra, вижу структуры chunk'ов, но не понимаю как это превращается в эксплойт. Где правильно начинать: читать исходники glibc ptmalloc2, решать готовые варпы на how2heap, или есть более структурированный путь? Конкретно застрял на задаче с UAF (use-after-free) — понимаю концепцию, но не понимаю как её превратить в запись в произвольный адрес.
👍1 ❤️ 🔥 😄 🤔
✔ Лучший ответ сформирован автоматически — asynclover
@merengue, UAF в запись в произвольный адрес конкретно: free(ptr) -> ptr всё ещё указывает на chunk -> пишешь в ptr->field нужный адрес (это fd в tcache) -> malloc(same_size) -> ещё раз malloc(same_size) -> второй вызов вернёт адрес который ты записал -> теперь у тебя указатель на произвольную память, пиши что хочешь. Классически пишут в `__free_hook` или `__malloc_hook` (в старых glibc до 2.34…
Перейти к ответу →
Аватара пользователя
boblee
Сообщения: 42
Зарегистрирован: 11 май 2026, 11:59

Re: Как подойти к задачам на heap exploitation в CTF если опыт только со stack buffer overflow

Сообщение boblee »

how2heap от shellphish — это буквально обязательная программа, там каждая техника с минимальным кодом и комментариями. Начни с fastbin_dup и tcache_poisoning, они проще всего для понимания. Суть tcache_poisoning: в tcache chunk'ы хранятся в односвязном списке через поле fd в user data. Если есть UAF, пишешь в fd нужный адрес, следующий malloc вернёт этот адрес как «чанк». Дальше пишешь что хотел. Защита в glibc 2.32+ — safe-linking (XOR fd с адресом), но это обходится если есть хотя бы один heap leak.
👍1 ❤️2 🔥 😄 🤔
Аватара пользователя
merengue
Сообщения: 14
Зарегистрирован: 12 май 2026, 08:55

Re: Как подойти к задачам на heap exploitation в CTF если опыт только со stack buffer overflow

Сообщение merengue »

Для понимания структуры heap советую запустить pwndbg (это расширение для GDB) и пользоваться командами `heap`, `bins`, `vis_heap_chunks`. Видишь всё визуально: какие чанки allocated, какие free, в каком tcache/fastbin/unsorted bin они сидят. Без визуализации heap-эксплойты — это угадывание в темноте. `heap` — показывает все чанки. `bins` — содержимое всех списков. `telescope 0xaddress` — дампит память как указатели. Потратил неделю на изучение pwndbg и после этого heap-задачи стали решаться в разы быстрее.
👍1 ❤️ 🔥2 😄 🤔
Аватара пользователя
archenjoyer
Сообщения: 8
Зарегистрирован: 10 май 2026, 23:59

Re: Как подойти к задачам на heap exploitation в CTF если опыт только со stack buffer overflow

Сообщение archenjoyer »

@merengue, По последовательности: сначала house of force (старая техника, glibc < 2.29, но даёт понимание как wilderness chunk работает), потом tcache_poisoning для новых версий, потом unsorted bin attack, потом дойдёте до более сложных house of XXX. На pwn.college есть модуль heap exploitation — очень структурированно, с нарастающей сложностью. Плюс автор объясняет не просто «делай вот так», а почему это работает на уровне кода ptmalloc2.
👍 ❤️ 🔥2 😄 🤔
Аватара пользователя
asynclover
Сообщения: 70
Зарегистрирован: 13 май 2026, 04:35

Re: Как подойти к задачам на heap exploitation в CTF если опыт только со stack buffer overflow

Сообщение asynclover »

✔ Лучший ответ — сформирован автоматически
@merengue, UAF в запись в произвольный адрес конкретно: free(ptr) -> ptr всё ещё указывает на chunk -> пишешь в ptr->field нужный адрес (это fd в tcache) -> malloc(same_size) -> ещё раз malloc(same_size) -> второй вызов вернёт адрес который ты записал -> теперь у тебя указатель на произвольную память, пиши что хочешь. Классически пишут в `__free_hook` или `__malloc_hook` (в старых glibc до 2.34 — они просто существуют и вызываются), в новых версиях хуки убрали, теперь цель обычно `__libc_system` через GOT или exit handlers.
👍1 ❤️ 🔥 😄 🤔
Аватара пользователя
rojo7509
Сообщения: 38
Зарегистрирован: 12 май 2026, 13:19

Re: Как подойти к задачам на heap exploitation в CTF если опыт только со stack buffer overflow

Сообщение rojo7509 »

Добавлю про safe-linking обход: если есть heap leak хотя бы одного адреса, вычисляешь ключ XOR как `key = leaked_heap_addr >> 12`, и перед записью в fd делаешь `fd_value = target_addr ^ key`. Это в glibc 2.32+. На практике heap leak часто даётся через printf на неинициализированный указатель или через чтение из освобождённого unsorted bin chunk, в котором остаётся адрес main_arena (это уже libc leak). Так что обычно цепочка: unsorted bin leak -> libc base -> safe-link key -> tcache poison -> произвольная запись.
👍 ❤️ 🔥2 😄1 🤔
Ответить
Поделиться темой: ✈ Telegram VK

Вернуться в «CTF и реверс-инжиниринг»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость