Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Stalin J. Benenaula
Erika P. Serrano
Universidad de Cuenca
Facultad de Ingenierı́a
stalin.benenaula@ucuenca.edu.ec
erika.serrano@ucuenca.edu.ec
Resumen—En este documento se analiza la vulnerabilidad de Ası́ mismo el cliente se conecta mediante udp por el puerto
Format String la cual consiste en hacer uso de funciones como 9090 como se muestra en la siguiente figura.
printf() que en principio generará un problema y lo que que se
pretende es aprovecharlo para crashear el programa, mostrar
mensajes secretos,cambiar datos de la memoria y finalmente
ganarse el root haciendo uso del protocolo udp para la comuni-
cación cliente-servidor.
I. I NTRODUCCI ÓN Figura 2. Cliente Conectándose.
Format String Attack es un ataque cibernético, el cual se
produce cuando los datos enviados a través de una cadena de
entrada de caracteres son evaluados como un comando por II-B. Tarea 2:
la aplicación o servidor al cual van dirigidos. De esta forma,
el atacante podrı́a ejecutar código, leer la pila o causar un Understanding the Layout of the Stack
error de segmentación en la aplicación en ejecución, lo que Es indispensable entender el diseño de la pila (stack) cuando la
provocarı́a nuevos comportamientos que podrı́an comprometer función printf() es invocada dento de myprint(). en la siguiente
la seguridad o la estabilidad del sistema al que van dirigidos. figura se enseña el diseño de la pila.
Los errores de cadena de formato aparecen más comúnmente
cuando un programador desea imprimir una cadena que con-
tiene datos suministrados por el usuario.
En la sección 2 se presenta el desarrollo de la práctica con
la ejecución y análisis de cada proceso y en la sección 3 las
conclusiones.
II. D ESARROLLO
II-A. Tarea 1:
Running and testing the server
Usando los siguientes comandos se corre el servidor y el
cliente.
/ / On t h e s e r v e r VM
$ sudo . / s e r v e r
/ / On t h e c l i e n t VM
$ nc −u 1 0 . 0 . 2 . 5 9090
Al realizar esta tarea se puede visualizar las direcciones de
Figura 3. Stack layout cuando la función printf() es invocada dento de
memoria del mensaje secreto ası́ como de del target(dirección myprint().
a cambiar de valor). El mensaje de prueba entre Cliente y
Servidor fue ”hola”.
Cuáles son las posiciones de memoria en las ubicaciones
marcadas por 1, 2 y 3?
II-C. Tarea 3:
La posición del return address se puede obtener a través Figura 7. Cliente intentando colapsar el servidor.
de gdb en la función myprintf(). Se obtiene la posición
del registro ebp 0xbfffed38, como se muestra en la figura En la figura siguiente se muestra el segmentation fault
siguiente, y se conoce que el return address se ubica 4 producido por el cliente en el lado del servidor.
bytes arriba de éste.
II-D. Tarea 4:
Figura 12. Servidor muestra el mensaje secreto. Se observa que el valor de la variable target después ex
0x000000d5 que corresponde a 213 en decimal.
II-E. Tarea 5: 5.B: Change the value to 0x500 En esta subtarea, se
pretende cambiar el contenido de la variable target a un valor
Change the Server Program’s Memory especı́fico 0x500.
El objetivo de esta tarea es modificar el valor de la variable
de destino (target) que se define en el programa del servidor. El comando del cliente debe nuevamente modificarse para
Su valor original es 0x11223344. que escriba en target un valor especifico. 0x500 corresponde
5.A: Change the value to a different value En esta a 1280 decimal, entonces 1280 − 213 = 1067 (se restan los
subtarea, se pretende cambiar el contenido de la variable 213 caracteres que se escribieron en el punto anterior).
target. La tarea se considera un éxito si se puede cambiarla a Entonces, del lado del cliente:
un valor diferente, independientemente de lo que sea.
Figura 20. Cambio del valor de la variable target a 0xFF990000 (parte 2).
II-F. Tarea 6:
Inject Malicious Code into the Server Program
Figura 18. Cliente.
II-G. Tarea 7:
Getting a Reverse Shell