House of Einherjar
Last updated
Last updated
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)
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)
El objetivo es asignar memoria en casi cualquier dirección específica.
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.
Se crea un chunk falso dentro de un chunk controlado por el atacante apuntando con fd
y bk
al chunk original para evadir protecciones.
Se asignan 2 otros chunks (B
y C
).
Abusando del off-by-one en el chunk B
, se limpia el bit prev in use
y se sobrescribe los datos de prev_size
con la diferencia entre el lugar donde se asigna el chunk C
, al chunk falso A
generado antes.
Este prev_size
y el tamaño en el chunk falso A
deben ser iguales para evadir las comprobaciones.
Luego, se llena la tcache.
Luego, se libera C
para que se consolide con el chunk falso A
.
Luego, se crea un nuevo chunk D
que comenzará en el chunk falso A
y cubrirá el chunk B
.
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
de B
haciendo que apunte a la dirección objetivo abusando del chunk D
(ya que contiene B
dentro)
Luego, se realizan 2 mallocs y el segundo va a estar asignando la dirección objetivo
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.
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.
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)