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.

Vemos que hay una comparativa, donde menciona que si ebx es menos a 0x1 (jump if less o igual), lo que significa que saltará a una instrucción diferente si la cantidad es diferente a 1, eso significa que es argc, ya que por consiguiente se limpia un espacio de memoria con memset, seguido se hace uso de strncpy, y habre un bufer de 0x108 (264), si quitamos ret y ebp serían 256 bytes, los que abarca el buffer establecido, lo mete a la pila e invoca a una función.


Vemos que hay una comparativa y un puntero hacia unos datos o variables eax:ds0x8049868, veamos cual es .


Perfecto, si contnuamos la instrucción vemos que eax se queda en cero, pero vamos a cambiarlo para ver que pasa.



Bien, pero ahora hagamoslo en ejecución, mandemos formatos al azar.

Ok, recibimos unos hexadecimales, colocando otros pero con un punto solo para separar cadenas y no confundirnos, veamos que pasa.

Hagamoslo con más.


Bien nuevamente, al colocar AAAA's para buscar el overflow encontramos lo que buscabamos, si lo que pide es la variable changeme, pues mandemoslo ahí, la variable no esta definida desde el inicio, lo que significa que no vale cero, vamos a colocarlo en la zona de las AAAA's.


Listo.
Solo como dato curioso, sí ponemos un break justo en la variable, también se logra en modo debugger xD.



