ls 명령어란? list segments의 약자이며, 파일과 디렉터리의 모든 정보를 제공하며 특정 디렉터리와 특정 파일의 내용을 제공한다. ls 명령어를 사용할 때는 여러 옵션을 사용할 수 있는데, 이 게시글에서는 두 가지만 소개하려고 한다.
1. ls -l l은, long의 줄임말로 파일 출력 형식을 긴 목록 형식으로 출력한다. ls -l 명령어
2. ls -a a는, all의 줄임말로 모든 파일(숨김 파일 및 디렉터리 포함) 형식을 출력한다. -l 옵션과 조합하여 사용할 수 있다. ※ 숨김 파일 및 디렉터리의 경우에는 이름 앞에 .(comma)가 붙는다. ex) a의 숨김 파일 => .a
ls -a 명령어
level1 문제해결
ls 명령어를 알아보는 도중에 어떤 파일이 도움될 지 보였을 것이다.
바로 hint 파일인데, 파일을 읽어보려면 cat 명령어를 사용하여 파일을 읽을 수 있다.
cat hint
cat 명령어란? 파일의 내용을 출력할 때 사용하는 명령어이다. 간단하게 내용만 출력할 때에도 사용하지만, 두 개 이상의 파일을 연결(concatenate)하여 출력할 때에도 사용하는 것이 기본이다. 보통 리다이렉션 기호와 함께 사용하여 파일을 생성하거나 병합할 때에도 사용한다고 하는데, 차차 알아가보도록 하겠다.
아무튼 힌트는 "level2 권한에 setuid가 걸린 파일을 찾는다." 이다.
level2는 다음 문제일 것이고, 파일을 찾는다는 파일을 찾으면 되는데, setuid가 무엇인지 모르겠다.
한 번 알아보도록 하자.
setuid 란? UNIX 시스템에서는 파일에 대한 접근 권한 및 파일의 종류를 나타내기 위해 16bit를 사용하는데, 16bit는 파일종류(4bit), 특수권한(3bit), 나머지 권한 기술(9bit)로 사용된다.
setuid는 그 중에서도 특수 권한을 나타내는 3bit짜리 칸에 정의되는 것을 말하고, 4의 값으로 결정된다. chmod로 걸려있는 상태를 보면, 4000대 값을 가진 권한임을 확인할 수 있을 것이다. (setgid는 2, sticky bit는 1의 값을 가진다. 각 권한이 어떤 역할을 하는지는 다른 문서에 적어놓겠다.)
setuid 비트를 실행 파일에 적용하면 '현재 프로그램을 실행 중인 사용자'에서 '프로그램 소유자'의 ID로 유효사용자(EUID)가 변경된다.
많은 내용을 적어놓았지만 간단하게 정리하자면, 파일 권한은 level2이고, setuid가 걸려 있는 즉, 4000번대의 특수 권한을 가지고 있는 파일을 찾아주면 된다. 파일을 찾을 때에는 find 명령어를 사용해주자.
find 명령어란? 리눅스 파일 시스템에서 파일을 검색하는 데 사용되는 명령어이다. 다양한 표현식을 사용하여 원하는 파일의 목록을 추출할 수 있다. find를 여기서 사용해주는 이유는, 파일을 찾을 때 파일명뿐만 아니라, 파일의 권한과 파일의 크기, 파일의 소유주 등으로 파일을 찾는 것이 가능하기 때문이다.
기본적인 문법은 find (경로) (옵션) 이다.
그렇다면 파일을 찾아보도록 하자. 여기서 신경쓰고 명령어를 적어주어야 하는 지점은 두 가지가 있다.
1) setuid가 걸려있는 파일을 찾는 것이므로 -perm 명령어 사용
2) level2 권한이라고 했는데, 아무래도 level2라는 사용자가 소유주로 있는 파일을 찾아야 하므로 -user 옵션 사용
find / -perm 4000 - user level2
뭔가 나오기는 한다. 근데 Permission denied라고 뜨는 항목들이 너무나도 많다.
이럴 때는 에러 메시지를 치워주는 명령어를 사용해주면 된다.
바로, 2> /dev/null 이라는 명령어인데, 2는 표준에러(stderr)를 의미하고, /dev/null은 휴지통과 같은 역할을 한다.
결국 컴퓨터에게 해준 말은 "표준에러가 뜬 것들은 모두 휴지통으로 보내" 라는 말이 된다.
이를 명령어에 담아 요청을 보내주면 예쁘게 결과값 하나만 나오... 는게 정상인데 나는 안떠서 다른 라업을 참고해 들어가 보았다..
/bin 폴더 안에 ExecuteMe 폴더를 실행하면 아래와 같이 level2의 권한을 얻을 수 있을 것이다.
cd /bin -> ExecuteMelevel2 권한 획득
level2 password 획득
그럼 이제 level2의 권한으로 bash를 띄워서 my-pass 명령어를 사용하면 level2의 패스워드를 얻을 수 있고, level1 문제를 해결할 수 있다.
※ my-pass 명령어는 리눅스 명령어가 아니고, ftz에서만 쓰이는 프로그램이다. 몰라도 된다.
Bash 란? UNIX/Linux 쉘 종류들 중에 하나이다. Bourne-Again Shell이라고도 하며, GNU 프로젝트의 일환으로 개발되었다. 리눅스의 거의 디폴트 쉘이다. 이 밖에도 Bourne Shell(sh), C Shell(csh), Korn Shell(ksh, 유닉스에서 가장 많이 사용됨) 등의 쉘 종류가 있다.