Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
how2heap — Репозиторий для изучения различных техник эксплуатации кучи. | Kitploit
Инструменты/GitHubGitHub/shellphish/how2heap
ЭксплуатацияCTFОбучение и ОбразованиеПодобранные РесурсыЭксплуатация Бинарных ФайловЛаборатории и Практика
GitHubshellphish/how2heap

how2heap

Репозиторий для изучения различных техник эксплуатации кучи.

Репозиторий
8.8k1.3k3 месяцев назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Обучение эксплуатации кучи

Этот репозиторий предназначен для изучения различных техник эксплуатации кучи. Мы используем релизы Libc от Ubuntu как эталон. Каждая техника проверена на соответствующих релизах Ubuntu. Вы можете выполнить apt source libc6, чтобы загрузить исходный код используемой вами Libc в операционной системе на базе Debian. Также можно нажать ▶️, чтобы отладить технику в браузере с помощью gdb.

Идея возникла у нас на хакерской встрече, и мы реализовали следующие техники:

Файл▶️ТехникаВерсия GlibcПатчПрименимые CTF-задания
first_fit.cДемонстрация поведения first-fit в glibc malloc.
calc_tcache_idx.cДемонстрация вычисления индекса tcache в glibc.
fastbin_dup.c▶️Заставляем malloc вернуть уже выделенный указатель на кучу, злоупотребляя списком свободных блоков fastbin.< 2.43патч
fastbin_dup_into_stack.c▶️Заставляем malloc вернуть почти произвольный указатель, злоупотребляя списком свободных блоков fastbin.< 2.43патч9447-search-engine, 0ctf 2017-babyheap
fastbin_dup_consolidate.c▶️Заставляем malloc вернуть уже выделенный указатель на кучу, помещая указатель одновременно в список свободных блоков fastbin и в top chunk.< 2.43

GnuLibc постоянно развивается, и некоторые из описанных выше техник привели к появлению проверок согласованности в логике malloc/free. В результате эти проверки регулярно ломают некоторые техники и требуют корректировок для их обхода (если это возможно). Мы решаем эту проблему, сохраняя несколько версий одной и той же техники для каждого релиза Glibc, в котором потребовалась корректировка. Структура: glibc_<version>/technique.c.

Есть хороший пример? Добавьте его сюда! Старайтесь размещать всю технику в одном .c-файле -- так учиться гораздо проще.

Начало работы

Быстрая настройка

  • убедитесь, что у вас установлены следующие пакеты/инструменты: patchelf zstd wget (разумеется, также build-essential или аналогичные для компиляторов, make, ...)
  • также /usr/bin/python должен быть вашим python-бинарником или указывать на него (например, /usr/bin/python3)```shell git clone https://github.com/shellphish/how2heap cd how2heap make clean base ./malloc_playground
root@kitploit:~
Обратите внимание, что это свяжет бинарные файлы с вашей системной libc. Если вы хотите поэкспериментировать с другими версиями libc, обратитесь к разделу `Complete Setup`.

## Complete Setup

Вы столкнётесь с проблемами версионирования символов (см. [эту ссылку](https://github.com/shellphish/how2heap/issues/169)), если попытаетесь подгрузить через `LD_PRELOAD` библиотеки libc к бинарному файлу, скомпилированному на вашей хост-машине.
У нас есть два способа обойти эту проблему.

### Метод 1: связывание со старой версией libc
Этот способ указывает линкеру связать целевой бинарный файл с целевой libc.```shell
git clone https://github.com/shellphish/how2heap
cd how2heap
H2H_USE_SYSTEM_LIBC=N make v2.23

Это свяжет все бинарники с соответствующими libc. Что ещё лучше — в них будут отладочные символы. Теперь вы можете экспериментировать с любыми версиями libc на своей хост-машине. В этом примере будут скомпилированы все бинарники glibc-2.23 и связаны с libc-2.23. Вы можете изменить число, чтобы поиграть с другими версиями libc.

Метод 2: используйте docker

Здесь используется подход на основе Docker для компиляции бинарников внутри старого контейнера ubuntu, чтобы они были совместимы с целевой версией libc.```shell git clone https://github.com/shellphish/how2heap cd how2heap

the next command will prepare the target binary so it runs with

the expected libc version

make base ./glibc_run.sh 2.30 ./malloc_playground -d -p

now you can play with the binary with glibc-2.30

and even debug it with the correct symbols

readelf -d -W malloc_playground | grep RUNPATH # or use checksec readelf -l -W malloc_playground | grep interpreter gdb -q -ex "start" ./malloc_playground

root@kitploit:~
# Инструменты для эксплуатации кучи

Существует несколько инструментов для эксплуатации кучи, разбросанных по сети.

## Malloc Playground

Приведённый файл `malloc_playground.c` — это исходный код программы, которая интерактивно запрашивает у пользователя команды для выделения и освобождения памяти.

## Pwngdb

Исследуйте кучу glibc в gdb: https://github.com/scwuaptx/Pwngdb

## pwndbg

Ориентированный на эксплуатацию плагин для gdb, предоставляющий возможность просматривать и изменять кучу glibc: https://github.com/pwndbg/pwndbg

## gef

Ещё один отличный плагин для gdb, позволяющий исследовать кучу glibc: https://github.com/hugsy/gef

## heap-viewer

Исследуйте кучу glibc в IDA Pro: https://github.com/danigargu/heap-viewer

## heaptrace

Помогает визуализировать операции с кучей, заменяя адреса символами: https://github.com/Arinerron/heaptrace

# Другие ресурсы

Некоторые хорошие ресурсы по эксплуатации кучи, примерно в обратном порядке их публикации:

## Полезные обучающие материалы по эксплуатации кучи
- Обзор техник эксплуатации кучи GLIBC (https://0x434b.dev/overview-of-glibc-heap-exploitation-techniques/) <!-- 2022 -->
- Углублённое руководство по glibc (https://heap-exploitation.dhavalkapil.com/) — книга и примеры эксплойтов <!-- 2022 -->
- Техники эксплуатации кучи, работающие на glibc-2.31 (https://github.com/StarCross-Tech/heap_exploit_2.31) <!-- 2020 -->
- Безболезненное введение в пользовательскую кучу Linux (userland heap) (https://sensepost.com/blog/2017/painless-intro-to-the-linux-userland-heap/) <!-- 2017 -->
- ptmalloc fanzine — набор ресурсов и примеров, связанных с атаками на метаданные ptmalloc (http://tukan.farm/2016/07/26/ptmalloc-fanzine/) <!-- 2016 -->
- Glibc Adventures: The Forgotten Chunk (https://github.com/bash-c/slides/blob/master/pwn_heap/Glibc%20Adventures:%20The%20forgotten%20chunks.pdf) — продвинутая эксплуатация кучи <!-- 2015 -->

## Историческая эксплуатация кучи (История)
- Pseudomonarchia jemallocum (http://www.phrack.org/issues/68/10.html) <!-- 2012 -->
- The House Of Lore: Reloaded (http://phrack.org/issues/67/8.html) <!-- 2010 -->
- Malloc Des-Maleficarum (http://phrack.org/issues/66/10.html) — некоторые техники эксплуатации malloc <!-- 2009 -->
- Ещё одна техника эксплуатации free() (http://phrack.org/issues/66/6.html) <!-- 2009 -->
- Использование set_head для обхода wilderness (http://phrack.org/issues/64/9.html) <!-- 2007 -->
- Понимание кучи через её взлом (https://www.blackhat.com/presentations/bh-usa-07/Ferguson/Whitepaper/bh-usa-07-ferguson-WP.pdf) — объясняет реализацию кучи и пару эксплойтов <!-- 2007 -->
- Техники эксплуатации кучи в OS X (http://phrack.org/issues/63/5.html) <!-- 2005 -->
- The Malloc Maleficarum (http://seclists.org/bugtraq/2005/Oct/118) <!-- 2005 -->
- Эксплуатация The Wilderness (http://seclists.org/vuln-dev/2004/Feb/25) <!-- 2004 -->
- Продвинутые эксплойты malloc от Doug lea (http://phrack.org/issues/61/6.html) <!-- 2003 -->

# Усиление защиты
В glibc встроено несколько мер «усиления защиты» (hardening), например `export MALLOC_CHECK_=1` (включает некоторые проверки), `export MALLOC_PERTURB_=1` (данные перезаписываются), `export MALLOC_MMAP_THRESHOLD_=1` (всегда использовать mmap()), ...

Дополнительная информация: [mcheck()](http://www.gnu.org/software/libc/manual/html_node/Heap-Consistency-Checking.html), [mallopt()](http://www.gnu.org/software/libc/manual/html_node/Malloc-Tunable-Parameters.html).

Также существует поддержка трассировки, например [mtrace()](http://manpages.ubuntu.com/mtrace), [malloc_stats()](http://manpages.ubuntu.com/malloc_stats), [malloc_info()](http://manpages.ubuntu.com/malloc_info), [memusage](http://manpages.ubuntu.com/memusage), а также в других функциях этого семейства.
Скачать инструмент
патч
Hitcon 2016 SleepyHolder
unsafe_unlink.c▶️Эксплуатация free на повреждённом чанке для получения произвольной записи.latestHITCON CTF 2014-stkof, Insomni'hack 2017-Wheel of Robots
house_of_spirit.c▶️Освобождает поддельный чанк fastbin, чтобы malloc вернул почти произвольный указатель.latesthack.lu CTF 2014-OREO
poison_null_byte.c▶️Эксплуатация переполнения одного нулевого байта.latestPlaidCTF 2015-plaiddb, BalsnCTF 2019-PlainNote
house_of_lore.c▶️Заставляем malloc вернуть почти произвольный указатель, злоупотребляя списком свободных блоков smallbin.latest
overlapping_chunks.c▶️Эксплуатация перезаписи размера освобождённого чанка в unsorted bin, чтобы новое выделение перекрывалось с существующим чанком.< 2.29патчhack.lu CTF 2015-bookstore, Nuit du Hack 2016-night-deamonic-heap
overlapping_chunks_2.c▶️Эксплуатация перезаписи размера используемого чанка, чтобы новое выделение перекрывалось с существующим чанком.< 2.29патч
mmap_overlapping_chunks.cЭксплуатация используемого mmap-чанка, чтобы новое выделение перекрывалось с текущим mmap-чанком.latest
house_of_force.c▶️Эксплуатация заголовка верхнего чанка (Wilderness), чтобы заставить malloc вернуть почти произвольный указатель.< 2.29патчBoston Key Party 2016-cookbook, BCTF 2016-bcloud
unsorted_bin_into_stack.c▶️Эксплуатация перезаписи освобождённого чанка в списке свободных блоков unsorted bin для получения почти произвольного указателя.< 2.29патч
unsorted_bin_attack.c▶️Эксплуатация перезаписи освобождённого чанка в списке свободных блоков unsorted bin для записи большого значения по произвольному адресу.< 2.29патч0ctf 2016-zerostorage
large_bin_attack.c▶️Эксплуатация перезаписи освобождённого чанка в списке свободных блоков large bin для записи большого значения по произвольному адресу.< 2.42патч0ctf 2018-heapstorm2
house_of_einherjar.c▶️Эксплуатация переполнения одного нулевого байта, чтобы обмануть malloc и заставить его вернуть контролируемый указатель.latestSeccon 2016-tinypad
house_of_water.cЭксплуатация UAF или double free для получения контроля над метаданными t-cache без утечек и безутечечного способа поместить libc в t-cache.latest37c3 Potluck - Tamagoyaki
sysmalloc_int_free.cДемонстрация освобождения почти произвольного по размеру верхнего чанка (Wilderness) с помощью malloc (sysmalloc _int_free()).latest
house_of_orange.c▶️Эксплуатация верхнего чанка (Wilderness) для получения произвольного выполнения кода.< 2.26патчHitcon 2016 houseoforange
house_of_tangerine.cЭксплуатация верхнего чанка (Wilderness), чтобы обмануть malloc и заставить его вернуть полностью произвольный указатель, злоупотребляя списком свободных блоков tcache.>= 2.26PicoCTF 2024- high frequency troubles
house_of_roman.c▶️Безутечечная техника для получения удалённого выполнения кода с помощью поддельных fastbin, атаки unsorted_bin и относительных перезаписей.< 2.29патч
tcache_poisoning.c▶️Заставляем malloc вернуть полностью произвольный указатель, злоупотребляя списком свободных блоков tcache. (требуется утечка кучи на версиях 2.32 и новее)> 2.25патч
tcache_house_of_spirit.c▶️Освобождает поддельный чанк, чтобы malloc вернул почти произвольный указатель.> 2.25
house_of_botcake.c▶️Обход ограничения double free в tcache. Вернём tcache_dup былую славу.> 2.25
tcache_stashing_unlink_attack.c▶️Эксплуатация перезаписи освобождённого чанка в списке свободных блоков small bin, чтобы обмануть malloc и заставить его вернуть произвольный указатель, а также записать большое значение по произвольному адресу с помощью calloc.> 2.25Hitcon 2019 one punch man
fastbin_reverse_into_tcache.c▶️Эксплуатация перезаписи освобождённого чанка в fastbin для записи большого значения по произвольному адресу.2.26 - 2.42патч
house_of_mind_fastbin.c▶️Эксплуатация перезаписи одного байта с обработкой арены для записи большого значения (указателя на кучу) по произвольному адресу.< 2.43патч
house_of_storm.c▶️Эксплуатация use-after-free на чанках large и unsorted bin, чтобы заставить malloc вернуть произвольный чанк.< 2.29
house_of_gods.c▶️Техника перехвата арены потока за 8 выделений.< 2.27
decrypt_safe_linking.c▶️Расшифровка отравленного значения в связном списке для восстановления фактического указателя.>= 2.32
safe_link_double_protect.cБезутечечный обход PROTECT_PTR путём двойной защиты указателя, что позволяет связывать произвольные указатели в t-cache.>= 2.3237c3 Potluck - Tamagoyaki
tcache_dup.c(устарело)Заставляем malloc вернуть уже выделенный указатель на кучу, злоупотребляя списком свободных блоков tcache.2.26 - 2.28патч
tcache_metadata_poisoning.cОбманываем tcache, заставляя его выдавать произвольные указатели, путём манипуляции структурой метаданных tcache.>= 2.26
house_of_io.cЗаставляем malloc вернуть указатель на произвольную память, манипулируя структурой управления tcache через UAF в освобождённом tcache-чанке.2.31 - 2.33
tcache_relative_write.cЗапись произвольного десятичного значения и указателя на чанк в куче путём выхода за границы при записи метаданных tcache.2.30-2.41патч
tcache_metadata_hijackingПроизвольное выделение путём переполнения метаданных tcache.>= 2.42