Actividad: Realizar ataque de desbordamiento de buffer
Enviado por nomis • 28 de Mayo de 2019 • Apuntes • 871 Palabras (4 Páginas) • 568 Visitas
Actividades[pic 1]
Actividad: Realizar ataque de desbordamiento de buffer
Desbordamiento de bufer: Es un error de software, el cual se produce en el programa al no controlar la cantidad de datos que se copian en el área de memoria que es reservada, por lo cual, si es superior la capacidad preasignada, lo bytes que sobran se almacenan en la zona de memoria adyacente, y sobrescribir en su contenido original, de datos o códigos almacenados en memoria. Constituyendo esto un fallo de programación.
Primera parte de la actividad: Conseguir acceder a la función premio()
Primero se escribe el código del reto.c
Se deberá deshabilitar la aleatoriedad de disposición de espacios en la memoria, con la finalidad de obtener la dirección de la memoria donde existe error al ejecutar el código, y así poder explotar la vulnerabilidad.
1.- ejecutar el comando
cat /proc/sys/kernel/randomize_va_space
su valor es 2 par deshabilitar el ASLR es el comando
echo 0 > /proc/sys/kernel/randomize_va_space
el valor de ASLR es de 0
2.- se ejecuta el código reto.c
Argumentos a utilizar en esta actividad son:
gcc | Compilador |
-z execstack | Poder ejecutar código en la pila |
-fno-stack-protector | Desactivar la protección de la pila y poder sobrescribir la pila. |
-mpreferred-stack-boundary=2 | Intento de mantener la pila alineada a este power de 2 (4 para sistemas de 64 bits) |
-g | Incluye en el ejecutable generado la información necesaria para poder rastrear los errores usando un depurador, tal como GDB (GNU Debugger). |
reto.c | Input. Indicar el nombre del programa fuente |
-o reto | Output. Escoger el nombre del ejecutable que produce el compilador |
Arch | Nos muestra de cuantos bits es nuestra maquina x86_64 |
3.- Ejecutamos el código:
gcc -g -fno-stack-protector -z execstack -mpreferred-stack-boundary=4 -o
reto reto.c
4.- Usamos herramienta llamada debugger (gdb)
Gbd ./reto
Debugger (gdb) funciones de esta herramienta
Gdb | Debugger |
run | Manda la ejecución del programa cargado por el debugger. Permite introducir los parámetros o entradas al programa Ejemplo: run `python -c ‘print “A” * 180 ‘` |
list | Permite ver el código fuente del programa que se está ejecutando (siempre y cuando está disponible) |
break | Señala un breakpoint de la ejecución Ejemplos: break 6 (breakpoint in línea 6); b main (breackpoint en la función main) |
clear | Limpia todos los breakpoint definidos |
info | Permite visualizar información sobre el estado del programa. A este comando se le necesita añadir qué es lo que se desea ver, ejemplos: info registers Para ver todas las opciones teclear solo info |
eXamine | Permite examinar posiciones de memoria a partir de una posición origen Ejemplo: x/40x $rsp (examina las siguientes 40 posiciones hexadecimales a partir de lo que apunta $rsp). En este ejemplo se está usando rsp por ser 64 bits, si fuera 32 bits sería esp |
disas | Desensambla el código y nos muestra las direcciones físicas relacionadas con el mismo. Se le debe indicar que función. Ejemplo: disas premio |
...