
POC di movimento laterale DCOM che abusa dell'interfaccia IMsiServer - carica ed esegue un payload da remoto
POC di movimento laterale DCOM che abusa dell'interfaccia IMsiServer
https://www.deepinstinct.com/blog/forget-psexec-dcom-upload-execute-backdoor
La soluzione contiene 2 progetti
DCOMUploadExec - Un progetto C++ che ospita il codice dell'attacco di movimento laterale
AssemblyPayload - Una DLL .NET che mostra una MessageBox. È il payload predefinito usato da DCOMUploadExec
Compilare la soluzione
Usage: DCOMUploadExec.exe [dominio]\[utente]:[password]@[indirizzo]
Utilizzo locale: DCOMUploadExec.exe LOCALHOST (Eseguire come amministratore)
DCOMUploadExec.exe:
Caricherà il payload DLL predefinito, AssemblyPayload, sul PC remoto
Caricherà la DLL in un processo MSIEXEC.exe remoto
Eseguirà un export dalla DLL
Riceverà un risultato dall'export
Il payload deve essere un assembly .NET con nome sicuro (strong-named)
PayloadConfig.h viene usato per configurare il payload che DCOMUploadExec utilizzerà.
È impostato per default sull'output di AssemblyPayload.
Per usare un payload personalizzato:
creare un assembly .NET con nome sicuro che esporti una funzione denominata InitializeEmbeddedUI - questa sarà la funzione che DCOMUploadExec eseguirà eventualmente sul target remoto
Inserire i dettagli del payload personalizzato in PayloadConfig.h:
PAYLOAD_ASSEMBLY_PATH = // percorso locale del payload creato
ASSEMBLY_NAME = // il nome dell'assembly
ASSEMBLY_BITNESS = // "64" per un payload x64, "32" per un payload x86;
ASSEMBLY_VERSION = // il valore da sigcheck.exe -n PAYLOAD_ASSEMBLY_PATH
ASSEMBLY_PUBLIC_KEY = // il valore
da
sn.exe -T PAYLOAD_ASSEMBLY_PATH
Compilare DCOMUploadExec e utilizzarlo
Le macchine dell'attaccante e della vittima devono essere nello stesso dominio o foresta.
Le macchine dell'attaccante e della vittima devono essere coerenti con la patch di hardening DCOM - ovvero con la patch applicata su entrambi i sistemi o assente su entrambi.
Il payload assembly deve avere un nome sicuro.
Il payload assembly deve essere x86 o x64 (non può essere AnyCPU).