了解smb和DCERPC的远程命令执行功能

时间:2018-07-15 07:35:01

标签: python smb dce impacket

我试图了解通过impacket脚本在Windows上执行远程命令的所有方法:

https://www.coresecurity.com/corelabs-research/open-source-tools/impacket

https://github.com/CoreSecurity/impacket

我了解psexec.py和smbexec.py的高级解释,它们如何在远程端创建服务并通过cmd.exe -c运行命令,但我无法理解如何在远程Windows通过SMB托管。 smb是否不应该主要用于文件传输和打印机共享?阅读源代码,我在笔记中看到它们使用DCERPC创建此服务,这是smb协议的一部分吗?我发现的DCERPC上的所有资源都令人困惑,而不是专注于其服务创建功能。查看atexec.py的源代码,它说它也通过DCERPC与Windows主机的任务计划程序服务交互。可以用来与远程机器上运行的所有服务进行交互吗?

谢谢!

1 个答案:

答案 0 :(得分:3)

DCERPC https://en.wikipedia.org/wiki/DCE/RPC):初始协议,它用作 MSRPC https://en.wikipedia.org/wiki/Microsoft_RPC)的模板。

MSRPC是一种在远端执行功能并传输数据(这些功能的参数)的方法。这不是直接在远程端执行远程OS命令的方法。

SMB https://en.wikipedia.org/wiki/Server_Message_Block)是文件共享协议,主要用于访问Windows文件服务器上的文件。另外,它提供了命名管道(https://msdn.microsoft.com/en-us/library/cc239733.aspx),这是在本地进程和远程进程之间传输数据的一种方式。

MSRPC的一种常见方法是通过SMB上的命名管道使用它,其优点是MSRPC直接接近SMB提供的安全层。

实际上,MSRPC是Windows世界中最重要但鲜为人知的协议之一。

MSRPC或SMB都与远程执行Shell命令无关。

执行远程命令的一种常见方法是:

  • 将文件(通过SMB)复制到远程端(Windows服务EXE)
  • 在远程端创建注册表项(以便复制的Windows服务已安装且可启动)
  • 启动Windows服务。 启动的Windows服务可以使用任何网络协议(例如MSRPC)接收命令并执行命令。
  • 工作完成后,可以卸载Windows服务(删除注册表项并删除文件)。

实际上,这就是PSEXEC所做的。

  

我在DCERPC上发现的所有资源都令人困惑,而不是   专注于其服务创建功能。

是的,这只是一个远程过程调用协议。但是它可以用于在远程端启动过程,该过程可以执行任何操作,例如创建服务。

  

查看atexec.py的源代码,它说它与   Windows主机的任务计划程序服务,也通过DCERPC。   它可以用于与远程运行的所有服务进行交互吗?   盒子?

有些MSRPC命令处理Task Scheduler,而另一些处理常规的服务启动和停止命令。

最后几句话:

SMB / CIFS及其周围的协议确实非常复杂且难以理解。试图了解如何应对例如远程服务控制,但这可能要花费很长的时间。

也许此页面(使用Java尝试控制Windows服务)也可能有助于理解。

https://dev.c-ware.de/confluence/pages/viewpage.action?pageId=15007754