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

Репозиторий
631957 лет назадПроверено 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.
  • Скомпилируйте вашу DLL: cd builds/client/dbox && ./compile_dll.sh
  • Запустите Team-сервер Cobalt Strike и подключитесь к нему через клиент Cobalt Strike.
  • Загрузите скрипт start_externalc2.cna из вашего CS-клиента.
  • Скопируйте этот репозиторий на ваш team-сервер, затем запустите сервер: cd builds/server/ && ./dbox_server.py
  • Распространите ваш исполняемый файл с шага 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, должны быть уже закодированы или декодированы по мере необходимости.

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

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

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

    Функция кодировщикаФункция клиентаОписание
    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, которая предназначена для динамической сборки развёртываний клиента и сервера, но она находится в дорожной карте.

    Скачать инструмент