ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

Ataque de desbordamiento de Buffer


Enviado por   •  31 de Julio de 2019  •  Tareas  •  1.247 Palabras (5 Páginas)  •  934 Visitas

Página 1 de 5

Actividades[pic 1]

Actividad: Realizar ataque de desbordamiento de buffer

En la siguiente actividad deberás crear dos exploits para el programa reto.c. El primero deberá conseguir acceder a la función premio() alterando el flujo del programa y el segundo deberá obtener una shell local en la propia máquina. Se deberá realizar en la máquina Kali desactivando ASLR y compilando con las opciones vistas para permitir ejecución de código en la pila

root@kali:~# cat reto.c

#include

#include  

void premio()

{

     printf("He alterado el flujo del programa\n");

}  

int main(int argc, char *argv[])

{

    char buffer[100];

    if (argc != 2)

   {

         printf("Uso: %s argumento\n",argv[0]);

         return -1;

    }

    strcpy(buffer,argv[1]);

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

    return 0;

}

Desarrollo

Debido a que muchos sistemas operativos tales como Windows y Linux se encuentran activados con protecciones para prevenir ataques de desbordamiento de búfer, una de las técnicas es el ASLR, el cual genera direcciones aleatorias en la pila y en el heap, esto con la finalidad de evitar este tipo de vulnerabilidades. En otras palabras, se evita que JMP ESP no caiga en la misma dirección de memoria, es decir que ASLR hace que las instrucciones caigan de manera aleatoria en distintas direcciones de memoria. Para este caso en particular, se procederá con la desactivación el ASLR en la distribución de Kali Linux i386.

[pic 2]

Imagen 1. Desactivación de ASLR

Posteriormente, se procede con la creación del archivo reto.c y se compila mediante la siguiente instrucción:

[pic 3]

Imagen 2. Compilación del programa reto.c

El compilador gcc genera mecanismos de protección en la pila para que no funcionen los ataques de buffer overflow ni se pueda ejecutar código en ella, por lo que se usa la opción -fno-stack-protector (poder sobrescribir la pila) y -z execstack (poder ejecutar código en la pila).

Al ejecutar el archivo (./reto) se pasa cómo parámetro la letra “a” , multiplicada por 99, por lo que el programa funciona correctamente.

[pic 4]

Imagen 3. Funcionamiento correcto del programa reto.c

Al aumentar el valor a 120 caracteres (“a”*120), se observa que existe una violación de segmento (“Segmentation fault”), esto es que se ha sobrescrito el registro EIP, el cual apunta a una dirección de memoria no permitida, por lo tanto hay un desbordamiento de búfer.

[pic 5]

Imagen 4. Desbordamiento de Búfer

Dado que el valor de EIP es de 4 bytes, se procederá a hacer uso de un patrón con valor de 120. Para llevar a cabo esta tarea, se hará uso de 2 herramientas de Metasploit. Pattern_create, permite crear un patrón de texto para introducirlo en el buffer a desbordar.  

[pic 6]

Imagen 5. Creación de un patrón mediante metasploit

Ingresar a GDB, y ejecutar el programa con el valor obtenido.

[pic 7]

Imagen 6. Uso de pattern_create

Para obtener exactamente la cantidad de caracteres que se necesitan antes de sobrescribir el EIP se requiere el uso del comando pattern_offset.rb.

[pic 8]

Imagen 7. Uso de pattern_offset

Se observa que los números de caracteres que son necesarios pasar al programa antes de sobrescribir el EIP es 108, de aquí los 4 caracteres (4 bytes) seguidos son los pertenecientes al registro EIP. Lo comprobamos pasando 108 “a” ‘s y 12 “b” ’s.

[pic 9]

Imagen 8. Sobrescribiendo EIP

0x62626262= significa que EIP ha sido sobrescrito con la cadena bbbbbbbbbbb (b=62 en hexadecimal).

El programa ha funcionado, por lo que ya se conoce la dirección a la que se desea saltar tras realizar el desbordamiento.

Accediendo a la función premio ()

Desensamblar la función main del ejecutable con el comando disass main y buscar la llamada a la función strcpy. Después colocar un punto de interrupción (breakpoint)  en la ejecución del programa, para poder analizar la pila una vez hecho el desbordamiento.

...

Descargar como (para miembros actualizados)  txt (7.7 Kb)   pdf (857.6 Kb)   docx (1 Mb)  
Leer 4 páginas más »
Disponible sólo en Clubensayos.com