mirror of
https://github.com/carlospolop/hacktricks
synced 2025-02-18 06:58:27 +00:00
5.5 KiB
5.5 KiB
Casa de Einherjar
{% hint style="success" %}
Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: 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 los repositorios de HackTricks y HackTricks Cloud.
Información Básica
Código
- Revisa el ejemplo en https://github.com/shellphish/how2heap/blob/master/glibc_2.35/house_of_einherjar.c
- O en https://guyinatuxedo.github.io/42-house_of_einherjar/house_einherjar_exp/index.html#house-of-einherjar-explanation (puede ser necesario llenar la tcache)
Objetivo
- El objetivo es asignar memoria en casi cualquier dirección específica.
Requisitos
- Crear un chunk falso cuando queremos asignar un chunk:
- Establecer punteros para que apunten a sí mismos y evadir las comprobaciones de integridad
- Desbordar un byte con un byte nulo de un chunk al siguiente para modificar la bandera
PREV_INUSE
. - Indicar en el
prev_size
del chunk abusado por el off-by-null la diferencia entre él mismo y el chunk falso. - El tamaño del chunk falso también debe haber sido establecido en el mismo tamaño para evadir las comprobaciones de integridad.
- Para construir estos chunks, necesitarás una fuga de heap.
Ataque
- Se crea un chunk falso dentro de un chunk controlado por el atacante apuntando con
fd
ybk
al chunk original para evadir protecciones. - Se asignan 2 otros chunks (
B
yC
). - Abusando del off-by-one en el chunk
B
, se limpia el bitprev in use
y se sobrescribe los datos deprev_size
con la diferencia entre el lugar donde se asigna el chunkC
, al chunk falsoA
generado antes. - Este
prev_size
y el tamaño en el chunk falsoA
deben ser iguales para evadir las comprobaciones. - Luego, se llena la tcache.
- Luego, se libera
C
para que se consolide con el chunk falsoA
. - Luego, se crea un nuevo chunk
D
que comenzará en el chunk falsoA
y cubrirá el chunkB
. - La casa de Einherjar termina aquí.
- Esto puede continuar con un ataque de fast bin o envenenamiento de Tcache:
- Liberar
B
para agregarlo al fast bin / Tcache - Se sobrescribe el
fd
deB
haciendo que apunte a la dirección objetivo abusando del chunkD
(ya que contieneB
dentro) - Luego, se realizan 2 mallocs y el segundo va a estar asignando la dirección objetivo
Referencias y otros ejemplos
- https://github.com/shellphish/how2heap/blob/master/glibc_2.35/house_of_einherjar.c
- CTF https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house_of_einherjar/#2016-seccon-tinypad
- Después de liberar punteros, no se anulan, por lo que aún es posible acceder a sus datos. Por lo tanto, se coloca un chunk en el bin no ordenado y se filtran los punteros que contiene (fuga de libc) y luego se coloca un nuevo heap en el bin no ordenado y se filtra una dirección de heap del puntero que obtiene.
- baby-talk. DiceCTF 2024
- Error de desbordamiento de byte nulo en
strtok
. - Usa House of Einherjar para obtener una situación de chunks superpuestos y termina con envenenamiento de Tcache para obtener un primitivo de escritura arbitraria.
{% hint style="success" %}
Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: 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 los repositorios de HackTricks y HackTricks Cloud.