House of Einherjar
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.
Información Básica
Código
- Consulta 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)
Objetivo
- El objetivo es asignar memoria en casi cualquier dirección específica.
Requisitos
- 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.
Ataque
- Se crea un chunk
A
dentro de un chunk controlado por el atacante apuntando confd
ybk
al chunk original para eludir las protecciones - Se asignan 2 chunks más (
B
yC
) - Abusando del off by one en el
B
, se limpia el bitprev in use
y los datos deprev_size
se sobrescriben 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 los mismos para eludir las verificaciones. - Luego, se llena el 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 se puede continuar con un ataque de fast bin o envenenamiento de Tcache:
- Libera
B
para agregarlo al fast bin / Tcache - El
fd
deB
se sobrescribe haciéndolo apuntar a la dirección objetivo abusando del chunkD
(ya que contieneB
dentro) - Luego, se realizan 2 mallocs y el segundo va a ser 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 nulifican, por lo que aún es posible acceder a sus datos. Por lo tanto, se coloca un chunk en el contenedor no ordenado y se filtran los punteros que contiene (libc leak) y luego se coloca un nuevo heap en el contenedor 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 terminar con envenenamiento de Tcache para obtener un primitivo de escritura arbitraria.
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.