practica buffer overflow

10
 BUFFER OVERFLOW 2 2012 Javier García Cambronel SEGUNDO DE ASIR 31/01/2012

Upload: javierasir2012

Post on 04-Apr-2018

240 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Practica buffer overflow

7/31/2019 Practica buffer overflow

http://slidepdf.com/reader/full/practica-buffer-overflow 1/9

 

BUFFER OVERFLOW 2

2012 

Javier García Cambronel

SEGUNDO DE ASIR

31/01/2012

Page 2: Practica buffer overflow

7/31/2019 Practica buffer overflow

http://slidepdf.com/reader/full/practica-buffer-overflow 2/9

[BUFFER OVERFLOW 2]  31 de enero de 2012

SEGUNDO DE ASIR Página 1

PRÁCTICA FUNCIÓN OCULTA

CREAMOS UN PROGRAMA VULNERABLE

DESARROLLO DE LOS PASOS 

CÓDIGO DEL EXPLOIT

EXPLOTANDO LA VULNERABILIDAD

SALTANDO SISTEMA DE AUTENTIFICACIÓN BUFFER

OVERFLOWCREAMOS UN PROGRAMA VULNERABLE

DESARROLLO DE LOS PASOS 

EXPLOTANDO LA VULNERABILIDAD

Page 3: Practica buffer overflow

7/31/2019 Practica buffer overflow

http://slidepdf.com/reader/full/practica-buffer-overflow 3/9

[BUFFER OVERFLOW 2]  31 de enero de 2012

SEGUNDO DE ASIR Página 2

PRÁCTICA FUNCIÓN OCULTA

CREAMOS UN PROGRAMA VULNERABLE

Compilamos el siguiente ejemplo de código fuente vulnerable escrito en c.

#include <stdio.h>

#include <string.h>

int main(int argc,char **argv){

char buff[5] = "Datos";

strcpy(buff,argv[1]);

printf("%s\n\n",buff);

return 0;

}

int CodigoMaligno(){

printf("Hola, soy el bicho!!!"); //este mensaje nunca se ejecutará

return 0;

}

En una ejecución normal del programa la función “CodigoMaligno()”nunca se ejecutaría.

Aprovechando la vulnerabilidad de la función “strcpy()”, vamos a hacer que se ejecute.  

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

Lo hemos guardado en mis documentos asique abrimos la consola y escribimos el comando

que vemos en la imagen

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.

Page 4: Practica buffer overflow

7/31/2019 Practica buffer overflow

http://slidepdf.com/reader/full/practica-buffer-overflow 4/9

[BUFFER OVERFLOW 2]  31 de enero de 2012

SEGUNDO DE ASIR Página 3

DESARROLLO DE LOS PASOS

Cargamos en Ollydbg el ejecutable obtenido (en este caso llamado “vulnerable.exe”) y

localizamos la dirección de memoria donde comienza la función “CodigoMaligno()”. 

Revisando el código desensamblado del programa “vulnerable.exe” podemos ver que la 1ª

instrucción (“push EBP”) reside en la dirección “004012FD”. Esa es la dirección que se debe

cargar en el registro EIP para que la función “CodigoMaligno” se ejecute. Para ello debemos

calcular cuantos caracteres debemos introducir en el array “buff[]” para desbordarlo y

sobrescribir EIP.

Calculamos del número 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 ydespués en run todo ello desde el menú de debug, vemos que no hemos sobrescrito EIP con

ninguna de las aes.

Page 5: Practica buffer overflow

7/31/2019 Practica buffer overflow

http://slidepdf.com/reader/full/practica-buffer-overflow 5/9

[BUFFER OVERFLOW 2]  31 de enero de 2012

SEGUNDO DE ASIR Página 4

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.

CÓDIGO DEL EXPLOIT

Escribimos un sencillo programa en c que contenga una única instrucción: la llamada al

sistema (Windows) que permita ejecutar el código vulnerable pasándole como argumento

los 28 bytes (p.ej. aes) más la dirección de memoria de comienzo de la función

“CodigoMaligno” le indicamos que en Hexadecimal y puesta al revés.

Guardamos el siguiente código 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 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.

Page 6: Practica buffer overflow

7/31/2019 Practica buffer overflow

http://slidepdf.com/reader/full/practica-buffer-overflow 6/9

[BUFFER OVERFLOW 2]  31 de enero de 2012

SEGUNDO DE ASIR Página 5

SALTANDO SISTEMA DE AUTENTIFICACIÓN BUFFER OVERFLOW

CREAMOS UN PROGRAMA VULNERABLE

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 clave[] = "Asir2012";

char password[10];

while (1){

printf("Ingrese el codigo de Seguridad --> ");

scanf("%s", password);

if (strcmp(password, clave) == 0 ){

break;

}//End If 

}//End While

printf("\nAcceso concedido... \n\n");

system("Pause"); //Envio de Pause al CMD

return 0; //Retorno cuando se termina el main

}//End main

Page 7: Practica buffer overflow

7/31/2019 Practica buffer overflow

http://slidepdf.com/reader/full/practica-buffer-overflow 7/9

[BUFFER OVERFLOW 2]  31 de enero de 2012

SEGUNDO DE ASIR Página 6

DESARROLLO DE LOS PASOS

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 hemosguardado el programa y este se ejecutara.

Como podemos ver el programa de validación funciona perfectamente y hasta que no

introducimos la contraseña correcta “Asir2012” no nos da acceso

Si ejecutamos el código, básicamente tendremos un prompt que nos pide la contraseña 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 función scanf recoge la cadena que

introduzcamos por teclado sin tener en consideración su longitud, por lo que si introducimos

una cadena de más de los 10 caracteres que tenemos reservados se producirá un Buffer

Overflow.

Page 8: Practica buffer overflow

7/31/2019 Practica buffer overflow

http://slidepdf.com/reader/full/practica-buffer-overflow 8/9

[BUFFER OVERFLOW 2]  31 de enero de 2012

SEGUNDO DE ASIR Página 7

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….

Son siempre dos direcciones de memoria consecutivas, la contraseña introducida y con la

que se valida.

 j a v i e r /0

A s i r 2 0 1 2 /0

Sin embargo, ¿que pasa cuando introducimos más de 10 caracteres?

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

Entonces comprobamos a saltarnos el sistema de autentificación insertando los mismos

valores que en el esquema teniendo en cuenta que con introducir el número uno, nos

tendríamos que autentificar y vemos que así es.

Page 9: Practica buffer overflow

7/31/2019 Practica buffer overflow

http://slidepdf.com/reader/full/practica-buffer-overflow 9/9

[BUFFER OVERFLOW 2]  31 de enero de 2012

SEGUNDO DE ASIR Página 8

CONSIDERACIONES DE LA PRÁCTICA 2: no he conseguido nada más que averiguar el offset de

la dll necesaria y unos mil errores al intentar compilar los dem´´as archvisvos necesarios,

cambiando las cosas que en principio hay que cambiar, no he utilizado dev c++ porque ya se

dice en la práctica que directamente no va, He utilizado Code blocks