100% encontró este documento útil (2 votos)
312 vistas13 páginas

Mexmasi 03 T 2 Trab

El documento describe los pasos para realizar ataques de desbordamiento de buffer en un programa vulnerable llamado reto.c, incluyendo compilar el programa con opciones para permitir la ejecución de código, encontrar el tamaño exacto de la cadena para el desbordamiento, obtener una dirección de memoria y generar exploits para acceder a una función y obtener una shell local.

Cargado por

darkness5125
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOC, PDF, TXT o lee en línea desde Scribd
100% encontró este documento útil (2 votos)
312 vistas13 páginas

Mexmasi 03 T 2 Trab

El documento describe los pasos para realizar ataques de desbordamiento de buffer en un programa vulnerable llamado reto.c, incluyendo compilar el programa con opciones para permitir la ejecución de código, encontrar el tamaño exacto de la cadena para el desbordamiento, obtener una dirección de memoria y generar exploits para acceder a una función y obtener una shell local.

Cargado por

darkness5125
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOC, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 13

Asignatura Datos del alumno Fecha

Apellidos: Sandoval Coello


Análisis de
12/01/2020
Vulnerabilidades
Nombre: Jenner Noé

Actividades

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 <stdio.h>
#include <string.h>
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;
}

Describe los pasos que has seguido para conseguirlo.

TEMA 2 – Actividades © Universidad Internacional de La Rioja, S. A.


(UNIR)
Asignatura Datos del alumno Fecha
Apellidos: Sandoval Coello
Análisis de
12/01/2020
Vulnerabilidades
Nombre: Jenner Noé

Extensión máxima: 15 páginas (Georgia 11 e interlineado 1,5).


Pasos Para Realizar Ataque Desbordamiento De Buffer

Instalamos el programa GCC

Escribimos y guardamos el programa a vulnerar como reto.c

TEMA 2 – Actividades © Universidad Internacional de La Rioja, S. A.


(UNIR)
Asignatura Datos del alumno Fecha
Apellidos: Sandoval Coello
Análisis de
12/01/2020
Vulnerabilidades
Nombre: Jenner Noé

Deshabilitamos el espacio utilizado por el programa, (ASLR [Address Space Layout


Randomization]). Para ello se modificará la siguiente parametrización del sistema
operativo, utilizando el siguiente comando.
echo 0 > /proc/sys/kernel/randomize_va_space
Corroboramos que el valor se haya establecido en 0 (cero), esto se puede hacer con el
siguiente comando:
cat /proc/sys/kernel/randomize_va_space

Ahora ejecutaremos el comando:


gcc -g -fno-stack-protector -z execstack -mpreferred-stack-boundary=4 -o reto reto.c

TEMA 2 – Actividades © Universidad Internacional de La Rioja, S. A.


(UNIR)
Asignatura Datos del alumno Fecha
Apellidos: Sandoval Coello
Análisis de
12/01/2020
Vulnerabilidades
Nombre: Jenner Noé

Donde gcc es para compilar, -g es para rastrear errores del depurador GDB, fno-stack-
protector es para desactivar la protección en la pila y poder sobrescribirla, -z execstack
es para poder ejecutar código en la pila, -mpreferred-stack-boundary=4 es para intento
de mantener la pila alineada a este power de 4, -o reto nombre del ejecutable que
produce el compilador, reto.c el nombre de nuestro programa.

Llamamos al debugger poniendo como parámetro nuestro programa


gdb ./reto

Ejecutamos el programa variando el argumento de entrada y analizando si el programa


se ejecuta bien o tiene problemas. Para el paso de la cadena podemos utilizar cualquier
intérprete (python, perl, ruby, etc.)

TEMA 2 – Actividades © Universidad Internacional de La Rioja, S. A.


(UNIR)
Asignatura Datos del alumno Fecha
Apellidos: Sandoval Coello
Análisis de
12/01/2020
Vulnerabilidades
Nombre: Jenner Noé

Run $(python -c ‘print “A” * 100’)

Tratamos de encontrar el tamaño exacto de la cadena, para ello vamos incrementando


el valor de 10 en 10 a partir de 100 hasta generar error, para después volver al último
valor correcto e ir incrementando de 2 en 2 hasta encontrar el tamaño exacto, en mi
caso es de 120.

Para conocer más a detalle el contenido de los registros se puede ejecutar el comando

TEMA 2 – Actividades © Universidad Internacional de La Rioja, S. A.


(UNIR)
Asignatura Datos del alumno Fecha
Apellidos: Sandoval Coello
Análisis de
12/01/2020
Vulnerabilidades
Nombre: Jenner Noé

Info registers

Otra de las herramientas que nos pueden ayudar a encontrar la cadena que tenemos
que pasar es utilizando metasploit, mediante el comando:
pattern_create.rb -l 150
En la dirección /usr/share/metasploit-framework/tools/exploit

Esta cadena creada por metasploit la correremos en gdb para que nos genere el error
Y después especificamos el comando x /xw $rsp para que nos genere el parámetro
deseado.

TEMA 2 – Actividades © Universidad Internacional de La Rioja, S. A.


(UNIR)
Asignatura Datos del alumno Fecha
Apellidos: Sandoval Coello
Análisis de
12/01/2020
Vulnerabilidades
Nombre: Jenner Noé

Una vez obtenido el parámetro volvemos a metasploit para obtener el número de


caracteres exacto para la cadena que necesitamos para el desbordamiento, esta vez
utilizando el comando:
pattern_offset.rb

TEMA 2 – Actividades © Universidad Internacional de La Rioja, S. A.


(UNIR)
Asignatura Datos del alumno Fecha
Apellidos: Sandoval Coello
Análisis de
12/01/2020
Vulnerabilidades
Nombre: Jenner Noé

Obtenemos la dirección física de la rutina premio, mediante el comando


disas premio

Una vez teniendo ya el número exacto de la cadena de caracteres que es 120 y la


dirección física de la rutina \x40\x47\x55\x55\x55\x55, procedemos a ejecutar en el
gdb el comando con los parámetros correctos para que ocurra el desbordamiento
run $(Python -c ‘print “A” * 120 + “\x40\x47\x55\x55\x55\x55”’)

TEMA 2 – Actividades © Universidad Internacional de La Rioja, S. A.


(UNIR)
Asignatura Datos del alumno Fecha
Apellidos: Sandoval Coello
Análisis de
12/01/2020
Vulnerabilidades
Nombre: Jenner Noé

El siguiente paso es obtener un shell para lo cual creamos un archivo que contenga
NOPs, conocer dirección exacta donde inicia el código
Código shell, código en ensamblador para la ejecución de un shell
Relleno, llegar al tamaño necesario para el desbordamiento
Dirección a brincar, dirección física a la cual queremos brincar

Procedemos a dar permiso al archivo para ejecución

TEMA 2 – Actividades © Universidad Internacional de La Rioja, S. A.


(UNIR)
Asignatura Datos del alumno Fecha
Apellidos: Sandoval Coello
Análisis de
12/01/2020
Vulnerabilidades
Nombre: Jenner Noé

Ejecutaos el archivo en gbd

TEMA 2 – Actividades © Universidad Internacional de La Rioja, S. A.


(UNIR)
Asignatura Datos del alumno Fecha
Apellidos: Sandoval Coello
Análisis de
12/01/2020
Vulnerabilidades
Nombre: Jenner Noé

Luego necesitamos colocar un breakpoint que es un punto de interrupción dentro del


programa para saber dónde está la memoria almacenada utilizando el comando list

Ahora corremos de nuevo el programa para que salga el punto de interrupción para asi
saber las posiciones de la pila

TEMA 2 – Actividades © Universidad Internacional de La Rioja, S. A.


(UNIR)
Asignatura Datos del alumno Fecha
Apellidos: Sandoval Coello
Análisis de
12/01/2020
Vulnerabilidades
Nombre: Jenner Noé

Ahora una vez obtenido la dirección de regreso eip, lo sustituimos en el archivo.

Luego borramos el breakpoint

TEMA 2 – Actividades © Universidad Internacional de La Rioja, S. A.


(UNIR)
Asignatura Datos del alumno Fecha
Apellidos: Sandoval Coello
Análisis de
12/01/2020
Vulnerabilidades
Nombre: Jenner Noé

y volvemos a ejecutar el programa

TEMA 2 – Actividades © Universidad Internacional de La Rioja, S. A.


(UNIR)

También podría gustarte