El objetivo de la prueba es modificar un format string no definido para lograr sobreescribir la pila.



Esta prueba muestra la vulnerabilidad que puede haber en cadenas de caracteres que no estan bien definidas y como se pueden modificar.

Nota importante: Cada vez que hago esto, coloco intrucciones a gdb que creo son muy necesarios, ya que cada que el debugger abre una aplicación, lo hace en un espacio de memoria relativa y al colocarle, unset env LINES y unset env COLUMNS, GDB muestra el uso de memoria real o muy cercano al que usa realmente la aplicación, facilitando la explotación de la vulnerabilidad.

Ejecutamos la aplicación para ver que hace.



Vamos mostrando los push de los printf y encontramos los mensajes de cada uno, y vamos encontrando los de interes.



Revisamos las instrucciones y vemos una comparativa de eax,ds:0x8049844 con 0x64457845, lo que significa que si la variable es 0x64457845, entonces lograremos el objetivo, hagamos la prueba











Ok, pero... ¿cómo sería fuera del debugger?, hay que ver primer de cuanto es el buffer que dice ebp-0x1008, que sería 4100 - ebp - ret = 4096



Perfecto, vamos a llenar el buffer para encontrar la vulnerabilidad del printf de bounce.



Bien, vamos a reemplazar las AAAA's con la dirección de la variable.





Recordar que %n, es un caracter especial, no imprime nada pero si apunta a la cantidad de caracteres a imprimir, incluso a veces algunos compiladores lo descativan por ser inseguro. Pero logramos que sobreescribiera, ahora habrá que analizar como sobreescribir los 4 bytes completos.





Al parecer, si vamos aumentando en la variable, podemos ir pisando más bytes, pero no es posible hacerlo manualmente, sería muy tedioso, useamos un python para hacerlo más rápido.





Vamos modificando los datos del payload hasta lograrlo.









Listo.