HackerSchool FTZ 개요 및 Level 1 Write-Up

HackerSchool FTZ 개요 및 Level 1 Write-Up

in

최근 지인분의 소개로 시스템 해킹 스터디 그룹에 들어갔는데, 알려진 시스템 해킹 교육 플랫폼들을 로드맵 형식으로 차례대로 클리어 하면서, 매주 클리어한 스테이지를 발표하는 형식으로 진행 된다고 하더군요.

스터디 그룹내에는 초보자분도 계셨기 때문에 HackerSchoolFTZ 가 첫 플랫폼으로 결정된 것 같습니다.

HackerSchoolFTZ 는 시스템 해킹을 해보신 분들이라면 한번쯤 들어봤을법한 오래된 해킹 교육 플랫폼이고, 저역시 오래전에 풀어본 기억이 있지만 기록을 안했던 터라 기록의 중요성을 다시금 느끼면서 문제풀이 기록을 하려고 합니다. 남는것은 결국 기록 이더군요.

어쨋든 클리어 하는대로 문제풀이를 올리려고 합니다.

참고로 FTZ 서버는 구글링을 통해 쉽게 구하실수 있고, root 계정의 id/pw 는 root/hackerschool 입니다.

HackerSchool FTZ 클리어 방식?

차례대로 클리어 하기에 앞서 HackerSchoolFTZ 시스템에 대해서 간략하게 설명드리자면, level1 부터 level20까지의 유저가 존재하며, level1 계정부터 시작해서 한단계 높은 계정으로 로그인 하면서 클리어하는 형식으로 되어 있습니다.

my-pass 명령어로 해당 계정의 패스워드를 확인할 수 있으며, 패스워드를 기록 해놓으면 원하는 level 계정으로 바로 로그인할 수 있습니다.

이번에 풀이할 level1 계정의 비밀번호는 level1 입니다.

Level 1 Write-Up

각 레벨별 홈디렉터리에는 hint 파일이 존재하며 해당 파일을 통해 힌트를 얻을 수 있습니다.

$ pwd && ls

image pwd && ls

힌트 파일을 확인합니다.

$ cat hint

image cat hint

‘level2 권한에 setuid가 걸린 파일을 찾는다.’ 라고 되어 있습니다. setuid의 개념과 find 명령어의 사용법을 알고있으면 쉽게 클리어 할 수 있습니다.

setuid?

setuid가 설정된 파일은 실행하는 순간에만 해당 파일의 소유자 권한으로 실행이 가능합니다.
즉, setuid가 설정된 파일의 소유자가 root 라면, 해당 파일을 실행하는 시점에서는 root의 권한으로 실행하게 되는 것입니다.

setuid는 root로만 접근할 수 있는 파일이나 명령에 대해, 일반 사용자로 접근해야하는 상황에 사용됩니다. 계정의 패스워드를 변경할때 사용하는 passwd 명령어가 대표적인 예 입니다.

passwd 명령어를 통해 변경된 패스워드는 "/etc/passwd", "/etc/shadow" 등의 파일에 적용되며, 일반적인 환경에서는 일반계정으로 해당 파일에 접근할 수 없습니다.

그러나 우리는 자기 자신의 계정에 대해서는 패스워드를 변경할 수 있는데, setuid가 이를 가능하게 합니다. 만약 passwd 파일에 setuid가 걸려있지 않다면 본인 계정의 비밀번호도 변경할 수 없게 됩니다.

setuid는 8진수 4000, 혹은 기호 u+s를 이용하여 설정할 수 있습니다.

find 명령어를 이용해 setuid가 걸린 파일을 찾습니다. -user 옵션은 해당 파일의 소유주를 지정하는 옵션이고, -perm 옵션은 권한에 따른 조건을 명시하는 옵션입니다.

find -perm option

  • find -perm [mode]: 정확히 같은 권한을 가진 파일을 찾습니다.
  • find -perm -[mode]: 부여한 권한을 모두 만족하는 파일을 찾습니다.
  • find -perm +[mode]: 부여한 권한을 하나라도 만족하는 파일을 찾습니다.
  • find -perm /[mode]: 부여한 권한을 하나라도 만족하는 파일을 찾습니다.

level2 권한의 setuid가 걸린 파일을 /(root)에서부터 찾습니다.
그러나 에러 출력때문에 보기가 굉장히 불편합니다.

$ find / -user level2 -perm -4000

image find / -user level2 -perm -4000

stderr을 /dev/null로 보내줍니다.

$ find / -user level2 -perm -4000 2>/dev/null

image find / -user level2 -perm -4000 2>/dev/null

소유주가 level2인 setuid가 걸린 파일 ‘/bin/ExecuteMe’ 파일을 찾았습니다.
/bin/ExecuteMe’ 파일을 실행시키면 level2의 권한으로 원하는 명령어를 한가지 실행 가능합니다.

$ /bin/ExecuteMe

image /bin/ExecuteMe

bash를 실행시키면 level2 유저로 쉘을 실행시키게 됩니다.

$ /bin/ExecuteMe
		레벨2의 권한으로 당신이 원하는 명령어를
		한가지 실행시켜 드리겠습니다.
		(단, my-pass 와 chmod는 제외)

		어떤 명령을 실행시키겠습니까?


		[level2@ftz level2]$ bash

[level2]$ id

image run bash

my-pass 명령어로 level2 계정의 비밀번호를 확인합니다.

[level2]$ my-pass

image my-pass

최종적으로 hacker or cracker가 level2 계정의 비밀번호인것을 알아냈습니다.
HackerSchool FTZ level 1을 클리어 했습니다.