DCERPC ( https://en.wikipedia.org/wiki/DCE/RPC ):初始协议,用作MSRPC ( https://en.wikipedia.org/wiki/Microsoft_RPC ) 的模板。
MSRPC 是一种在远程端执行函数和传输数据(这些函数的参数)的方法。这不是在远程端直接执行远程操作系统命令的方法。
SMB ( https://en.wikipedia.org/wiki/Server_Message_Block ) 是文件共享协议,主要用于访问 Windows 文件服务器上的文件。此外,它还提供了命名管道 ( https://msdn.microsoft.com/en-us/library/cc239733.aspx ),这是一种在本地进程和远程进程之间传输数据的方法。
MSRPC 的一种常见方法是通过 SMB 上的命名管道使用它,其优点是 SMB 提供的安全层可以直接用于 MSRPC。
事实上,MSRPC 是 Windows 世界中最重要但鲜为人知的协议之一。
MSRPC 和 SMB 都与远程执行 shell 命令无关。
执行远程命令的一种常见方法是:
- 将文件(通过 SMB)复制到远程端(Windows 服务 EXE)
- 在远程端创建注册表项(以便安装并启动复制的 Windows 服务)
- 启动 Windows 服务。启动的 Windows 服务可以使用任何网络协议(例如 MSRPC)来接收命令并执行它们。
- 工作完成后,可以卸载 Windows 服务(删除注册表项并删除文件)。
事实上,这就是 PSEXEC 所做的。
我发现的 DCERPC 上的所有资源都有点令人困惑,并且没有关注其服务创建功能。
是的,它只是一个远程过程调用协议。但它可以用来在远程端启动一个过程,它可以做任何事情,例如创建一个服务。
查看 atexec.py 的源代码,它说它与 windows 主机的任务调度程序服务交互,也是通过 DCERPC 进行的。它可以用来与远程盒子上运行的所有服务进行交互吗?
有一些处理任务计划程序的 MSRPC 命令,还有一些处理通用服务启动和停止命令的命令。
最后最后几句话:
SMB / CIFS 和周围的协议非常复杂且难以理解。尝试了解如何处理例如远程服务控制似乎没问题,但这可能是一个很长的旅程。
也许这个页面(它使用Java来尝试控制Windows服务)也可以帮助理解。
https://dev.c-ware.de/confluence/pages/viewpage.action?pageId=15007754