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 de https://github.com/shellphish/how2heap/blob/master/glibc_2.35/house_of_einherjar.c
O el de https://guyinatuxedo.github.io/42-house_of_einherjar/house_einherjar_exp/index.html#house-of-einherjar-explanation (puede que necesites llenar el tcache)
El objetivo es asignar memoria en casi cualquier dirección específica.
Crear un chunk falso cuando queramos asignar un chunk:
Establecer punteros para que apunten a sí mismos para eludir las verificaciones de sanidad
Desbordamiento de 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 sí mismo y el chunk falso
El tamaño del chunk falso también debe haberse establecido al mismo tamaño para eludir las verificaciones de sanidad
Para construir estos chunks, necesitarás un leak de heap.
Se crea un chunk A
dentro de un chunk controlado por el atacante apuntando con fd
y bk
al chunk original para eludir las protecciones
Se asignan 2 chunks más (B
y C
)
Abusando del off by one en el B
, se limpia el bit prev in use
y los datos de prev_size
se sobrescriben 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 los mismos para eludir las verificaciones.
Luego, se llena el 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 se puede continuar con un ataque de fast bin o envenenamiento de Tcache:
Libera B
para agregarlo al fast bin / Tcache
El fd
de B
se sobrescribe haciéndolo apuntar a la dirección objetivo abusando del chunk D
(ya que contiene B
dentro)
Luego, se realizan 2 mallocs y el segundo va a asignar la dirección objetivo
Después de liberar punteros, no se nulifican, por lo que aún es posible acceder a sus datos. Por lo tanto, un chunk se coloca en el bin no ordenado y se filtran los punteros que contiene (leak 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 la Casa de Einherjar para obtener una situación de chunks superpuestos y terminar con el 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)