1. 문제 의도 파악하기
버퍼 s에 입력을 받은 뒤, snprintf 함수를 통해 format에 s를 저장한다.
그런데 이때, 서식지정자를 지정하지 않고 바로 s를 저장하기에 FSB 취약점이 발생한다.
그렇다면 이걸로 뭘 할 수 있을까?
바로 FSB 취약점을 이용해 특정 메모리 주소에 뭔가를 쓰거나 읽을 수 있다.
그리고 우리의 목표는 아마 flag 함수를 실행 시키는 것이다.
따라서 FSB를 이용해 특정 메모리 주소에 flag 함수 주소를 overwrite 시켜 flag 함수를 실행시키면 될 것이다.
이때 snprintf 함수 다음에 printf가 실행된다.
그래서 printf_got에 "%n"을 이용하여 flag 함수 주소를 overwrite 시키면 될 것이다.
그렇다면 우선 입력값이 몇번째 포맷 스트링에 의해 참조되는지 확인해봐야할 것이다.
실행 결과 입력값이 두번째 포맷 스트링에 의해 참조되는 것을 확인하였다.
따라서 payload를 짜보면 다음과 같을 것이다.
payload = printf_got의 주소 + "%(flag주소-4)c" + "%n"
2. payload 작성하기
위의 논리대로 payload를 작성해보았다.
성공적으로 flag를 획득하였다!! 야 호!
여기까지 FSB 취약점과 GOT overwrite를 이용한 문제였다!
'Wargame > HackCTF' 카테고리의 다른 글
[HackCTF] RTL_World (0) | 2021.03.20 |
---|---|
[HackCTF] x64 Simple_size_BOF (0) | 2021.03.19 |
[HackCTF] Basic_Bof #2 (0) | 2021.03.19 |
[HackCTF] Basic_Bof - Simple_Overflow_ver_2 (0) | 2021.03.13 |
[HackCTF] Basic_Bof - 내 버퍼가 흘러넘친다!!! (0) | 2021.03.11 |