Documentos de Académico
Documentos de Profesional
Documentos de Cultura
BUFFER OVERFLOW 2
#include <stdio.h>
#include <string.h>
strcpy(buff,argv[1]);
printf("%s\n\n",buff);
return 0;
int CodigoMaligno(){
return 0;
Una vez que lo hemos compilado con el compilador en c que hayamos escogido,
comprobamos que funciona perfectamente.
Para ello nos situamos sobre la ruta donde se encuentra el archivo, nosotros lo hemos
guardado como vulnerable.c y el ejecutable que nos ha creado es vulnerable.exe
Como hemos visto en el código el programa necesita de argumentos, para que estos sean
ejecutados, tenemos que poner el nombre del archivo.exe a ejecutar en este caso vulnerable
y seguido una cadena de caracteres en este caso hola, como vemos el programa funciona
perfectamente.
Probamos con 20 aes pues en principio el buffer solo espera cinco caracteres asique seria
suficiente
Una vez que hemos pulsado en aceptar lo siguiente que debemos hacer es pulsar en restart y
después en run todo ello desde el menú de debug, vemos que no hemos sobrescrito EIP con
ninguna de las aes.
Como la prueba anterior no ha sido fructífera vamos a probar ahora con 30 aes
Ahora si, podemos ver que el EIP se ha sobrescrito con dos aes desbordando la pila (stack
overflow). Así pues necesitaremos 28 bytes, más los tres correspondientes a la dirección a la
queremos que apunte 4012FD para lograr que EIP contenga la dirección de comienzo de la
función que queremos ejecutar.
/* exploit */
int main () {
system("vulnerable.exe aaaaaaaaaaaaaaaaaaaaaaaaaaaa\xFD\x12\x40\x00");
EXPLOTANDO LA VULNERABILIDAD
Una vez compilado, desde la consola, nos situamos en la dirección donde se encuentra el
exploit, en este caso Mis documentos y escribimos el nombre del .exe del exploit, veremos
que hemos ejecutado una función oculta del programa que no se debería ejecutar pues
nunca el propio programa hace la llamada a dicha función.
Lo primero que hacemos es crear un programa Vulnerable, este programa presenta un Buffer
Overflow que puede ser explotado para saltarse un "proceso de autenticación".
#include <stdio.h>
int main(){
char password[10];
while (1){
scanf("%s", password);
if (strcmp(password, clave) == 0 ){
break;
}//End If
}//End While
}//End main
Una vez que compilamos el código en c con el compilador que queramos, en mi caso
Codeblocks lo guardamos con el nombre que queramos, en mi caso vulnerable2
comprobamos que el código funciona, para ello abrimos la consola y nos situamos en la
dirección donde se ha guardado el programa escribimos el nombre con el que hemos
guardado el programa y este se ejecutara.
EXPLOTANDO LA VULNERABILIDAD
Hay que entender una cosa antes de recurrir a programas como OllyDBG y esque si aquí la
contraseña está limitada a 10 caracteres y que la función scanf va a recoger todo lo que le
metamos.
Esto no es problema cuando se meten cadenas de la longitud esperada como cuando hemos
probado el programa por ejemplo javier, Garcia, Cambronel….
j a v i e r /0
A s i r 2 0 1 2 /0
Comprobemos primero lo que pasa en memoria con este esquema, es decir, como vemos lo
que pasa es que la dirección de memoria donde se guarda la cadena que introducimos para
compararla con la contraseña sobrescribe a esta y finalizándola con /0.
1 2 3 4 5 6 7 8 9 0
1 /0 i r 2 0 1 2 /0