FTZ level5
FTZ LEVEL 5
※ FTZ 구축하는 방법은 구글링하시면 쉽게 찾으실 수 있습니다.
※ 개인적인 문제풀이로 해답을 보시기 전에 직접 풀어보시기를 권해드립니다.
※ 악용으로 인하여 발생되는 사고에 대해서는 절대 책임지지 않습니다. 반드시 숙련용으로 제공된 환경에서만 사용해보시기 바랍니다.
ID : level5
PW : what is your name?
level5의 hint를 살펴보면 level5이라는 명령어는 /tmp 디렉토리에 level5.tmp라는 이름의 임시파일을 생성한다고 합니다.
level5 명령어는 어떤 권한으로 실행되는지 확인해 볼 필요가 있습니다.
역시 level6의 권한으로 level5 명령어가 실행되는 모습을 볼 수 있습니다.
임시파일을 이용하여 level5를 풀 수 있는 방법을 생각해 봅니다.
이미 잘 알려진 방법으로 떠오르는 방법이 하나 있네요.
심볼릭링크를 활용
심볼릭링크란?
윈도우즈에서 바로가기와 비슷한 개념입니다.
원본파일에 대한 심볼릭링크를 생성하면 심볼릭링크는 그 파일을 가리키는 것입니다.
그런데 여기서 중요한 것은 이 심볼릭링크 파일에 수정을 가한다면 원본파일도 수정이 된다는 것입니다.
이 문제의 경우 level5 명령어는 level6 권한의 setuid가 설정되어 있습니다.
이 명령어는 /tmp 디렉토리 안에 level6 권한으로 level5.tmp 파일을 생성 후 삭제합니다.
우리는 생성될 임시파일의 이름을 hint에서 제공하여 알고 있습니다. 그렇다면 level5 명령어가 임시파일을 생성하기 전에 이미 같은 이름의 파일이 존재하고, 그 파일에 실행되길 원하는 명령어가 담겨있는 실행파일을 심볼릭링크로 연결시킨다면?
임시파일에 원하는 명령어의 출력결과가 덮어씌어질 것입니다.
하지만 level5 코드중 같은 이름의 파일이 이미 존재하면 삭제 후 생성한다는 코드가 있으면 임시파일을 확인하기도 전에 삭제되겠지만 한번 확인해볼 필요가 있겠죠!
먼저 우리가 필요한 명령어는 my-pass 이므로 my-pass를 실행시켜주는 실행파일을 작성합니다.
backdoor.c 라는 이름으로 위와 같은 스크립트를 짠 후 gcc를 이용해 컴파일해 줍니다.
그리고 컴파일 한 backdoor 실행파일에 대한 생성될 임시파일 level5.tmp 이름으로 심볼릭 링크로 연결합니다.
#> ln -s backdoor level5.tmp
ll(ls -l) 명령어를 이용하여 심볼릭링크가 잘 연결되어 있는지 확인합니다.
하늘색 이름의 파일이 심볼릭링크 파일입니다.
그리고 level5 명령어를 실행해줍니다.
그리고 level5.tmp 파일의 내용을 확인해 보면 저희가 원하는 결과가 입력되어 있는 것을 알 수 있습니다.
next level password : what the hell
레이스컨디션
두 개 이상의 프로세스들이 공통된 내용을 가지고 서로 다른 목적으로 경쟁하는 상황
만약, 위에서 설명한 것 처럼 이러한 심볼릭 링크의 악용을 대비하려고 임시파일 생성시 같은 이름의 파일이 이미 존재하면 삭제 후 생성한다는 코드가 있다면 그 내용을 확인하기가 힘듭니다. 하지만 이를 또 우회할 수 있는 기법이 있는데 그것이 "레이스컨디션" 기법입니다.
한층 강화된 코드의 실행순서를 살펴보면
① 프로그램 실행
② 생성할 임시파일과 같은 이름의 파일이 존재하는지 확인
③ 같은 이름의 파일이 있으면 삭제
④ 임시파일을 생성
이렇게 되는데 3번과 4번 사이의 간격을 노린 기법이 레이스컨디션 기법입니다.
임시파일을 생성하는 프로그램을 여러번 반복실행하도록 하는 프로그램과 심볼릭링크를 반복해서 거는 프로그램을 작성합니다. 이 두개의 프로그램을 동시에 실행하면, 프로그램들이 실행되는 시간의 차이가 있을테고 ③번과 ④번사이에 심볼릭링크를 거는 때가 있을 것입니다.
이렇게 하나의 프로그램은 계속해서 심볼릭링크를 삭제하고, 다른 프로그램은 계속해서 심볼릭링크를 생성하고 두 프로그램은 서로 경쟁하고 있는 모습이 됩니다. 이러한 경쟁하고 있는 상태를 레이스컨디션이라고 합니다.
'War Game > ftz' 카테고리의 다른 글
FTZ level7 (0) | 2017.02.23 |
---|---|
FTZ level6 (0) | 2017.02.21 |
FTZ level4 (0) | 2017.02.15 |
FTZ level3 (0) | 2017.02.14 |
FTZ level2 (0) | 2017.02.10 |