홍ㅎ항ㅎ항항

 

오프셋 관련 문제인 것 같다. IDA로 코드를 확인해보자.

 

print_flag 함수가 존재한다. 이 함수와 select_func()를 활용하면 될 것 같다.

 

먼저, select_func 함수를 잘 보자.

 

[스택구조]

dest[42byte]  |  ???  |  v3[12byte]  |  ???  |  SFP[4byte]  |  RET[4byte]

 

이렇게 구성되어 있다. strncpy 함수를 보면 src의 31byte만큼 dest에 복사를 한다.

 

42 - 12 = 30 이다. 1byte만큼 더 복사를 할 수 있다.

 

v3에 1byte만큼 덮어씌는 것이 가능해진다.

 

그렇다면 이 1byte를 이용해서 v3를 print_flag주소로 바꿔야한다.

 

먼저, two함수의 주소와 print_flag함수의 주소를 알아보자.

 

two = 0x000006ad  -->  \xad\x06\x00\x00

 

print_flag = 0x000006d8  -->  \xd8\x06\x00\x00

 

코드를 봤을 때 아무거나 입력하면 기본적으로 two함수의 주소가 저장된다.

 

two 함수 주소에 앞부분 1byte만 \xd8로 덮어 씌우면 될 것 같다.

 

익스를 작성해보자.

 

성공적으로 익스가 됐다.

 

플래그는 HackCTF{76155655017129668567067265451379677609132507783606} 이다.

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

HackCTF - yes_or_no [150]  (0) 2021.03.30
HackCTF - BOF_PIE [150]  (0) 2021.01.19
HackCTF - Simple_Overflow_ver_2 [150]  (0) 2021.01.19
HackCTF - x64 Simple_size_BOF [150]  (0) 2021.01.17
HackCTF - x64 Buffer Overflow [150]  (0) 2021.01.13

+ Recent posts