프로그램에 PIE 보호기법이 걸려있는 문제인 것 같다. 먼저, PIE에 대해 알아보자.

 

PIE (Position Independent Executable) : 위치 독립 실행파일, 실행할 때마다 매핑되는 주소가 어디든지 상관없이 실행되는 파일로 매핑되는 주소가 매번달라 바이너리의 주소를 랜덤화하여 바이너리의 특정 주소의 값을 수정하는 것과 같은 공격을 방어한다.

 

먼저, 코드를 확인해보자.

 

 

PIE 보호기법에 의해서 함수의 base 주소는 계속 바뀐다.

 

때문에 함수의 offset을 이용하면 될 것 같다.

 

먼저, welcome에서 ret위치를 구해보자.

 

입력받은 위치로부터 22byte에 ret주소가 존재한다.

 

이번엔 welcome과 j0n9hyun 함수의 offset을 구해보자.

 

welcome = 0x909

 

j0n9hyun = 0x890

 

0x909 - 0x890 = 0x79

 

그러면 프로그램을 실행할 때 마다 바뀌는 welcome주소를 가지고 -0x79 하면 j0n9hyun함수의 위치가 된다.

 

익스를 짜보자.

 

성공적으로 익스가 되었다.

 

플래그는 HackCTF{243699563792879976364976468837} 이다.

 

보호기법들에 대해 좀 더 공부가 필요한 것 같다.

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

HackCTF - yes_or_no [150]  (0) 2021.03.30
HackCTF - Offset [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