2010-11-05 9 views
6

He leído dos artículos sobre la pulverización en montones: Wikiepdia y this blog post. Entiendo cómo se introduce el código de shell en la memoria del programa. ¿Pero cómo se hace que el programa salte/llame a la memoria de direcciones ubicada en el montón?¿Cómo funciona el ataque de pulverización en montón?

¿Qué tipo de bloqueo hace que una llamada al montón?

¿Es necesario realizar un ataque de este tipo con un tipo de ataque de desbordamiento de búfer?

¿Hay alguna regla de oro como la que tiene desbordamiento de búfer, es decir, utiliza la versión n de las funciones (strncpy en su lugar strcpy)?

+0

Ver http://www.darkreading.com/vulnerabilities---threat/heap-spraying-attackers-latest-weapon-of-choice/d/d-id/1132487 y https: //www.corelan. be/index.php/2011/12/31/exploit-writing-tutorial-part-11-heap-spraying-demystified/ – Pacerier

Respuesta

2

Si he entendido bien,

Comúnmente se aprovechan del hecho de que estos bloques montón serán más o menos estar en el mismo lugar cada vez que se ejecuta el spray montón. El flujo de ejecución se puede redirigir al montón pulverizaciones a través de un desbordamiento de búfer fallas de desbordamiento.

Están hablando de una situación como esta:

char buffer[10]; 
FuncPtr p; 

Y cuando se lee en buffer no hay protección contra el desbordamiento, y se puede escribir directamente en la ubicación de memoria para p. Más adelante, cuando su código intente llamar al p, saltará al lugar donde el atacante quiera que salte, presumiblemente donde inyectó el código ejecutable en su aplicación.

Solución simple: no utilice los búferes estáticos (prefiera las clases de colección std::) y compruebe siempre si hay desbordamientos.

+0

Parece que he perdido esa frase en la wikipedia :) ¡Gracias! –

Cuestiones relacionadas