El objetivo de la prueba es sobreescribir parte de la memoria (stack), en este caso, la variable buffer puede sobreescribirse pasando la cantidad de bytes permitidos.



Utilizamos GDB para debuggearlo, podemos intentar entender como funciona y si es explotable



Podemos observar varios detalles interesantes





Nuevamente hay puts que tienen cadena de caracteres, hay dos interesantes, (0x8048670) que es el objetivo y (0x80486b4) donde nos muestra un mensaje pidiendo hexadecimales (0x496c5962), eso significa que si lo igualamos podríamos lograr el objetivo.




También podemos obervar que para llegar a esa dirección, esta vez hay un strcpy que copia bytes de argv, y repite el proceso donde mete eax = 0x0... lo que significa la misma respuesta negativa 1 != 0





¿Y qué pasa si modificamos a eax antes de que haga la comparación pero esta vez le colocamos los hexadecimales anteriores (0x496c5962).





Bueno, llevemoslo a la práctica.

Nuevamente si observan, en la base (EBP) se encuentra [ebp-0xc], 0x0 y luego se encuentra un lea eax,[ebp-0x4c] que es un espacio, entonces 0x4c - 0xc = 40hex o (64 decimal).

eso significa que con 64 bytes más el hexadecimal logramos el objetivo, ya que al final se sobreescribe ese eax=0 por eax=0x496c5962, veamos.




Listo.