什么使通过Windows SMB协议启动服务成为可能?

时间:2018-11-24 15:24:11

标签: windows networking windows-services smb

为什么在Windows中可以通过SMB协议管理服务?

SMB协议用于管理网络共享(文件和目录)和打印机,那么该协议中的哪种机制使其可以与服务进行交互?

1 个答案:

答案 0 :(得分:0)

来自sysinternals article

  

PsExec在远程系统上启动可执行文件并控制输入   并输出可执行文件过程的流,以便您可以   与本地系统中的可执行文件进行交互。 PsExec这样做是   从其可执行映像中提取一个名为Windows的嵌入式Windows服务   Psexesvc并将其复制到远程系统的Admin $共享。   然后,PsExec使用Windows Service Control Manager API,该API具有一个   远程接口,以在远程系统上启动Psexesvc服务。

     

Psexesvc服务创建一个命名管道psexecsvc,PsExec指向该管道   连接并发送命令以告知远程系统上的服务   启动哪个可执行文件以及您指定了哪些选项。如果你   指定-d(不要等待)开关,启动后服务退出   可执行文件;否则,服务将等待可执行文件   终止,然后将退出代码发送回PsExec,以便在其上进行打印   本地控制台。

这是一个非常有创意的技巧。 psexec使用SMB将自己的EXE复制到目标计算机。然后使用Windows服务控制管理器API(不同的协议)在远程计算机上启动exe。缺少的详细信息是在远程计算机上启动psexec的确切API。我进行了一些挖掘,发现OpenSCManager API对此有所帮助。一旦获得了远程机器的服务控制管理器的句柄,就可以使用诸如CreateServiceStartService之类的API来启动远程进程。

所以它本身不是SMB协议。更具体地说,是Windows服务控制管理器使执行与psexec类似的操作成为可能。