Imagine dos casas en la calle. Una es la casa de tu amigo y otra es la casa de su malvado vecino paranoico tres puertas más abajo. El vecino paranoico malvado nunca entra o sale, y su lugar está cerrado con llave.
Ahora, su amigo es un amigo tan bueno y confiable, que le permitirá almacenar cualquier cosa en su lugar, colocando cajas una tras otra, comenzando en una pared. De hecho, es tan buen amigo que va a seguir poniendo cajas una tras otra, sin verificar si golpeó la pared, hasta que se mantienen en el aire y finalmente pasan a través de otras dos casas en la calle y hacia adentro. la casa del vecino paranoico malvado. Pero tu amigo confía en que no harás eso porque le gustas (y es un poco ingenuo).
Así que tienes la oportunidad de poner algo en la casa del vecino malvado paranoico explotando a tu amigo de confianza.
Reemplazar los siguientes términos y verá la analogía a un ataque de desbordamiento de búfer:
- "casa de un amigo" -> "una parte de un programa que no se compruebe desbordamiento de búfer "
- " la casa de su vecino paranoico malvado "->" otra parte de un programa que se supone que es seguro "
- " boxes "->" argumentos/parámetros para el programa que no verifica para desbordamiento de búfer "
Esto solo tiene éxito si alguien descubre dónde está el área segura de la memoria, y qué tendría que pasar como argumento para el programa en cuestión, que terminaría en el área segura, para tener el efecto deseado . (si se trata de datos, o código que hace que se ejecute el código del explotador)
@Cody Brocious, gracias por la edición. –