-Level1-
level1 / level1으로 접속한 후 ls 명령어를 통해 해당 디렉토리를 탐색하면 hint 파일이 있다. 이를 cat 명령어로 확인하면 level2 권한에 setuid가 걸린 파일을 찾는다. 라는 문구를 출력해준다.
level2 권한에 setuid를 찾는 것이 목적이므로 ftz training에서 배웠던 find 명령어를 쓰면 될 것 같다.
find <위치> -user <사용자 명> -perm <권한> 형식으로 find 명령어를 사용해서 level2 권한에 setuid가 걸린 파일을 찾았다.(참고 : rapperwoo.tistory.com/64) 최상위 디렉토리부터 찾아야하므로 위치에는 /를 써줬고 사용자 명은 level2를 써줬다. 권한의 경우 setuid는 4000 이상이기 때문에 +4000을 써줬다.
/bin/ExcuteMe를 find 명령어로 찾았다.
이를 실행시키니 level 2의 권한으로 원하는 명령어를 한 가지 실행시켜준다 한다. 단 my-pass, chmod는 제외라 나와있는데 여기서 my-pass는 자신의 비밀번호를 볼 수 있는 ftz에서의 명령어다.
my-pass 명령어는 사용이 불가능하다고 하니 level2 쉘을 얻기 위해 /bin/bash 명령어를 써줬다.
level2 권한의 쉘을 얻은 후 my-pass 명령어로 level2 password를 알아냈다.
level2 password : hacker or cracker
-Level2-
level2로 접속 후 힌트를 확인해 보니 텍스트 파일 편집 중 쉘의 명령을 실행시킬 수 있다는데.. 라는 문장이 출력됐다. 아마도 텍스트 편집기에서 :를 누른 후 !<명령어>를 치면 쉘 명령이 작동되는 것을 말하는 것 같다.
일단 level2 권한의 쉘은 소용 없으니 level3 setuid가 걸린 텍스트 파일이 존재하다는 가정하에 find 명령어를 사용했다.
/usr/bin/editor 파일을 찾았다.
/usr/bin/editor를 입력하니 텍스트 에디터가 떳다. 위에 적은 가정같이 !<명령어>로 level3의 쉘을 얻는 것 같다.
:를 누르고 !/bin/bash를 입력했다.
얻은 level3 권한의 쉘로 my-pass를 입력해서 level3의 password를 얻었다.
level3 password : can you fly?
-Level3-
위에서 얻은 비밀번호로 로그인 후 hint를 확인해봤다. autodig라는 프로그램의 소스가 주어져있고 more hint가 주어져 있다. 이 autodig라는 프로그램은 "dig @argv[1](인자) version.bind chaos txt"라는 문자열을 system 함수로 명령을 실행시키는 동작을 한다.
일단 이 autodig 프로그램도 setuid가 level4로 걸려있을 것 같아서 level1, 2와 똑같이 find 명령어로 찾았다.
/bin/autodig로 autodig를 실행해보니 인자와 함께 쓰라는 문구가 나온다.
일단 dig @<입력 값> version.bind chaos txt이 실행되므로 my-pass를 입력해봤다.
이렇게하니 dig @mypass version.bind chaos txt가 실행되서 level4의 password를 획득할 수 없었다. 앞서 본 more hint를 생각해보니 여러 명령어를 |, ; 등으로 연결해서 사용하면 될 것 같다는 생각이 들었다.(참고 : jhnyang.tistory.com/66)
첫 명령어는 어쩌피 dig와 연결되서 제대로 실행되지 않기 때문에 더미 값을 주고 두 번째 명령어에 my-pass를 넣어주면 될 것 같다.
더미 값인 a + |(파이프) + my-pass를 입력하니 level4 권한이 아닌 level3 권한으로 실행된 my-pass 결과가 출력됐다. my-pass가 인자로서 들어간게 아닌 /bin/autodig a 명령어 따로, my-pass 명령어 따로 실행된 것 같다.
그래서 둘을 모두 인자로 보내주기 위해 " "로 감싸주고 사용하니 password를 얻을 수 있었다.
level4 password : suck my brain
-Level4-
위에서 얻은 비밀번호로 로그인 후 hint를 확인해봤다.
hint에는 /etc/xinetd.d에 백도어를 심어놨다고 적혀있다.
그래서 /etc/xinetd.d 명령어를 입력해봤지만 디렉터리라는 문구가 나와서 cd 명령어로 해당 위치로 이동해봤다.
ls 명령어를 사용하니 backdoor가 존재하는 것을 알 수 있다.
실행을 시키는건가 생각이 들어서 실행해봤지만 권한이 없다는 오류가 떳다. 그래서 cat 명령어로 확인해봤다.
뭔진 모르겠지만 server 부분에 /home/level4/tmp/backdoor 경로가 적혀 있는 것을 확인했고 또한 user가 level5인 것도 알게됐다. level5 권한으로 /home/level4/tmp의 backdoor를 실행해주는 것다고 생각이들어 다시 /home/level4/tmp로 이동했다.
하지만 해당 위치에는 아무 파일도 존재하지 않았다. 대충 흐름을 보니 저 etc의 backdoor가 /home/level4/tmp를 실행해주는 거니 이 위치에 backdoor라는 이름의 파일을 만들어야겠다는 생각이 들어서 c언어 코드로 my-pass를 실행시키는 코드를 짜고 gcc를 통해 빌드했다.
하지만 backdoor 프로그램을 만들어도 아무일도 일어나지 않았다. 혹시 backdoor라는 폴더를 만들고 그안에 프로그램을 넣어야하나 라는 생각도 들어서 mkdir로 생성해보기도 하고, 이 프로그램만 딱 존재해야하는 건가 싶어서 rm으로 c파일도 지웠지만 도저히 모르겠어서 write up을 봤다.(참고 : taeminimini.tistory.com/373)
write up을 보니 맞게 풀었지만 딱 한 명령어를 안써줘서 level5의 비밀번호를 얻지 못하는 거였다.
그 마법의 명령어는 다음과 같다.
finger @localhost
이 명령어는 리눅스에서 사용자의 계정정보를 확인하는 명령어인데, 자세히는 모르겠지만 이 명령어를 입력하면 백도어가 작동이 되는 것 같다.
level5 password : what is your name?
-level5-
위에서 얻은 비밀번호로 로그인 후 hint를 확인해봤다.
/usr/bin/level5 프로그램은 /tmp 디렉토리에 level5.tmp라는 이름의 임시파일을 생성해준다고 한다.
이 대목을 봤을 때 떠오르는 공격이 있었다. race condition이라는 공격인데 이 공격이 임시 파일을 심볼릭 링크를 거는 식으로 진행된다.
/tmp 폴더로 이동하고 /usr/bin/level5 파일을 실행시켰지만 아무런 반응도 없었다.
앞서 말했듯이 race condition 공격과 똑같은 상황이다. 보통 프로그램은 임시 파일을 생성한 뒤에 다 사용한 뒤 삭제하기 때문에 임시 파일을 확보하기 힘들다. 이 때 사용하는 것이 심볼릭 링크인데 이를 사용하면 임시 파일이 생성됨과 동시에 파일 내용을 확보나 변조할 수 있다.
심볼릭 링크는 ln -s <복사될 파일 이름> <해당 파일 이름>으로 사용하면 해당 파일이 생성될 때 다른 파일으로 내용이 복사된다. 이를 이용해 보겠다.
실수를 했다. 심볼릭 링크를 걸어도 걸린 파일의 권한이 level5.tmp 권한(level6)과 같게되므로 심볼릭 링크를 걸어서 내용을 복사해도 열어볼 수 없다.
따라서 touch 명령어로 미리 level5 권한으로 된 파일을 생성하고 그 파일을 ln -s에 사용하면 된다.
참고로 이미 생성한 심볼릭 링크는 rm -f로 삭제할 수 있다.
level6 password : what the hell
'Wargame > FTZ' 카테고리의 다른 글
[FTZ] Level 11 (0) | 2021.05.28 |
---|---|
[FTZ] Level 10 (0) | 2021.05.28 |
[FTZ] Level 9 (0) | 2021.05.10 |
[FTZ] Level 6 ~ Level 8 (0) | 2021.03.28 |
FTZ Training (1) | 2021.03.10 |