
Репозиторий для изучения различных техник эксплуатации кучи.
Этот репозиторий предназначен для изучения различных техник эксплуатации кучи.
В качестве эталона мы используем релизы 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 | patch | |
| fastbin_dup_into_stack.c | ▶️ | Обман malloc с целью возврата почти произвольного указателя путём злоупотребления списком свободных блоков fastbin. | < 2.43 | patch | 9447-search-engine, 0ctf 2017-babyheap |
| fastbin_dup_consolidate.c | ▶️ | Обман malloc с целью возврата уже выделенного указателя кучи путём помещения указателя одновременно в список свободных блоков fastbin и в top chunk. | < 2.43 | patch | 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 | patch | hack.lu CTF 2015-bookstore, Nuit du Hack 2016-night-deamonic-heap |
| overlapping_chunks_2.c | ▶️ | Эксплуатация перезаписи размера используемого чанка, чтобы новое выделение перекрыло существующий чанк | < 2.29 | patch | |
| mmap_overlapping_chunks.c | Эксплуатация используемого mmap-чанка, чтобы новое выделение перекрыло текущий mmap-чанк | latest | |||
| house_of_force.c | ▶️ | Эксплуатация заголовка Top Chunk (Wilderness), чтобы заставить malloc вернуть почти произвольный указатель | < 2.29 | patch | Boston Key Party 2016-cookbook, BCTF 2016-bcloud |
| unsorted_bin_into_stack.c | ▶️ | Эксплуатация перезаписи освобождённого чанка в freelist unsorted bin для возврата почти произвольного указателя. | < 2.29 | patch |