Proyecto de concienciación en
seguridad de la información
Máster en seguridad TIC
Pablo Gallardo Hiraldo
Máster en seguridad TIC (2018/2019)
EJERCICIO1: Compruebe el resultado que se obtiene cuando se llama
directamente a ./deseos-alt y se le pasa los mismos caracteres de entrada.
EJERCICIO2: el script runbin.sh tiene el siguiente código: while read -r line; do
echo -e $line; done | ./deseos-alt explique el funcionamiento de esta línea.
EJERCICIO3: Realice un resumen de cómo funciona la aplicación: qué se hace en
la función principal del programa, que hace cada una de las funciones que están
definidas en el programa, cuando son llamadas cada una de ellas. Describa
también los diferentes punteros que se definen en el programa y qué utilidad
tienen dentro de la aplicación.
EJERCICIO4: En el programa hay una overflow de la pila. ¿Cuál es el nombre de
la variable que referencia el buffer afectado?
EJERCICIO5: Considere el buffer que ha identificado en el ejercicio anterior. ¿Cuál
es la línea de código que puede provocar el desbordamiento del buffer?.
EJERCICIO6: Hay otra vulnerabilidad, no relacionada con la anterior, que afecta
a una tabla, que no está en la pila, y que se puede indexar fuera de sus límites
(lo cual, entendiéndolo en sentido amplio, es una clase de buffer overflow). ¿Qué
variable contiene esta tabla o buffer?.
EJERCICIO7: Considere el buffer que acaba de identificar. ¿qué línea de código
puede provocar ese desbordamiento del buffer?.
EJERCICIO8: Determine la dirección de los siguientes elementos (la dirección que
ocupan en memoria, no el valor que contienen) que se definen en el programa
2
Máster en seguridad TIC (2018/2019)
(muestra las direcciones en hexadecimal): 1. buf 2. ptrs 3. write_secret 4. p (la
variable local definida dentro del main)
EJERCICIO9: ¿Qué entrada debemos proporcionar al programa de forma que
prtr[s] lea (y entonces intente ejecutar) el contenido de la variable local p en vez
del puntero a función almacenado en el buffer apuntado por ptrs? Puede
determinar la respuesta realizando una pequeña operación matemática con las
direcciones que ha obtenido en el ejercicio anterior (tenga cuidado que tiene en
cuenta el tamaño del puntero cuando haga la aritmética de punteros). Si lo
calcula correctamente, terminará ejecutando la función pat_on_back. Dé la
respuesta como un entero sin signo.
EJERCICIO10: ¿Qué valor debemos escribir de forma que prts[s] lea (e intente
ejecutar) comenzando desde el byte número 65 en buf, esto es buf[64]?
Responda a la cuestión suministrando un valor entero.
EJERCICIO11: La cadena que nos vas a permitir explotar la vulnerabilidad de
inyección de código comentada anteriormente tendrá la siguiente forma:
NUMEJER10\x00CARACTERESDERELLENO\xEE\xEE\xEE\xEE Donde:
- NUMEJER10: el valor entero determinado en el Ejercicio10. -
CARACTERESDERELLENO: cualquier cadena de caracteres que va a actuar de
relleno para llegar hasta la posición 65 de buf.
- \xEE\xEE\xEE\xEE: la dirección de la función a la que queremos saltar (en el
caso de este ejercicio la función write_secret). Tener en cuenta que la
codificación de la dirección debe ser Little endian.
EJERCICIO12: ¿Cuántos bytes necesitas introducir antes de introducir la dirección
de la función write_secret?
EJERCICIO13: Modifique el programa de forma que las vulnerabilidades que
hemos explotado se solucionen. Para ello utilice las funciones seguros que se han
visto en la introducción teórica. A continuación verifique que todas las
3
Máster en seguridad TIC (2018/2019)
operaciones que hemos realizado con anterioridad ya no conllevan ningún
problema de seguridad.