홍ㅎ항ㅎ항항
오프셋 관련 문제인 것 같다. 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 |