hacktricks/binary-exploitation/heap/off-by-one-overflow.md

4.8 KiB

Desbordamiento por uno

Aprende hacking en AWS de cero a héroe con htARTE (Experto en Equipos Rojos de AWS de HackTricks)!

Otras formas de apoyar a HackTricks:

Información Básica

Tener acceso solo a un desbordamiento por uno permite a un atacante modificar la información de metadatos de tamaño anterior, lo que permite manipular qué fragmentos se liberan realmente, generando finalmente un fragmento que contiene otro fragmento legítimo.

Ejemplo de Código:

Objetivo

  • Hacer que un fragmento esté contenido dentro de otro fragmento, de modo que el acceso de escritura sobre ese segundo fragmento permita sobrescribir el contenido del primero.

Requisitos

  • Desbordamiento por uno para modificar la información de metadatos de tamaño anterior

Ataque

  • Se reservan 3 fragmentos de memoria (a, b, c) uno tras otro. Luego se libera el del medio. El primero contiene una vulnerabilidad de desbordamiento por uno y el atacante la abusa con un 0x00 (si el byte anterior era 0x10, haría que el fragmento del medio indicara que es 0x10 más pequeño de lo que realmente es).
  • Luego, se asignan 2 fragmentos más pequeños en el fragmento liberado del medio (b), sin embargo, como b + b->size nunca actualiza el fragmento c porque la dirección apuntada es más pequeña de lo que debería.
  • Luego, se liberan b1 y c. Como c - c->prev_size todavía apunta a b (ahora b1), ambos se consolidan en un solo fragmento. Sin embargo, b2 todavía está dentro, entre b1 y c.
  • Finalmente, se realiza un nuevo malloc reclamando esta área de memoria que en realidad va a contener b2, lo que permite al propietario del nuevo malloc controlar el contenido de b2.

Esta imagen explica perfectamente el ataque:

https://heap-exploitation.dhavalkapil.com/attacks/shrinking_free_chunks

Referencias

Aprende hacking en AWS de cero a héroe con htARTE (Experto en Equipos Rojos de AWS de HackTricks)!

Otras formas de apoyar a HackTricks: