
Un repositorio para aprender diversas técnicas de explotación del heap.
Este repositorio es para aprender diversas técnicas de explotación del heap.
Usamos las versiones de Libc de Ubuntu como estándar de referencia. Cada técnica está verificada para funcionar en las versiones correspondientes de Ubuntu.
Puedes ejecutar apt source libc6 para descargar el código fuente de la Libc que estás usando en un sistema operativo basado en Debian. También puedes hacer clic en ▶️ para depurar la técnica en tu navegador usando gdb.
Surgió la idea durante una reunión de hacking, y hemos implementado las siguientes técnicas:
| Archivo | ▶️ | Técnica | Versión de Glibc | Parche | Desafíos CTF aplicables |
|---|---|---|---|---|---|
| first_fit.c | Demostración del comportamiento first-fit del malloc de glibc. | ||||
| calc_tcache_idx.c | Demostración del cálculo del índice de tcache de glibc. | ||||
| fastbin_dup.c | ▶️ | Engañar a malloc para que devuelva un puntero del heap ya asignado abusando de la freelist de fastbin. | < 2.43 | parche | |
| fastbin_dup_into_stack.c | ▶️ | Engañar a malloc para que devuelva un puntero casi arbitrario abusando de la freelist de fastbin. | < 2.43 | parche | 9447-search-engine, 0ctf 2017-babyheap |
| fastbin_dup_consolidate.c | ▶️ | Engañar a malloc para que devuelva un puntero del heap ya asignado colocando un puntero tanto en la freelist de fastbin como en el top chunk. | < 2.43 | parche | Hitcon 2016 SleepyHolder |
| unsafe_unlink.c | ▶️ | Explotar free sobre un chunk corrupto para lograr una escritura arbitraria. | latest | HITCON CTF 2014-stkof, Insomni'hack 2017-Wheel of Robots | |
| house_of_spirit.c | ▶️ | Libera un chunk fastbin falso para que malloc devuelva un puntero casi arbitrario. | latest | hack.lu CTF 2014-OREO | |
| poison_null_byte.c | ▶️ | Explotar un desbordamiento de un solo byte nulo. | latest | PlaidCTF 2015-plaiddb, BalsnCTF 2019-PlainNote | |
| house_of_lore.c | ▶️ | Engañar a malloc para que devuelva un puntero casi arbitrario abusando de la freelist de smallbin. | latest | ||
| overlapping_chunks.c | ▶️ | Explotar la sobrescritura del tamaño de un chunk liberado en el unsorted bin para hacer que una nueva asignación se solape con un chunk existente | < 2.29 | patch | hack.lu CTF 2015-bookstore, Nuit du Hack 2016-night-deamonic-heap |
| overlapping_chunks_2.c | ▶️ | Explotar la sobrescritura del tamaño de un chunk en uso para hacer que una nueva asignación se solape con un chunk existente | < 2.29 | patch | |
| mmap_overlapping_chunks.c | Explotar un chunk mmap en uso para hacer que una nueva asignación se solape con un chunk mmap actual | latest | |||
| house_of_force.c | ▶️ | Explotar la cabecera del Top Chunk (Wilderness) para conseguir que malloc devuelva un puntero casi arbitrario | < 2.29 | patch | Boston Key Party 2016-cookbook, BCTF 2016-bcloud |
| unsorted_bin_into_stack.c | ▶️ | Explotar la sobrescritura de un chunk liberado en la freelist del unsorted bin para devolver un puntero casi arbitrario. | < 2.29 | patch |