Professional Documents
Culture Documents
BUFFER OVERFLOW 2
SALTANDO SISTEMA DE AUTENTIFICACIN BUFFER OVERFLOW CREAMOS UN PROGRAMA VULNERABLE DESARROLLO DE LOS PASOS EXPLOTANDO LA VULNERABILIDAD
SEGUNDO DE ASIR
Pgina 1
Como hemos visto en el cdigo 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.
SEGUNDO DE ASIR
Pgina 2
Revisando el cdigo desensamblado del programa vulnerable.exe podemos ver que la 1 instruccin (push EBP) reside en la direccin 004012FD. Esa es la direccin que se debe cargar en el registro EIP para que la funcin CodigoMaligno se ejecute. Para ello debemos calcular cuantos caracteres debemos introducir en el array buff[] para desbordarlo y sobrescribir EIP. Calculamos del nmero de caracteres necesarios para sobrescribir el EIP. Primero vemos los valores de los registros de nuestro programa normalmente
Nos vamos a la barra de herramientas Debug y seguidamente a arguments 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 despus en run todo ello desde el men de debug, vemos que no hemos sobrescrito EIP con ninguna de las aes.
SEGUNDO DE ASIR
Pgina 3
Ahora si, podemos ver que el EIP se ha sobrescrito con dos aes desbordando la pila (stack overflow). As pues necesitaremos 28 bytes, ms los tres correspondientes a la direccin a la queremos que apunte 4012FD para lograr que EIP contenga la direccin de comienzo de la funcin que queremos ejecutar.
CDIGO DEL EXPLOIT Escribimos un sencillo programa en c que contenga una nica instruccin: la llamada al sistema (Windows) que permita ejecutar el cdigo vulnerable pasndole como argumento los 28 bytes (p.ej. aes) ms la direccin de memoria de comienzo de la funcin CodigoMaligno le indicamos que en Hexadecimal y puesta al revs. Guardamos el siguiente cdigo en c y lo compilamos. /* exploit */ int main () { system("vulnerable.exe aaaaaaaaaaaaaaaaaaaaaaaaaaaa\xFD\x12\x40\x00"); } EXPLOTANDO LA VULNERABILIDAD Una vez compilado, desde la consola, nos situamos en la direccin donde se encuentra el exploit, en este caso Mis documentos y escribimos el nombre del .exe del exploit, veremos que hemos ejecutado una funcin oculta del programa que no se debera ejecutar pues nunca el propio programa hace la llamada a dicha funcin.
SEGUNDO DE ASIR
Pgina 4
system("Pause"); //Envio de Pause al CMD return 0; //Retorno cuando se termina el main }//End main
SEGUNDO DE ASIR
Pgina 5
Si ejecutamos el cdigo, bsicamente tendremos un prompt que nos pide la contrasea y que no nos permite el acceso al resto de funcionalidad (en este caso ninguna, es solo un ejemplo). Sin embargo, podemos observar que la funcin scanf recoge la cadena que introduzcamos por teclado sin tener en consideracin su longitud, por lo que si introducimos una cadena de ms de los 10 caracteres que tenemos reservados se producir un Buffer Overflow.
SEGUNDO DE ASIR
Pgina 6
/0
Sin embargo, que pasa cuando introducimos ms de 10 caracteres? Comprobemos primero lo que pasa en memoria con este esquema, es decir, como vemos lo que pasa es que la direccin de memoria donde se guarda la cadena que introducimos para compararla con la contrasea sobrescribe a esta y finalizndola con /0. 1 1 2 /0 3 i 4 r 5 2 6 0 7 1 8 2 9 /0 0
Entonces comprobamos a saltarnos el sistema de autentificacin insertando los mismos valores que en el esquema teniendo en cuenta que con introducir el nmero uno, nos tendramos que autentificar y vemos que as es.
SEGUNDO DE ASIR
Pgina 7
SEGUNDO DE ASIR
Pgina 8