Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
how2heap — Un repositorio para aprender diversas técnicas de explotación del heap. | Kitploit
Herramientas/GitHubGitHub/shellphish/how2heap
ExplotaciónCTFAprendizaje y EducaciónRecursos CuradosExplotación de BinariosLabs y Práctica
GitHubshellphish/how2heap

how2heap

Un repositorio para aprender diversas técnicas de explotación del heap.

Ver Repositorio
8.8k1.3khace 3 mesesRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Explotación Educativa del Heap

Este repositorio es para aprender diversas técnicas de explotación del heap. Usamos los lanzamientos de Libc de Ubuntu como el estándar de oro. Cada técnica está verificada para funcionar en las correspondientes versiones 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.

Se nos ocurrió la idea durante una reunión de hackers, y hemos implementado las siguientes técnicas:

Archivo▶️TécnicaVersión de GlibcParcheDesafíos CTF aplicables
first_fit.cDemostración del comportamiento first-fit de malloc de glibc.
calc_tcache_idx.cDemostración del cálculo del índice de tcache de glibc.
fastbin_dup.c▶️Engañar a malloc para que devuelva un puntero de heap ya asignado abusando de la lista libre de fastbin.< 2.43parche
fastbin_dup_into_stack.c▶️Engañar a malloc para que devuelva un puntero casi arbitrario abusando de la lista libre de fastbin.< 2.43parche9447-search-engine, 0ctf 2017-babyheap
fastbin_dup_consolidate.c▶️Engañar a malloc para que devuelva un puntero de heap ya asignado colocando un puntero tanto en la lista libre de fastbin como en el top chunk.< 2.43

GnuLibc está en constante desarrollo y varias de las técnicas anteriores han dado lugar a comprobaciones de consistencia introducidas en la lógica de malloc/free. En consecuencia, estas comprobaciones rompen regularmente algunas de las técnicas y requieren ajustes para evitarlas (si es posible). Abordamos este problema manteniendo múltiples versiones de la misma técnica para cada lanzamiento de Glibc que requirió un ajuste. La estructura es glibc_<version>/technique.c.

¿Tienes un buen ejemplo? ¡Añádelo aquí! Intenta incluir toda la técnica en un único .c -- es mucho más fácil de aprender así.

Para Empezar

Configuración Rápida

  • asegúrate de tener instalados los siguientes paquetes/herramientas: patchelf zstd wget (por supuesto también build-essential o similar para compiladores, make, ...)
  • además, /usr/bin/python debe ser/apuntar a tu binario de python (p. ej. /usr/bin/python3)```shell git clone https://github.com/shellphish/how2heap cd how2heap make clean base ./malloc_playground
root@kitploit:~
Ten en cuenta que esto enlazará los binarios con tu libc del sistema. Si quieres experimentar con otras versiones de libc. Consulta `Complete Setup`.

## Complete Setup

Encontrarás problemas de versionado de símbolos (consulta [esto](https://github.com/shellphish/how2heap/issues/169)) si intentas hacer `LD_PRELOAD` de libcs a un binario compilado en tu máquina anfitriona.
Tenemos dos formas de evitarlo.

### Método 1: enlazar contra una libc más antigua
Este le dice al enlazador que enlace el binario objetivo con la libc objetivo.```shell
git clone https://github.com/shellphish/how2heap
cd how2heap
H2H_USE_SYSTEM_LIBC=N make v2.23

Esto enlazará todos los binarios con las libcs correspondientes. Lo mejor es que viene con símbolos de depuración. Ahora puedes jugar con cualquier versión de libc en tu máquina host. En este ejemplo, compilará todos los binarios de glibc-2.23 y los enlazará con libc-2.23. Puedes cambiar el número para jugar con otras versiones de libc.

Método 2: usar docker

Esto utiliza un enfoque basado en Docker para compilar binarios dentro de un contenedor ubuntu antiguo, de modo que sea ejecutable con la versión de libc objetivo.```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:~
# Herramientas de explotación del heap

Hay algunas herramientas de explotación del heap disponibles.

## Malloc Playground

El archivo `malloc_playground.c` proporcionado es el código fuente de un programa que solicita al usuario comandos para asignar y liberar memoria de forma interactiva.

## Pwngdb

Examina el heap de glibc en gdb: https://github.com/scwuaptx/Pwngdb

## pwndbg

Un plugin de gdb centrado en explotación que permite ver/alterar el heap de glibc: https://github.com/pwndbg/pwndbg

## gef

Otro excelente plugin de gdb que permite examinar el heap de glibc: https://github.com/hugsy/gef

## heap-viewer

Examina el heap de glibc en IDA Pro: https://github.com/danigargu/heap-viewer

## heaptrace

Te ayuda a visualizar las operaciones del heap reemplazando las direcciones con símbolos: https://github.com/Arinerron/heaptrace

# Otros recursos

Algunos buenos recursos sobre explotación del heap, aproximadamente en orden inverso a su publicación, son:

## Tutoriales útiles de explotación del heap
- Descripción general de las técnicas de explotación del heap de GLIBC (https://0x434b.dev/overview-of-glibc-heap-exploitation-techniques/) <!-- 2022 -->
- Tutorial en profundidad de glibc (https://heap-exploitation.dhavalkapil.com/) - libro y ejemplos de exploits <!-- 2022 -->
- Técnicas de explotación del heap que funcionan en glibc-2.31 (https://github.com/StarCross-Tech/heap_exploit_2.31) <!-- 2020 -->
- Introducción sencilla al heap del espacio de usuario de Linux (https://sensepost.com/blog/2017/painless-intro-to-the-linux-userland-heap/) <!-- 2017 -->
- ptmalloc fanzine, un conjunto de recursos y ejemplos relacionados con ataques a metadatos en ptmalloc (http://tukan.farm/2016/07/26/ptmalloc-fanzine/) <!-- 2016 -->
- Aventuras con glibc: el chunk olvidado (https://github.com/bash-c/slides/blob/master/pwn_heap/Glibc%20Adventures:%20The%20forgotten%20chunks.pdf) - explotación avanzada del heap <!-- 2015 -->

## Explotación histórica del heap (La historia)
- 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) - algunas técnicas de explotación de malloc <!-- 2009 -->
- Otra técnica más de explotación de free() (http://phrack.org/issues/66/6.html) <!-- 2009 -->
- El uso de set_head para derrotar a la wilderness (http://phrack.org/issues/64/9.html) <!-- 2007 -->
- Entender el heap rompiéndolo (https://www.blackhat.com/presentations/bh-usa-07/Ferguson/Whitepaper/bh-usa-07-ferguson-WP.pdf) - explica la implementación del heap y un par de exploits <!-- 2007 -->
- Técnicas de explotación del heap en OS X (http://phrack.org/issues/63/5.html) <!-- 2005 -->
- The Malloc Maleficarum (http://seclists.org/bugtraq/2005/Oct/118) <!-- 2005 -->
- Explotando la wilderness (http://seclists.org/vuln-dev/2004/Feb/25) <!-- 2004 -->
- Exploits avanzados de malloc de Doug Lea (http://phrack.org/issues/61/6.html) <!-- 2003 -->

# Endurecimiento

Hay un par de medidas de "endurecimiento" integradas en glibc, como `export MALLOC_CHECK_=1` (habilita algunas comprobaciones), `export MALLOC_PERTURB_=1` (los datos se sobrescriben), `export MALLOC_MMAP_THRESHOLD_=1` (siempre se usa mmap()), ...

Más información: [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).

También hay soporte de trazado como [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), y en otras funciones de esta familia.
Descargar herramienta
parche
Hitcon 2016 SleepyHolder
unsafe_unlink.c▶️Explotar free sobre un chunk corrupto para obtener escritura arbitraria.latestHITCON CTF 2014-stkof, Insomni'hack 2017-Wheel of Robots
house_of_spirit.c▶️Libera un chunk fastbin falso para lograr que malloc devuelva un puntero casi arbitrario.latesthack.lu CTF 2014-OREO
poison_null_byte.c▶️Explotar un desbordamiento de un solo byte nulo.latestPlaidCTF 2015-plaiddb, BalsnCTF 2019-PlainNote
house_of_lore.c▶️Engañar a malloc para que devuelva un puntero casi arbitrario abusando de la lista libre de smallbin.latest
overlapping_chunks.c▶️Explotar la sobrescritura del tamaño de un chunk liberado en el unsorted bin para conseguir que una nueva asignación se solape con un chunk existente< 2.29parchehack.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 conseguir que una nueva asignación se solape con un chunk existente< 2.29parche
mmap_overlapping_chunks.cExplotar un chunk mmap en uso para conseguir que una nueva asignación se solape con un chunk mmap actuallatest
house_of_force.c▶️Explotar el encabezado del Top Chunk (Wilderness) para lograr que malloc devuelva un puntero casi arbitrario< 2.29parcheBoston Key Party 2016-cookbook, BCTF 2016-bcloud
unsorted_bin_into_stack.c▶️Explotar la sobrescritura de un chunk liberado en la lista libre de unsorted bin para devolver un puntero casi arbitrario.< 2.29parche
unsorted_bin_attack.c▶️Explotar la sobrescritura de un chunk liberado en la lista libre de unsorted bin para escribir un valor grande en una dirección arbitraria< 2.29parche0ctf 2016-zerostorage
large_bin_attack.c▶️Explotar la sobrescritura de un chunk liberado en la lista libre de large bin para escribir un valor grande en una dirección arbitraria< 2.42parche0ctf 2018-heapstorm2
house_of_einherjar.c▶️Explotar un desbordamiento de un solo byte nulo para engañar a malloc y hacer que devuelva un puntero controladolatestSeccon 2016-tinypad
house_of_water.cExplotar un UAF o doble liberación para obtener control sin fugas de los metadatos de t-cache y una forma sin fugas de enlazar libc en t-cachelatest37c3 Potluck - Tamagoyaki
sysmalloc_int_free.cDemostración de la liberación del Top Chunk (Wilderness) de tamaño casi arbitrario usando malloc (sysmalloc _int_free() )latest
house_of_orange.c▶️Explotar el Top Chunk (Wilderness) para obtener ejecución de código arbitrario< 2.26parcheHitcon 2016 houseoforange
house_of_tangerine.cExplotar el Top Chunk (Wilderness) para engañar a malloc y hacer que devuelva un puntero completamente arbitrario abusando de la lista libre de tcache>= 2.26PicoCTF 2024- high frequency troubles
house_of_roman.c▶️Técnica sin fugas para obtener ejecución remota de código mediante fastbins falsos, el ataque unsorted_bin y sobrescrituras relativas.< 2.29parche
tcache_poisoning.c▶️Engañar a malloc para que devuelva un puntero completamente arbitrario abusando de la lista libre de tcache. (requiere fuga del heap en y después de 2.32)> 2.25parche
tcache_house_of_spirit.c▶️Libera un chunk falso para lograr que malloc devuelva un puntero casi arbitrario.> 2.25
house_of_botcake.c▶️Bypass de la restricción de doble free en tcache. Haz que tcache_dup vuelva a ser grande.> 2.25
tcache_stashing_unlink_attack.c▶️Explotar la sobrescritura de un chunk liberado en la lista libre de small bin para engañar a malloc y hacer que devuelva un puntero arbitrario y escribir un valor grande en una dirección arbitraria con la ayuda de calloc.> 2.25Hitcon 2019 one punch man
fastbin_reverse_into_tcache.c▶️Explotar la sobrescritura de un chunk liberado en el fastbin para escribir un valor grande en una dirección arbitraria.2.26 - 2.42parche
house_of_mind_fastbin.c▶️Explotar la sobrescritura de un solo byte con manejo de arena para escribir un valor grande (puntero de heap) en una dirección arbitraria< 2.43parche
house_of_storm.c▶️Explotar un use after free tanto en un chunk de large bin como de unsorted bin para devolver un chunk arbitrario desde malloc< 2.29
house_of_gods.c▶️Una técnica para secuestrar el arena de un hilo dentro de 8 asignaciones< 2.27
decrypt_safe_linking.c▶️Descifrar el valor envenenado en la lista enlazada para recuperar el puntero real>= 2.32
safe_link_double_protect.cBypass sin fugas para PROTECT_PTR protegiendo un puntero dos veces, lo que permite enlazar punteros arbitrarios en t-cache>= 2.3237c3 Potluck - Tamagoyaki
tcache_dup.c(obsoleto)Engañar a malloc para que devuelva un puntero de heap ya asignado abusando de la lista libre de tcache.2.26 - 2.28parche
tcache_metadata_poisoning.cEngañar a tcache para que proporcione punteros arbitrarios manipulando la estructura de metadatos de tcache>= 2.26
house_of_io.cEngañar a malloc para que devuelva un puntero a memoria arbitraria manipulando la estructura de gestión de tcache mediante un UAF en un chunk de tcache liberado.2.31 - 2.33
tcache_relative_write.cEscritura de un valor decimal arbitrario y de un puntero de chunk en el heap mediante escritura fuera de límites de los metadatos de tcache2.30-2.41parche
tcache_metadata_hijackingAsignación arbitraria mediante desbordamiento hacia los metadatos de tcache>= 2.42