profile image

L o a d i n g . . .

article thumbnail image
Published 2021. 4. 16. 17:10

1. 문제

문제 파일을 실행한 모습이다.

 

문제에 걸린 보호기법

NX 만이 걸려있다.

 

 

ida를 통해 까본 모습이다.

1. puts(s) : ******** 까지 출력

2. get_poem : enter -> 입력

3. get_author : 저자는 누구냐고 함 -> 입력

 

4. rate_poem : get_poem 에서 입력한 값에 따라 6024E0에 100 씩 더함

5. 6024E0 이 100000이면  반복문을 탈출함.

6. 반복문을 탈출하면 reward 함수가 실행됌.

 

 

reward 함수 모습

우리의 목표는 reward 함수를 실행하는 것!

어떻게? 6024E0(bss 영역) 을 100000으로 만들기

 

 

2. 문제 해결 과정

get_poem() 함수

get_poem() 에서 gets 를 입력받을 때 bof 가 발생

이를 이용해 값을 바꾸려고 했는데, 입력을 받은 뒤 6024E0을 초기화함 -> 안될 듯

 

get_author() 함수

get_author() 함수 역시 gets() 에서 bof 가 발생

입력을 받는 6024A0 역시 bss 영역 -> 이를 이용하면 될 것 같다.

 

 

6024A0(bss 영역)

 

6024E0(bss 영역)

-> offset : 64

즉, get_author() 에서 gets() 입력 시 bof 를 통해 6024E0 값을 1000000으로 바꿔주면 될 듯함.

 

따라서 페이로드는 다음과 같을 것이다.

"A"*64 + 1000000

 

 

3. 익스플로잇

페이로드를 위와 같은 논리대로 짜보았다.

첫번째 입력에서는 아무거나 보내주고, 두번째 입력에서 페이로드를 보내면 된다.

 

 

성공적으로 플래그를 획득하였다.

 

'Wargame > HackCTF' 카테고리의 다른 글

[HackCTF] 1996  (0) 2021.04.18
[HackCTF] Yes or no  (1) 2021.04.16
[HackCTF] BOF_FIE  (0) 2021.04.15
[HackCTF] Offset  (0) 2021.04.15
[HackCTF] RTL_Core  (0) 2021.03.31
복사했습니다!