mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-29 08:01:00 +00:00
4.8 KiB
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:
- Si deseas ver tu empresa anunciada en HackTricks o descargar HackTricks en PDF Consulta los PLANES DE SUSCRIPCIÓN!
- Obtén la merchandising 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
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:
- https://github.com/DhavalKapil/heap-exploitation/blob/d778318b6a14edad18b20421f5a06fa1a6e6920e/assets/files/shrinking_free_chunks.c
- Este ataque ya no funciona debido al uso de Tcaches.
- Además, si intentas abusar de él usando fragmentos más grandes (para que no intervengan las tcaches), obtendrás el error:
malloc(): invalid next size (unsorted)
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:
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:
- Si deseas ver tu empresa anunciada en HackTricks o descargar HackTricks en PDF Consulta los PLANES DE SUSCRIPCIÓN!
- Obtén la merchandising 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.