Solución Ejercicio 3

s1kr10s me ha propuesto que solucionemos el Ejercicio 3 publicado en el Twitter de Ricardo Narvaja:

Analizando el main, es posible visualizar que se esperan tres argumentos:

nombre_app.exe argumento_1 argumento_2

Si continuamos analizando, se repite un bucle 20 veces en donde cada iteración llama a la función malloc() con un tamaño de 40 bytes, luego se procede a copiar por medio de la función strncpy() el contenido del argumento 2 en las direcciones de memoria creadas y finalmente se imprimen en pantalla:

Una vez culminado el bucle, el programa transforma el argumento uno en entero por medio de la función atoi(), carga la dll Mypepe.dll y finalmente llama a la función sub_401010 la cual se encarga de copiar el contenido del argumento 2 en un buffer local (buffer_7) de 28 bytes, por lo tanto si el argumento 2 excede el tamaño de buffer_7 es posible desbordar la pila:

A modo de ejemplo introducimos los siguientes parámetros:

Por lo cual, deberíamos sobre-escribir el buffer a partir de ‘2222’:

Condiciones necesarias para desarrollar un exploit funcional y genérico:

  • ESI apunta a una zona de memoria en donde se encuentra el buffer de los argumentos (sin el límite de 40 bytes del segundo argumento), por lo cual deberíamos incrementar ESI para que apunte al inicio de nuestra shellcode o cadena de ROP Gadgets.
  • p_Malloc debe apuntar a una dirección en donde se encuentre un valor null, debido a que es usado como parámetro para la llamada a la función printf().
  • Se deben usar ROP Gadgets de la dll Mypepe.dll debido a que no posee ASLR.
Prueba de concepto (PoC)

El siguiente script genera un archivo con los parámetros necesarios para ejecutar la calculadora de Windows:

Resultado

Compartir

Agregar un comentario