Principe:
Débugger un exécutable pour trouver quelle entrée nous donnera un shell, et l'exploiter pour lire le flag
Le challenge
edb
Dans edb, il vous faudra utiliser F8 pour avancer lorsque le programme se lance ("next instruction"). Si vous utilisez F9 ("Continue") alors l'exécution avancera jusqu'au fgets, attendra votre entrée, la lira et continuera immédiatement jusqu'au return, dépassant les deux cmp et vous louperez l'information essentielle.
Donc, favorisez le plus possible les "Step into" (utile en cas de call) et les step out si vous êtes déjà dans une lib.
Ces valeurs m'ont fait marrer: Café bébé et Dead Beef! Ce sont d'ailleurs des valeurs qu'on retrouve dans des exemples sur internet
Script et exploit
On voit alors que le programme nous ouvre un /bin/bash (un shell) qu'on pourra exploiter pour lire le flag
J'ai toujours galéré à livrer mes payloads pour les exploitations de binaires, car le shell se referme immédiatement généralement. Le pattern {cat payload.dat;cat} semble bien marcher pour éviter cela