-
[FTZ] Level1보안/Pwnable 2021. 8. 23. 12:32
Backgrounds
Linux Commands
Permission
리눅스에서는 사용자 명령을 실행할 때 다음 절차를 거친다.
파일의 접근 권한을 나타낼 때 4000과 같이 4자리의 8진수로 권한의 합을 표시한다. 이때 각 자리는 다음과 같다.
- (1번째) 특수권한
- 4: setuid (프로그램을 현재 실행 중인 사용자에서 프로그램의 소유자 ID로 변경)
- 일반 사용자가 root만 접근 가능한 파일에 접근해야만 하는 경우
- 일반 사용자가 해당 파일 실행 시 root의 특권을 가져 실행 (보안상 취약!)
- 2: setgid (프로그램을 현재 실행 중인 사용자의 그룹에서 프로그램의 소유자의 그룹으로 변경)
- 1: sticky bit (특정 디렉터리를 누구나 자유롭게 사용 가능 but 일반 사용자의 파일 삭제 막음)
- 4: setuid (프로그램을 현재 실행 중인 사용자에서 프로그램의 소유자 ID로 변경)
- (2번째) 소유자 접근 권한
- 4: 읽기 (r)
- 2: 쓰기 (w)
- 1: 실행 (x)
- (3번째) 그룹 소유자 접근 권한
- (4번째) 기타 사용자 접근 권한
find
find 명령어는 파일 or 디렉토리를 검색할 때 사용한다.
find / -name [FILE]
위 명령어는 전체 파일 시스템에서 이름이 [FILE]인 파일 or 디렉터리를 찾는다.
find / -user [USER_NAME]
위 명령어는 전체 파일 시스템에서 [USER_NAME] 사용자가 소유하는 파일을 검색한다.
find / -user [USER_NAME] -perm -4000
위 명령어는 전체 파일 시스템에서, [USER_NAME] 사용자가 소유하고, setuid 권한이 걸려 있는 파일을 찾는다.
2> /dev/null
/dev/null 에 쓰는 모든 파일들을 영원히 사라진다. '>' 명령어는 명령어 뒤에 나오는 파일에 쓸 때 사용한다. '2>'는 에러 메시지(STDERR)를 출력하고, '1>'는 정상적인 메시지를 출력한다.
find / -user level2 -perm -4000 2> /dev/null
따라서 위 명령어는 find 명령어를 실행하고, 이중에서 'Denied'와 같은 에러 메시지는 /dev/null 에 쓰고, 정상 메시지만 출력한다.
$( )
[CMD1] $(CMD2)
위 명령어에서 CMD2의 결과가 문자열로 치환되어 CMD1에 의해 처리된다.
cat $(ls)
위 명령어의 경우, 현재 디렉토리의 모든 파일 or 디렉터리에 대해 cat 명령어를 수행한다.
bash
bash는 쉘을 실행하는 명령어로 bash 명령어는 새로운 쉘을 하나 더 실행한다.
Solution
find / -user level2 -perm -4000 2> /dev/null
위 명령어를 실행하면 /bin/ExecuteMe 라는 파일을 찾을 수 있다. /bin/ExecuteMe은 level 2로 setuid가 설정되어 있다. /bin/ExecuteMe를 실행시키면 아무 명령어나 실행할 수 있는데, 이때 bash로 새로운 쉘을 열고, my-pass를 통해 level 2에서의 플래그를 얻을 수 있다.
Reference
- find 명령어 https://recipes4dev.tistory.com/156
- setuid https://eunguru.tistory.com/115
- 2> /dev/null https://blog.shakii.co.kr/94
'보안 > Pwnable' 카테고리의 다른 글
[FTZ] Level 4 (0) 2021.08.23 [FTZ] Level 3 (0) 2021.08.23 [FTZ] Level 2 (0) 2021.08.23 - (1번째) 특수권한