
POC de mouvement latéral DCOM abusant de l'interface IMsiServer - téléverse et exécute une charge utile à distance
POC de mouvement latéral DCOM abusant de l'interface IMsiServer
https://www.deepinstinct.com/blog/forget-psexec-dcom-upload-execute-backdoor
La solution contient 2 projets
DCOMUploadExec - Un projet C++ qui héberge le code d'attaque du mouvement latéral
AssemblyPayload - Une DLL .NET qui affiche une MessageBox. C'est la charge utile par défaut utilisée par DCOMUploadExec
Compilez la solution
Usage: DCOMUploadExec.exe [domain]\[user]:[password]@[address]
Local Usage: DCOMUploadExec.exe LOCALHOST (Run this as administrator)
DCOMUploadExec.exe va :
Téléverser la DLL de charge utile par défaut, AssemblyPayload, sur le PC distant
Charger la DLL dans un processus MSIEXEC.exe distant
Exécuter un export depuis la DLL
Recevoir un résultat de l'export
La charge utile doit être un assembly .NET à nom fort
PayloadConfig.h est utilisé pour configurer la charge utile que DCOMUploadExec utilisera.
Il est défini par défaut sur la sortie de AssemblyPayload.
Afin d'utiliser une charge utile personnalisée :
créez un assembly .NET à nom fort qui exporte une fonction nommée InitializeEmbeddedUI - ce sera la fonction que DCOMUploadExec exécutera finalement sur la cible distante
Renseignez les détails de votre charge utile personnalisée dans PayloadConfig.h :
PAYLOAD_ASSEMBLY_PATH = // chemin local vers votre charge utile créée
ASSEMBLY_NAME = // le nom de l'assembly
ASSEMBLY_BITNESS = // "64" pour une charge utile x64, "32" pour une charge utile x86;
ASSEMBLY_VERSION = // la valeur de sigcheck.exe -n PAYLOAD_ASSEMBLY_PATH
ASSEMBLY_PUBLIC_KEY = // la valeur
de
sn.exe -T PAYLOAD_ASSEMBLY_PATH
Compilez DCOMUploadExec et utilisez-le
Les machines de l'attaquant et de la victime doivent être dans le même domaine ou la même forêt.
Les machines de l'attaquant et de la victime doivent être cohérentes avec le correctif de durcissement DCOM - soit le correctif appliqué sur les deux systèmes, soit absent sur les deux.
La charge utile d'assembly doit avoir un nom fort.
La charge utile d'assembly doit être soit x86, soit x64 (elle ne peut pas être AnyCPU).