
Kit Cobalt Strike pour le Mouvement latéral
Movekit est une extension du mouvement latéral intégré de Cobalt Strike qui exploite la fonction execute_assembly avec les assemblies .NET SharpMove et SharpRDP. Le script aggressor gère la création de charges utiles en lisant les fichiers modèles pour un type d'exécution spécifique.
IMPORTANT : Pour utiliser le script, un utilisateur a seulement besoin de charger le script aggressor MoveKit.cna qui chargera tous les autres scripts nécessaires avec lui. De plus, selon les actions entreprises, les assemblies SharpMove et SharpRDP devront être compilées et placées dans le répertoire Assemblies. Enfin, certains déplacements de fichiers nécessitent une compilation dynamique qui nécessite Mono.
Lors du chargement du script aggressor, un sélecteur nommé Move sera chargé dans la barre de menus. Plusieurs sélections sont disponibles pour l'utilisateur. Premièrement, les utilisateurs peuvent choisir d'exécuter une commande sur un système distant via WMI, DCOM, le Planificateur de tâches, RDP ou SCM. Deuxièmement, le mécanisme d'exécution Command utilise des berceaux de téléchargement pour récupérer et exécuter les fichiers. Troisièmement, la méthode File dépose un fichier sur le système et l'exécute. Il y a Write File Only qui n'effectue aucune exécution, seulement un déplacement de données. Enfin, il y a un paramètre Default pour accélérer l'utilisation de l'interface graphique et l'utiliser avec les commandes beacon. Les paramètres par défaut sont utilisés pour tout ce qui peut accepter une valeur par défaut.
Pour utiliser les commandes beacon, elles liront les paramètres par défaut et utiliseront quelques arguments de ligne de commande. Exemple de commande beacon :
<exec-type> <target> <listener> <filename>
move-msbuild 192.168.1.1 http move.csproj
De plus, la commande beacon personnalisée pré-construite est un peu différente. Exemple de commande :
move-pre-custom-file <target> <local-file> <remote-filename>
move-pre-custom-file computer001.local /root/payload.exe legit.exe
Le champ location est la partie la plus délicate du projet. Lors de la sélection du déplacement de fichier WMI, location sera utilisé ; si SMB est sélectionné, il ne sera pas utilisé (il peut donc être laissé vide). Location prend trois valeurs différentes. Premièrement, si location est une URL, alors lorsque la charge utile est créée, elle sera hébergée par le serveur Web de Cobalt Strike. L'hôte beacon à partir duquel l'assembly sera exécutée fera une requête Web vers l'URL et récupérera le fichier, qui sera utilisé dans un sous-événement sur l'hôte cible pour écrire le fichier. Deuxièmement, si location est un répertoire Windows, il téléchargera le fichier créé vers l'hôte beacon et l'assembly le lira depuis le système de fichiers et le stockera dans le sous-événement pour l'écrire sur l'hôte distant. Enfin, si le champ location est un chemin Linux ou le mot local, alors il compilera dynamiquement la charge utile dans l'assembly en cours d'exécution. Cependant, si le fichier dépasse la limite de taille de 1 Mo, une erreur sera affichée.
Pour toutes les méthodes de fichier, la charge utile sera créée via le script aggressor. Cependant, si une charge utile est déjà créée, les utilisateurs peuvent sélectionner l'option Custom (Prebuilt) pour la déplacer et l'exécuter.
Le kit contient différentes techniques de déplacement de fichiers, déclencheurs d'exécution et types de charges utiles.
Le déplacement de fichier est considéré comme la méthode utilisée pour transférer un fichier vers un hôte distant. Types de déplacement de fichier :
Le déclencheur de commande est considéré comme la méthode utilisée pour exécuter une commande spécifique sur un hôte distant. Types de déclencheurs de commande :
Exécution de shellcode uniquement :
Détournements :
Pour remplacer un modèle, vous devez remplir deux conditions. Premièrement, le modèle doit être nommé avec la technique (exemple : msbuild.csproj). Deuxièmement, le code source doit contenir la chaîne $$PAYLOAD$$ à l'endroit où le shellcode encodé en base64 sera placé, et être capable de convertir une chaîne base64 en tableau d'octets. Exemple pour C# :
string strSC = "$$PAYLOAD$$";
byte[] sc = Convert.FromBase64String(strSC);
Un changement a été ajouté qui permet aux valeurs par défaut de mettre à jour la « Chaîne de recherche et de remplacement » et les formats de shellcode dans la « Boîte de dialogue de mise à jour des valeurs par défaut ». Par défaut, ce sont $$PAYLOAD$$ et base64.
execute-assembly de Cobalt Strike, donc il s'injectera dans un processus sacrificiel comme les autres tâches post-exploitationFile ou CommandUne partie du code, des modèles ou de l'inspiration provient d'autres personnes et projets
Il y a probablement des bugs quelque part, ils ont tendance à apparaître de temps en temps. Signalez-les et je les corrigerai.