
Скрипт агрессора Cobalt Strike для генерации, форматирования и шифрования shellcode беккона с поддержкой множества методов выхода, системных вызовов и преобразований кодирования/сжатия.
Ryan Stephenson (RCStep)
Добавляет пункт Shellcode - Shellcode Generator в верхнюю строку меню Cobalt Strike

CSSG — это скрипты aggressor, .NET и Python, используемые для более простой генерации и форматирования beacon shellcode
Генерирует stageless shellcode beacon'а с возможностью выбора метода выхода, дополнительным форматированием, шифрованием, кодированием, сжатием, многострочным выводом и т.д.
Преобразования shellcode выполняются в порядке убывания их перечисления в меню
Требования:
Опция шифрования RC4/AES использует скрипт Python или сборку .NET в папке /assets
Шифрование на основе Python требует установки пакета pycryptodome для выполнения шифрования RC4/AES
Установите pycryptodome с помощью pip в зависимости от вашей среды Python:
python -m pip install pycryptodome
python3 -m pip install pycryptodome
py -3 -m pip install pycryptodome
py -2 -m pip install pycryptodome
Вы можете проверить, что pycryptodome установлен после pip install, с помощью команды, например:
python -m pip list | grep crypto
Генератор будет использовать команду "python" по умолчанию на вашем клиентском хосте для запуска скрипта шифрования RC4/AES
Ваш клиентский хост должен иметь возможность выполнять собственные сборки .NET Framework для опции бэкенда .exe RC4/AES
Параметры генератора shellcode:
Listener:
Выберите действующий listener с помощью кнопки "...". Shellcode будет сгенерирован на основе выбранного listener'а
Delivery:
Stageless (Staged не поддерживается для генератора shellcode)
Метод выхода:
process - завершает весь процесс, в котором находится Beacon, при закрытии beacon'а
thread - завершает только поток, в котором выполняется Beacon, при закрытии beacon'а
Метод системных вызовов Beacon:
none
direct
indirect
Библиотека HTTP Beacon:
wininet
winhttp
Флажок локальных указателей:
Может использоваться, если вы собираетесь выполнять shellcode из существующего Beacon'а
Генерирует полезную нагрузку shellcode Beacon'а, которая наследует указатели на ключевые функции от родительского Beacon'а той же архитектуры
Существующая сессия:
Родительская сессия Beacon, из которой shellcode будет извлекать метаданные сессии
Shellcode должен быть запущен из этой сессии Beacon
Флажок x86:
Отметьте для генерации x86 shellcode, по умолчанию генерируется x64
Или использовать файл shellcode:
Используйте внешний файл сырого shellcode вместо генерации shellcode Beacon
Это позволяет использовать другие экспортированные файлы Beacon или вывод из других инструментов (Donut, msfvenom и т.д.)
Форматирование:
raw - сырой бинарный вывод shellcode, без форматирования
hex - вывод shellcode в шестнадцатеричном формате
0x90,0x90,0x90 - shellcode, отформатированный в массив байтов в стиле C#
0x90uy;0x90uy;0x90uy - shellcode, отформатированный в массив байтов в стиле F#
\x90\x90\x90 - shellcode, отформатированный в массив байтов в стиле C\C++
UUID - shellcode преобразуется в строки UUID с помощью скрипта Python (дополняется \x90 для блоков по 16 байт)
b64 - опция base64-кодирования shellcode на раннем этапе генерации (до любого шифрования)
Флажок шифрования shellcode XOR:
Отметьте для шифрования shellcode с помощью XOR (можно выбрать только один тип шифрования одновременно)
Ключ(и) XOR:
Случайно сгенерированный и редактируемый символ(ы) ключа XOR для шифрования
Несколько символов приведут к нескольким раундам шифрования XOR (например, ABCDE)
Флажок шифрования shellcode RC4:
Отметьте для шифрования shellcode с помощью RC4 (можно выбрать только один тип шифрования одновременно)
Использует скрипт Python или сборку .NET Framework для выполнения шифрования RC4
Флажок шифрования shellcode AES:
Отметьте для шифрования shellcode с помощью AES (можно выбрать только один тип шифрования одновременно)
Использует скрипт Python или сборку .NET Framework для выполнения блочного шифрования AES-CBC
Shellcode дополняется значениями \0 для достижения требований к размеру блока
Случайно сгенерированный IV добавляется в начало зашифрованных данных shellcode
Флажок бэкенда RC4/AES:
Отметьте для использования сборки .exe .NET для шифрования файла shellcode
Если не отмечено, используется скрипт Python для шифрования файла shellcode
Допустимые длины байтов ключа шифрования для AES: 16, 24 и 32
Длины байтов ключа для RC4 — ЛЮБЫЕ при использовании .NET, и минимум 5 байт при использовании Python
Инструменты бэкенда RC4/AES:
Скрипт Python и скомпилированная сборка .NET находятся в каталоге assets
Исходная папка для сборки Encryptor также находится там для самостоятельной компиляции, если вы мне не доверяете (я бы не стал)
Оба этих инструмента могут шифровать и дешифровать shellcode/файлы RC4/AES
encrypt_file.py Usage:
encrypt_file.py [aes/rc4] [encrypt/decrypt] [key] [input file] [output file]
Encryptor.exe Usage:
Encryptor.exe [aes/rc4] [encrypt/decrypt] [key] [input file] [output file]
Ключ RC4 или AES
Случайно сгенерированный и редактируемый ключ RC4/AES для шифрования
Генерируется 32-байтовый ключ AES, предпочтительный для 256-битной стойкости шифрования AES
Допустимые длины байтов ключа шифрования AES: 16, 24 и 32
Длина ключа RC4 составляет минимум 1 байт при использовании .NET и минимум 5 байт при использовании Python
Кодирование/Сжатие:
none - Никакого дополнительного кодирования или сжатия shellcode не выполняется
b64 - кодировать shellcode в base64
gzip then b64 - сначала сжать gzip, затем закодировать в base64
gzip - сжать shellcode с помощью gzip
b64 then gzip - сначала base64, затем сжать gzip
b64 then 7xgzip - сначала base64, затем сжать gzip 7 раз
Многострочный вывод:
Может использоваться для не-сырых/бинарных форматов вывода
none - без многострочного форматирования, shellcode представляет собой одну длинную строку
quoted - Shellcode разбивается на строки, окруженные кавычками
chunks.push_back - Shellcode разбивается на строки, окруженные chunks.push_back(" и ");
Длина строки многострочного вывода:
Количество символов shellcode в каждой строке, если выбрана опция многострочного вывода
Кнопка Generate:
Выберите каталог для вывода shellcode
Имя файла по умолчанию будет beacon, но его можно изменить
Любой использованный ключ шифрования будет отображен во всплывающем окне, а также записан в консоль скриптов Cobalt Strike
Размер в байтах исходного beacon shellcode и окончательного отформатированного beacon shellcode будет отображен во всплывающем окне и также записан в консоль скриптов
Расположение файлов, используемых для генерации/сборки shellcode, задается в файле scripts/shellcode_generator.cna
Вдохновлено работой многих участников сообщества infosec