profile image

L o a d i n g . . .

article thumbnail image
Published 2021. 3. 19. 21:46

1. 문제 의도 파악하기

함수들을 살펴보니 flag 함수가 존재하였다. 이따 써먹으면 될 듯하다!

 

main 함수의 모습이다.

 

이름부터 취약한 vuln() 함수의 모습이다.

버퍼 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
복사했습니다!