ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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 일반 사용자의 파일 삭제 막음)
    • (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

    '보안 > Pwnable' 카테고리의 다른 글

    [FTZ] Level 4  (0) 2021.08.23
    [FTZ] Level 3  (0) 2021.08.23
    [FTZ] Level 2  (0) 2021.08.23
Designed by Tistory.