mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-22 04:33:28 +00:00
4 KiB
4 KiB
Casa de Einherjar
Aprende hacking en AWS de cero a héroe con htARTE (Experto en Equipo Rojo de AWS de HackTricks)!
Otras formas de apoyar a HackTricks:
- Si deseas ver tu empresa anunciada en HackTricks o descargar HackTricks en PDF Consulta los PLANES DE SUSCRIPCIÓN!
- Obtén el swag oficial de PEASS & HackTricks
- Descubre La Familia PEASS, nuestra colección exclusiva de NFTs
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte tus 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 el de 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 por uno de un chunk a otro para modificar el previo en uso
- Indicar en el
prev_size
del chunk abusado por desbordamiento por uno la diferencia entre él mismo y el chunk falso - El tamaño del chunk falso también debe haber sido establecido con 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 desbordamiento por uno 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:
- Liberar
B
para agregarlo al fast bin - Se sobrescribe el
fd
deB
haciendo que apunte a la dirección objetivo abusando del chunkD
(ya que contiene aB
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
- 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 a partir del puntero que se obtiene.