
Cobalt Strike aggressor script pour générer, formater et chiffrer le shellcode de beacon avec prise en charge de multiples méthodes de sortie, syscalls et transformations d'encodage/compression.
Ryan Stephenson (RCStep)
Ajoute Shellcode - Générateur de Shellcode à la barre de menu supérieure de Cobalt Strike

CSSG est un ensemble de scripts aggressor, .NET et python utilisés pour générer et formater plus facilement le shellcode du beacon
Génère un shellcode beacon sans étage avec méthode de sortie exposée, formatage supplémentaire, chiffrement, encodage, compression, sortie multiligne, etc
les transformations du shellcode sont effectuées dans l’ordre décroissant de leur apparition dans le menu
Prérequis :
L’option de chiffrement RC4/AES utilise un script python ou un assembly .NET dans le dossier /assets
Le chiffrement basé sur Python dépend du package pycryptodome pour effectuer le chiffrement RC4/AES
Installez pycryptodome avec pip selon votre environnement python :
python -m pip install pycryptodome
python3 -m pip install pycryptodome
py -3 -m pip install pycryptodome
py -2 -m pip install pycryptodome
Vous pouvez vérifier que pycryptodome est présent après l’installation pip avec une commande comme :
python -m pip list | grep crypto
Le générateur utilisera la commande "python" par défaut de votre hôte client pour lancer le script de chiffrement RC4/AES
Votre hôte client doit être capable d’exécuter des assemblies .NET natifs pour l’option backend .exe RC4/AES
Options du générateur de shellcode :
Listener :
Sélectionnez un listener valide avec le bouton "...". Le shellcode sera généré à partir de cette sélection de listener
Livraison :
Sans étage (avec étage non supporté pour le générateur de shellcode)
Méthode de sortie :
process - ferme tout le processus dans lequel le Beacon est présent lorsque le beacon est fermé
thread - ferme uniquement le thread dans lequel le Beacon s’exécute lorsque le beacon est fermé
Méthode Syscalls du Beacon :
none
direct
indirect
Bibliothèque HTTP du Beacon :
wininet
winhttp
Case à cocher Pointeurs locaux :
Peut être utilisé si vous allez exécuter le shellcode depuis un Beacon existant
Génère une charge utile de shellcode Beacon qui hérite des pointeurs de fonction clés d’un Beacon parent de même architecture
Session existante :
La session Beacon parente à partir de laquelle le shellcode récupérera les métadonnées de session
Le shellcode doit être exécuté depuis cette session Beacon
Case à cocher x86 :
Cochez pour générer du shellcode x86, x64 est généré par défaut
Ou utiliser un fichier shellcode :
Utilisez un fichier shellcode brut généré en externe au lieu de générer du shellcode Beacon
Cela permet d’utiliser d’autres fichiers Beacon exportés ou la sortie d’autres outils (Donut, msfvenom, etc)
Formatage :
raw - sortie shellcode binaire brut, aucun formatage appliqué
hex - sortie shellcode formatée en hexadécimal
0x90,0x90,0x90 - shellcode formaté en tableau d’octets style C#
0x90uy;0x90uy;0x90uy - shellcode formaté en tableau d’octets style F#
\x90\x90\x90 - shellcode formaté en tableau d’octets style C\C++
UUID - shellcode transformé en chaînes UUID avec un script python (rempli de \x90 pour des blocs de 16 octets)
b64 - option pour encoder le shellcode en base64 tôt dans le processus de génération (avant tout chiffrement)
Case à cocher Chiffrement XOR du shellcode :
Cochez pour chiffrer le shellcode avec XOR (un seul type de chiffrement peut être sélectionné à la fois)
Clé(s) XOR :
Caractère(s) de clé XOR généré(s) aléatoirement et modifiable(s) à utiliser pour le chiffrement
Plusieurs caractères entraîneront plusieurs rounds de chiffrement XOR (ex. ABCDE)
Case à cocher Chiffrement RC4 du shellcode :
Cochez pour chiffrer le shellcode avec RC4 (un seul type de chiffrement peut être sélectionné à la fois)
Utilise un script python ou un assembly .NET Framework pour effectuer le chiffrement RC4
Case à cocher Chiffrement AES du shellcode :
Cochez pour chiffrer le shellcode avec AES (un seul type de chiffrement peut être sélectionné à la fois)
Utilise un script python ou un assembly .NET Framework pour effectuer le chiffrement AES en mode CBC
Le shellcode est rempli de valeurs \0 pour atteindre la taille de bloc requise
Un IV généré aléatoirement est préfixé aux données chiffrées du shellcode
Case à cocher Backend RC4/AES :
Cochez pour utiliser un assembly exe .NET pour chiffrer votre fichier shellcode
Décoché utilise un script python pour chiffrer votre fichier shellcode
Les longueurs de clé de chiffrement acceptées pour AES sont 16, 24 et 32 octets
Les longueurs de clé pour RC4 sont TOUTES lorsqu’on utilise .NET, et 5 octets minimum avec python
Outils backend RC4/AES :
Un script python et un assembly .NET compilé se trouvent dans le dossier assets
Le dossier source de l’assembly Encryptor est également présent pour une auto-compilation si vous ne me faites pas confiance (je ne le ferais pas non plus)
Ces deux outils peuvent chiffrer et déchiffrer du shellcode/des fichiers RC4/AES
Utilisation de encrypt_file.py :
encrypt_file.py [aes/rc4] [encrypt/decrypt] [key] [input file] [output file]
Utilisation de Encryptor.exe :
Encryptor.exe [aes/rc4] [encrypt/decrypt] [key] [input file] [output file]
Clé RC4 ou AES
Clé RC4/AES générée aléatoirement et modifiable à utiliser pour le chiffrement
Une clé AES de 32 octets est générée et préférée pour une force de chiffrement AES 256 bits
Les longueurs de clé de chiffrement AES acceptées sont 16, 24 et 32 octets
La longueur de la clé RC4 est de 1 octet minimum avec .NET et de 5 octets minimum avec python
Encodage/Compression :
none - Aucun encodage ou compression supplémentaire n’est appliqué au shellcode
b64 - encoder le shellcode en base64
gzip then b64 - compresser en gzip puis encoder en base64
gzip - compresser le shellcode en gzip
b64 then gzip - encoder en base64 puis compresser en gzip
b64 then 7xgzip - encoder en base64 puis compresser en gzip 7 fois
Sortie multiligne :
Peut être utilisé pour les formats de sortie non bruts/binaires
none - pas de formatage multiligne, le shellcode est une longue chaîne
quoted - Le shellcode est divisé en lignes entourées de guillemets
chunks.push_back - Le shellcode est divisé en lignes entourées de chunks.push_back(" et ");
Longueur multiligne :
Nombre de caractères de shellcode dans chaque ligne si une option de sortie multiligne est sélectionnée
Bouton Générer :
Sélectionnez le répertoire de sortie du shellcode
Le nom de fichier par défaut sera beacon mais peut être modifié
Toute clé de chiffrement utilisée sera affichée dans une popup et également écrite dans la console de script Cobalt Strike
La taille en octets du shellcode beacon brut et du shellcode beacon formaté final sera affichée dans une popup et également écrite dans la console de script
L’emplacement des fichiers utilisés pour générer/construire le shellcode est défini dans le fichier scripts/shellcode_generator.cna
Inspiré par le travail de nombreux contributeurs en sécurité informatique