
Exécuter des exécutables Windows non gérés dans les Beacons CobaltStrike
Inline-Execute-PE est un ensemble de fichiers objet Beacon (BOF) et d'un script Aggressor pour CobaltStrike qui permet aux opérateurs de charger des exécutables Windows non managés dans la mémoire du Beacon et de les exécuter, en récupérant la sortie et en l'affichant dans la console Beacon.
Cela permet aux opérateurs d'utiliser de nombreux outils tiers (Mimikatz, Dsquery, outils Sysinternals, etc.) sans avoir à les écrire sur le disque, à les reformater en code indépendant de la position à l'aide d'un outil comme Donut, ou à créer un nouveau processus pour les exécuter.
Ces exécutables sont mappés dans la mémoire du Beacon afin de pouvoir être exécutés à plusieurs reprises sans avoir à les envoyer sur le réseau, à allouer de la nouvelle mémoire et à créer un nouveau processus conhost.exe à chaque fois.
Les exécutables chargés dans les Beacons sont accessibles et peuvent être exécutés par tous les clients CobaltStrike connectés au serveur d'équipe CobaltStrike.
Inline-Execute-PE a été conçu autour des Beacons x64 et des exécutables Windows x64 C ou C++ compilés avec Mingw ou Visual Studio. Ce projet ne prend pas en charge les exécutables x86 ni les exécutables x64 écrits dans un autre langage ou compilés avec un autre compilateur.

Clonez le dépôt et exécutez éventuellement make pour recompiler les BOF.
Chargez Inline-Execute-PE.cna dans le client CobaltStrike. Assurez-vous que le répertoire à partir duquel CobaltStrike s'exécute est inscriptible par votre utilisateur ; Inline-Execute-PE y crée un fichier texte (petable.txt) afin de garantir la disponibilité des données nécessaires au fonctionnement d'Inline-Execute-PE.
Inline-Execute-PE comprend 3 commandes orientées cible qui exécutent des BOF, et 3 commandes internes qui manipulent la structure de données du projet :
Commandes orientées cible :
Structure de données interne :
peload est le point de départ d'Inline-Execute-PE. Cette commande est utilisée pour charger un PE dans la mémoire du Beacon. Elle effectue les actions principales suivantes :
perun est la deuxième étape d'Inline-Execute-PE. Elle effectue les actions principales suivantes :
peunload est appelé pour supprimer le PE de la mémoire du Beacon lorsque l'opérateur en a terminé ou souhaite charger un autre PE. Elle effectue les actions principales suivantes :
petable est utilisé pour afficher des informations sur tous les PE actuellement chargés dans les Beacons.
Chaque client CobaltStrike a son propre petable ; Inline-Execute-PE fait de gros efforts pour assurer la synchronisation de ses données entre tous les clients CobaltStrike connectés, afin que les PE puissent être utilisés par tous les opérateurs. Pour plus d'informations, voir « Design Considerations and Commentary ».

peconfig est utilisé pour configurer les options relatives au fonctionnement d'Inline-Execute-PE. Les deux options actuellement modifiables sont :
pebroadcast peut être utilisé pour diffuser manuellement le contenu du petable d'un client à tous les autres clients CobaltStrike connectés.
Tous les autres clients CobaltStrike mettront à jour leur petable avec les données diffusées. Cela ne devrait jamais vraiment être nécessaire, mais la fonctionnalité existe au cas où.
Utilisez peload pour charger un PE dans la mémoire du Beacon

Sinon, s'il y a un PE sur la machine cible que vous souhaitez utiliser sans créer de nouveau processus, fournissez le chemin et l'option --local

Appelez perun en passant les arguments au PE chargé

Les guillemets doubles dans les arguments doivent être échappés avec des barres obliques inverses

Si vous avez identifié qu'un PE cause des problèmes lors de la tentative de libération des DLL pendant le déchargement, utilisez peconfig pour définir unloadlibraries sur false

Une fois que vous avez fini d'utiliser un PE, appelez peunload pour le nettoyer du Beacon
