
Выполнение неуправляемых исполняемых файлов Windows в биконах CobaltStrike
Inline-Execute-PE — это набор BOF (Beacon Object Files) и сопутствующий скрипт Aggressor для CobaltStrike, позволяющий операторам загружать неуправляемые исполняемые файлы Windows в память Beacon и выполнять их, получая вывод и отображая его в консоли Beacon.
Это позволяет операторам использовать множество сторонних инструментов (Mimikatz, Dsquery, утилиты Sysinternals и т.д.) без необходимости сбрасывать их на диск, переформатировать в позиционно-независимый код с помощью таких инструментов, как Donut, или создавать новый процесс для их запуска.
Эти исполняемые файлы отображаются в памяти Beacon, чтобы их можно было запускать многократно без необходимости каждый раз передавать их по сети, выделять новую память и создавать новый процесс conhost.exe.
Исполняемые файлы, загруженные в Beacons, доступны и могут быть запущены всеми клиентами CobaltStrike, подключенными к Team Server CobaltStrike.
Inline-Execute-PE разработан для x64 Beacon и x64 исполняемых файлов Windows на C или C++, скомпилированных с помощью Mingw или Visual Studio. Этот проект не поддерживает x86 исполняемые файлы или x64 исполняемые файлы, написанные на другом языке или скомпилированные другим компилятором.

Клонируйте репозиторий и, при необходимости, выполните make для перекомпиляции BOF.
Загрузите Inline-Execute-PE.cna в клиент CobaltStrike. Убедитесь, что директория, из которой запускается CobaltStrike, доступна для записи вашим пользователем; Inline-Execute-PE создаёт там текстовый файл (petable.txt), чтобы обеспечить доступность данных, необходимых для работы Inline-Execute-PE.
Inline-Execute-PE состоит из 3 команд, взаимодействующих с целью и запускающих BOF, и 3 внутренних команд, управляющих структурой данных проекта:
Команды для цели:
Внутренняя структура данных:
peload — это начало работы с Inline-Execute-PE. Эта команда используется для загрузки PE в память Beacon. Она выполняет следующие основные действия:
perun — это второй шаг Inline-Execute-PE. Он выполняет следующие основные действия:
peunload вызывается для удаления PE из памяти Beacon, когда оператор закончил работу с ним или хочет загрузить другой PE. Он выполняет следующие основные действия:
petable используется для отображения информации о всех PE, загруженных в Beacons.
У каждого клиента CobaltStrike есть своя собственная petable; Inline-Execute-PE прилагает значительные усилия для обеспечения синхронизации данных между всеми подключенными клиентами CobaltStrike, чтобы PE могли использоваться всеми операторами. Подробнее об этом см. "Design Considerations and Commentary".

peconfig используется для настройки параметров, касающихся работы Inline-Execute-PE. Два текущих параметра, которые могут быть изменены:
pebroadcast можно использовать для ручной рассылки содержимого petable клиента всем остальным подключенным клиентам CobaltStrike.
Каждый другой клиент CobaltStrike обновит свою petable полученными данными. Это вряд ли когда-либо понадобится, но функция существует на всякий случай.
Используйте peload для загрузки PE в память Beacon

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

Вызовите perun, передав аргументы загруженному PE

Двойные кавычки в аргументах должны экранироваться обратной косой чертой

Если вы обнаружили, что PE вызывает проблемы при попытке освободить DLL во время выгрузки, используйте peconfig, чтобы установить unloadlibraries в false

Когда вы закончили использовать PE, вызовите peunload, чтобы очистить его из Beacon

Теперь в Beacon можно загрузить другой PE

Необходимо быть внимательным с аргументами командной строки, передаваемыми PE; некоторые PE сразу аварийно завершатся при неверных аргументах, в то время как другие будут работать бесконечно, из-за чего Beacon никогда не ответит, хотя процесс всё ещё работает.