Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
external_c2_framework — Python API для использования со спецификацией External C2 от Cobalt Strike | Kitploit
Инструменты/GitHubGitHub/truneski/external_c2_framework
Фреймворки для пентестаФреймворки для эксплойтовПост-эксплуатацияКомандование и УправлениеRed TeamingРазработка Полезной Нагрузки
GitHubtruneski/external_c2_framework

external_c2_framework

Python API для использования со спецификацией External C2 от Cobalt Strike

Репозиторий
63197 лет назадПроверено Kitploit

Популярное

Смотреть все →

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

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

external_c2 framework

Фреймворк на Python для использования со спецификацией External C2 от Cobalt Strike, как описано в спецификации.

Основная цель дизайна — создать очень модульную реализацию спецификации external c2, которая обеспечивает достаточный уровень абстракции для простой реализации C2-каналов для Cobalt Strike. В идеале, всё, что нужно сделать пользователю — это создать модуль transport, модуль encoder и заполнить конфигурационный файл для реализации нового канала.

Конфигурация транспорта Dropbox

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

  1. Создать учётную запись Dropbox, если у вас её ещё нет (https://www.dropbox.com/)
  2. Сгенерировать токен доступа для вашей учётной записи Dropbox (https://www.iperiusbackup.net/en/create-dropbox-app-get-authentication-token/)
  3. В builds/client/dbox/dbox_client.py измените token на сгенерированный на шаге 2.
  4. В builds/server/utils/transports/transport_dbox.py сделайте те же изменения, что и на шаге 3.
  5. Скомпилируйте вашу DLL: cd builds/client/dbox && ./compile_dll.sh
  6. Запустите Team-сервер Cobalt Strike и подключитесь к нему через клиент Cobalt Strike.
  7. Загрузите скрипт start_externalc2.cna из вашего CS-клиента.
  8. Скопируйте этот репозиторий на ваш team-сервер, затем запустите сервер: cd builds/server/ && ./dbox_server.py
  9. Распространите ваш исполняемый файл с шага 6 на целевой хост и выполните его. Вы должны увидеть возвращаемое соединение на team-сервере.

Ссылка на видео-демонстрацию: https://www.youtube.com/watch?v=nTRHSh_uCcA

Архитектура

Этот проект состоит из трёх основных частей:

  • Builder (пока не реализован)
  • Client
  • Server

Builder

Builder динамически собирает развёртывания клиента и сервера на основе указанной конфигурации. В идеале клиент можно распространять в виде одного скомпилированного файла, такого как dll или exe.

Client

Клиент — это, по сути, полезная нагрузка, которая выполняется на конечной точке, в спецификации она называется third-party client. Логика клиента в основном статична:

  1. Выполнить любые подготовительные действия, необходимые для использования transport
  2. Получить stager
  3. Внедрить stager и открыть дескриптор beacon
  4. Получить метаданные от beacon
  5. Передать метаданные от beacon на C2-сервер через transport
  6. Следить за transport на предмет новых задач
  7. Передать новые задачи в beacon
  8. Передать ответы от beacon через transport
  9. Повторять шаги 6–8.

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

Логика внедрения процесса определяется builder-ом.

Server

Сервер — это приложение, которое выступает посредником между client и c2 server, в спецификации он называется third-party Client Controller. Логика сервера в основном статична, но поддерживает подробный и отладочный вывод для помощи в разработке:

  1. Разобрать конфигурацию
  2. Импортировать указанный модуль кодирования
  3. Импортировать указанный транспортный модуль
  4. Установить соединение с c2-сервером
  5. Запросить stager у c2-сервера
  6. Закодировать stager с помощью модуля encoder
  7. Передать stager с помощью модуля transport
  8. Ожидать ответа с метаданными от клиента, полученного через transport
  9. Декодировать метаданные с помощью модуля encoder
  10. Передать метаданные на c2-сервер
  11. Получить новую задачу от c2-сервера
  12. Закодировать новую задачу
  13. Передать новую задачу клиенту через transport
  14. Получить ответ от клиента через transport
  15. Декодировать ответ с помощью модуля encoder
  16. Передать ответ на c2-сервер
  17. Повторять шаги 11–16

Решение о том, какие модули encoder и transport импортирует сервер, определяется значениями, хранящимися в config.py.

Импорт неиспользуемых модулей transport или encoder не выполняется.

Общие функции клиента и модулей

В следующих таблицах описаны общие функции между модулями encoding и transport и клиентом. Общие функции — это, по сути, один и тот же код.

ОЧЕНЬ ВАЖНОЕ ПРИМЕЧАНИЕ: Данные, отправляемые в функции клиента sendData и recvData, должны быть сырыми данными, тогда как данные, отправляемые в функции транспортного модуля sendData и retrieveData, должны быть уже закодированы или декодированы по мере необходимости.

Модуль транспорта

Функция транспортаФункция клиентаОписание
prepTransport

Модуль кодировщика

Функция кодировщикаФункция клиентаОписание
encodeencodeОпределяет изменения, вносимые в необработанные данные для подготовки их к транспортировке
decodedecodeОпределяет изменения, вносимые в необработанные данные, полученные от транспорта, для их передачи по назначению

Как это использовать

Сначала определите, какой транспортный и кодирующий модуль вы хотите использовать. Для следующего примера используем transport_gmail и encoder_b64url.

Затем измените server/config.py под свои нужды, убедившись, что ENCODER_MODULE и TRANSPORT_MODULE правильно настроены и указывают на нужные вам модули:

Пример config.py

root@kitploit:~
EXTERNAL_C2_ADDR = "127.0.0.1"
EXTERNAL_C2_PORT = "2222"
C2_PIPE_NAME = "foobar"
C2_BLOCK_TIME = 100
C2_ARCH = "x86"
IDLE_TIME = 5
ENCODER_MODULE = "encoder_b64url"
TRANSPORT_MODULE = "transport_gmail"
verbose = False
debug = False

Затем измените раздел конфигурации для выбранных вами модулей transport и encoder.

Убедитесь, что раздел конфигурации в client/mechanism/$mechanism_client.py соответствует всем конфигурациям, которые вы определили до сих пор.

На машине, где запускается сервер, выполните:

python server.py

Для более подробного вывода вы можете запустить:

python server.py -v

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

python server.py -d

Затем выполните клиент на целевой конечной точке.

Если всё сработало, в консоли Cobalt Strike зарегистрируется новый beacon, с которым вы можете взаимодействовать.

Часто задаваемые вопросы

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

Почему Python 2?: Мне лень, и на нём легко реализовывать новые транспортные и кодирующие каналы.

Ваш код — отстой: Это не вопрос.

Могу ли я отправить новый транспортный и/или кодирующий модуль?: Да, пожалуйста! Отправьте pull request, и я с удовольствием его рассмотрю.

Дорожная карта

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

  • В настоящее время отсутствует функциональность builder, которая предназначена для динамической сборки развёртываний клиента и сервера, но она находится в дорожной карте.

Скачать инструмент
prepTransport
Выполняет любые предварительные настройки, необходимые для использования транспортного механизма
sendDatasendDataОпределяет, как данные отправляются через транспортный механизм
retrieveDatarecvDataОпределяет, как данные принимаются через транспортный механизм