Use msdtc to maintain persistence
0x00 前言
Shadow Force 曾经在域环境中使用过的一个后门,利用 MSDTC 服务加载 dll,实现自启动,并绕过 Autoruns 对启动项的检测。本文将要对其进行测试,介绍更多利用技巧,分析防御方法。
0x01 简介
本文将要介绍以下内容:
- MSDTC 简介
- 后门思路
- 后门验证
- 更多测试和利用方法
- 检测防御
0x02 MSDTC 简介
MSDTC:
- 对应服务 MSDTC,全称
Distributed Transaction Coordinator
,Windows 系统默认启动该服务 - 对应进程 msdtc.exe,位于%windir%\system32\
- msdtc.exe 是微软分布式传输协调程序,该进程调用系统 Microsoft Personal Web Server 和 Microsoft SQL Server
0x03 后门思路
文中介绍的思路如下:
当计算机加入域中,MSDTC 服务启动时,会搜索注册表 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\MTxOCI
如下图
分别加载 3 个 dll: oci.dll
, SQLLib80.dll
, xa80.dll
然而特别的是, Windows 系统默认不包含 oci.dll
也就是说,将 payload.dll 重名为 oci.dll 并保存在 %windir%\system32\
下
域中的计算机启动服务 MSDTC 时就会加载该 dll,实现代码执行
0x04 后门验证
测试系统: Win7 x64
搭建域环境,如下图
使用 Procmon 监控 msdtc 的启动过程,筛选进程 msdtc.exe,查看文件操作,如下图
msdtc.exe 确实会尝试加载 oci.dll,并且由于系统默认不存在 oci.dll,导致加载失败
使用 64 位的测试 dll,下载地址如下:https://github.com/3gstudent/test/blob/master/calc_x64.dll
将其保存在 %windir%\system32\
下
结束进程 msdtc.exe,命令行参数如下:
taskkill /f /im msdtc.exe
等待 msdtc.exe 重新启动
等待一段时间,mstdc.exe 重新启动,成功加载 oci.dll,如下图
calc.exe 以 system 权限启动
如下图
经实际测试,该方法偶尔会出现 bug,通过 taskkill 结束进程后,msdtc.exe 并不会重新启动
解决方法:重新启动服务 MSDTC 就好,命令行参数如下:
net start msdtc
0x05 更多测试
1、测试 32 位系统
32 位系统换用 32 位 dll 就好,下载地址如下:https://github.com/3gstudent/test/blob/master/calc.dll
2、测试 64 位系统
64 位系统,虽然 SysWOW64 文件夹下也包含 32 位的 msdtc.exe,但是 MSDTC 服务只启动 64 位的 msdtc.exe
因此,不支持 32 位 oci.dll 的加载
3、通用测试
经实际测试,MSDTC 服务不是域环境特有,工作组环境下默认也会启动 MSDTC 服务
也就是说,该利用方法不仅适用于域环境,工作组环境也同样适用
4、以管理员权限加载 oci.dll(降权启动)
上述方法会以 system 权限加载 oci.dll,提供一个以管理员权限加载 oci.dll(降权启动)的方法:
管理员权限 cmd 执行:
msdtc -install
启动的 calc.exe 为 high 权限,如下图
0x06 检测防御
检测:
检测%windir%\system32\是否包含可疑 oci.dll
防御:
对于普通用户主机,建议禁用服务 MSDTC
0x07 小结
本文介绍了 MSDTC 的相关利用技巧,不仅能用作后门,同样可用于程序的降权启动。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论