티스토리 뷰

728x90
반응형

 

 

 

 

[level1@ftz level1]$ cat hint


level2 권한에 setuid가 걸린 파일을 찾는다.

우선 힌트는 위와 같습니다.

 

level1에서는 이후 다른 level의 문제를 풀 때 유용하게 쓰일 명령어를 학습시킵니다.

바로 find 명령어입니다.

 

아래는 find 명령어로 level2 권한에 setuid 가 걸린 파일을 찾는 명령 구문입니다.

[level1@ftz level1]$ find / -user level2 -perm -4000 2> /dev/null
/bin/ExecuteMe

find 명령어 매뉴얼

NAME
       find - search for files in a directory hierarchy

SYNOPSIS
       find [path...] [expression]

OPTIONS
       -perm -mode
              All of the permission bits mode are set for the file.
       -perm +mode
              Any of the permission bits mode are set for the file.
       -user uname
              File is owned by user uname (numeric user ID allowed).

우선 위에서 사용한 명령어를 기준으로 매뉴얼의 내용을 수정해보았습니다.

 

find 명령어 바로 다음에 오는 것은 path 로써 어떤 경로로부터 탐색을 시작할 것인지 지정합니다.

그리고 -user 옵션은 어떤 소유자의 파일을 조회할 것인지 사용자 계정을 지정할 수 있게 해줍니다.

그리고 -perm 옵션은 파일의 권한을 세부적으로 필터링해서 검색하게 해줍니다.

 

-perm 옵션의 -/+mode는 어떤 역할을 하나요?

-perm 의 경우에는 -mode 와 +mode 가 존재는데, -mode 의 경우에는 해당 권한을 전부 가지고 있을 때를 의미합니다.

예를 들어서 -perm -6000 일 경우에는 2000 권한인 set-gid 와 4000 권한인 set-uid 권한을 전부 가지고 있는 파일을 탐색합니다. 반대로 -perm +6000 일 경우에는 2000 권한 또는 4000 권한 중 둘 중에 하나만 포함하고 있는 파일을 탐색하게 해줍니다.

 

2> /dev/null 이 뭔가요?

마지막으로 find 명령어 다음에 오는 2> /dev/null 이라는 것은 리눅스/유닉스 bash shell 문법 중 redirection 이라는 것입니다. 표준입출력 중에는 stdin, stdout, stderr 가 존재합니다. 그리고 2 의 경우에는 stderr 에 해당하고, 이번 명령어에서 의미하는 바는, 표준오류로 출력되는 모든 결과들을 /dev/null 즉 출력하지 말게 하는 기능을 의미합니다. /dev/null은 쉽게 생각해서 쓰레기통이라고 생각하면 되겠습니다.

 

다시 돌아와서...

결과적으로 level2 가 소유하고 있는 파일 중에서는 /bin/ExecuteMe 라는 파일이 존재했었습니다.

해당파일이 무슨 파일인지 확인해보겠습니다.

[level1@ftz level1]$ file /bin/ExecuteMe
/bin/ExecuteMe: setuid ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.2.5, dynamically linked (uses shared libs), not stripped

setuid 가 걸려있는 ELF 실행파일임을 알 수 있습니다. 즉 level1 문제는 level2 의 권한으로 실행하는 이 /bin/ExecuteMe 프로그램을 실행시켜서 권한 상승 취약점을 이용해서 level2의 권한으로 명령을 실행하라는 문제인 것을 알 수 있습니다.

 

우선 /bin/ExecuteMe 파일을 실행해보았습니다.

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

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

[level2@ftz level2]$

위와 같이 나오면서 아래 $ 이후에 커서가 존재하며 커서가 깜빡거리면서 사용자의 input을 기다립니다.

이 때 my-pass 를 바로 실행시킬 수는 없으니 bash 쉘을 실행시켜서 다시 my-pass 명령을 실행시키는 등의 방법으로 문제를 푸실 수 있겠습니다.

[level2@ftz level2]$ whoami
level2
[level2@ftz level2]$ my-pass

Level2 Password is "hacker or cracker".

 

728x90
반응형
댓글