
Репозиторий для изучения различных техник эксплуатации кучи.
Этот репозиторий предназначен для изучения различных техник эксплуатации кучи.
Мы используем релизы 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 | патч | Hitcon 2016 SleepyHolder |
| unsafe_unlink.c | ▶️ | Эксплуатация free на повреждённом чанке для получения произвольной записи. | latest | HITCON CTF 2014-stkof, Insomni'hack 2017-Wheel of Robots | |
| house_of_spirit.c | ▶️ | Освобождает поддельный чанк fastbin, чтобы malloc вернул почти произвольный указатель. | latest | hack.lu CTF 2014-OREO | |
| poison_null_byte.c | ▶️ | Эксплуатация переполнения одного нулевого байта. | latest | PlaidCTF 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 | патч |