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
TAGS.

Comments