TeamH4C_ProjectH4C/워게임

[TeamH4C_FTZ] Level1 ~ Level5

P4P3R_H 2021. 3. 28. 12:30

이번에는 해커스쿨에서 배포하는 워게임인 FTZ를 이어서 보도록 하겠습니다.

Trainer10까지 모두 풀게 되면 level 1에 대한 로그인 정보를 얻을 수 있습니다.

level 1 비밀번호를 얻었으므로 level 1에 접속하여 문제를 확인하도록 하겠습니다.

 

Level 1

level 1에 접속하여 현재 디렉터리에 있는 파일들을 확인해보도록 하겠습니다.

ls명령으로 파일들을 확인하여 보면 hint라는 파일이 보입니다. 문제의 hint로 보이기에 cat명령으로 확인하여 보면 setuid가 걸려있는 파일이 존재하여 이용하는 문제로 확인이 됩니다.

setuid파일이 설정되어 있는 파일을 찾기 위해서는 find명령 옵션에서 perm옵션을 사용하여 찾을 수 있습니다. perm옵션을 이용하여 level 2가 소유자로 되어있는 권한이 풀려있는 setuid파일을 찾아보면 /bin/ExcuteMe라는 파일을 찾을 수 있습니다.

 

찾은 setuid파일을 위처럼 실행시키면 level 2 권한으로 명령어를 한 번 실행시킬 수 있도록 나와있습니다.

비밀번호가 출력되는 my-pass를 실행시킬 수 없고, 한 번의 명령만 실행 가능하기에 계속 쉘을 유지시키기 위해 쉘에 관련된 명령을 실행시켜 줍니다.

 

쉘을 유지를 시켰기에 level 2 권한 안에 있는 my-pass를 실행하여 level 2의 비밀번호를 확인할 수 있습니다.

 

Level 2

얻은 비밀번호를 통해 level 2에 접속하여 hint파일을 확인하면 "텍스트 파일 편집 중 쉘의 명령을 실행할 수 있습니다."라고 되어 있습니다.

그렇기에 일단 level 3의 권한을 가진 파일을 찾아보도록 하겠습니다.

 

level 3의 권한을 가진 파일은 /usr/bin/editor이라는 것을 확인할 수 있었습니다.

해당 파일을 실행하여보도록 하겠습니다.

 

해당 파일을 확인하여 보면 Vim의 설명이 텍스트 편집기로 열리는 것을 확인할 수 있습니다.

힌트에서 편집 중 쉘의 명령을 실행할 수 있다 하였기에 텍스트 편집기에 사용 가능한 명령어 모드(:)로 전환을 합니다.

명령 모드에서 쉘을 실행시키면 되는데 편집기에서 리눅스 명령을 실행시킬 때는 느낌표(!)를 앞에 붙여주면 되기에 앞에 느낌표를 붙여 쉘을 실행시키도록 합니다.

쉘이 정상적으로 실행되면 my-pass를 통해 level 3의 비밀번호를 확인합니다.

 

Level 3

level 3에 접속하여 힌트를 확인하면 하나의 코드가 보입니다. 이 코드를 먼저 참고해둡니다.

 

level 4에 대한 권한을 가지고 있는 파일을 확인하여보면 /bin/autodig라는 파일을 확인할 수 있습니다.

이 파일을 실행시켜보면 아까 봤던 코드에서 if문 안으로 들어가 종료되는 것을 확인할 수 있습니다.

 

다시 코드를 살펴보면 argc가 2일 때 if문을 실행하지 않고 cmd에 입력한 값을 활용하여 시스템 함수를 실행하기에 system함수에 들어갈 명령을 인자로 주어봅니다.

level 4 권한으로 쉘을 실행하기 위해 /bin/bash를 문자열 형태의 인자로 주어 보면 명령이 실패하는 것을 볼 수 있고, 다른 명령도 마찬가지입니다.

그렇기에 명령어를 한 줄에 작성하여도 실행되도록 이어주는 세미콜론(;)을 이용하여 쉘에서 my-pass라는 명령을 수행한 형태로 입력값을 넣어봅니다.

 

Level 4

level 4에 접속하여 힌트를 확인하면 이번에는 백도어가 /etc/xinetd.d/ 디렉터리에 심어져 있다 합니다.

그렇기에 해당 디렉터리로 이동하여 backdoor을 cat명령으로 확인해봅니다. 확인하였을 때 /home/level4/tmp/backdoor이라는 파일을 확인할 수 있으며 finger 서비스를 이용한다는 것을 알 수 있습니다.

 

확인을 해보면 파일이 없다는 것을 알 수 있고 쉘을 실행시킬 수 있는 코드를 작성하여 직접 만들도록 합니다.

직접 만든 코드를 컴파일을 하여 해당 파일을 생성되도록 하고 finger 서비스를 실행시킵니다.

 

쉘을 실행시키는 코드는 안 되는 것을 확인할 수 있기에 코드를 다시 수정하도록 합니다.

코드의 내용은 my-pass로 변경하여 level 5의 비밀번호를 알아내도록 하는 코드입니다.

 

Level 5

level 5의 힌트를 보면 특정 파일을 실행하면 임시파일이 생성되고 이를 이용하여 권한을 획득하는 문제입니다.

 

해당 파일을 ls명령으로 자세히 출력하면 level 6이 소유자로 setuid가 설정되어 있는 것을 확인할 수 있습니다.

실행을 시킨 후 힌트에 나왔던 것과 같이 tmp디렉터리에 이동하여 임시파일이 생성되었는지 확인하여 봅니다. 확인하였는데 해당 임시파일은 안 보이는 것으로 보아 만들어지고 바로 삭제되는 것이라 유추할 수 있습니다.

 

그렇기에 직접 해당 임시파일을 생성한 후 다시 실행파일을 실행시켜보면 생성한 파일에 level 6의 비밀번호가 출력되는 것을 볼 수 있습니다.

만약에 제가 만든 파일도 삭제될 시에는 심볼릭 링크를 이용하여 풀어보면 될 것 같습니다.

 

이상으로 level1부터 level5까지 풀이를 진행하였습니다.

개강으로 인하여 요즘 많은 문제를 풀어보지 못하고 있기에 안정화가 된 후 더 많은 문제를 풀어보도록 하겠습니다.

감사합니다.