House of Einherjar

Apoya a HackTricks

Información Básica

Código

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 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

Referencias y otros ejemplos

Apoya a HackTricks

Last updated