代码之家  ›  专栏  ›  技术社区  ›  user134167

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

  •  1
  • user134167  · 技术社区  · 7 年前

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

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

    https://github.com/CoreSecurity/impacket

    我理解psexec.py和smbexec.py的高级解释,它们如何在远程端创建服务并通过 cmd.exe -c 但我不明白如何通过smb在远程windows主机上创建服务。SMB不应该主要用于文件传输和打印机共享吗?阅读我在注释中看到的使用dcerpc创建此服务的源代码,这是smb协议的一部分吗?我在dcerpc上发现的所有资源都有点混乱,而且没有集中在它的服务创建功能上。在查看atexec.py的源代码时,它说它还通过dcerpc与windows主机的任务调度程序服务交互。它是否可以用于与远程设备上运行的所有服务进行交互?

    谢谢!

    1 回复  |  直到 6 年前
        1
  •  3
  •   Rainer Schaack    7 年前

    DCERPC公司 ( https://en.wikipedia.org/wiki/DCE/RPC ):初始协议,用作 msrpc公司 ( https://en.wikipedia.org/wiki/Microsoft_RPC )中。

    msrpc是一种在远程端执行函数和传输数据(参数到这些函数)的方法。这不是一种在远程端直接执行远程操作系统命令的方法。

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

    msrpc的一种常见方法是通过smb上的命名管道使用它,其优点是可以直接访问smb提供的安全层。

    事实上,msrpc是windows世界中最重要但却鲜为人知的协议之一。

    msrpc和smb都与远程执行shell命令无关。

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

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

    实际上,psexec就是这么做的。

    我在dcerpc上找到的所有资源都有点混乱,而不是 专注于其服务创造能力。

    是的,它只是一个远程过程调用协议。但是它可以用来在远程启动一个过程,这个过程可以做任何事情,比如创建一个服务。

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

    有一些msrpc命令用于处理任务调度程序,还有一些msrpc命令用于处理一般的服务启动和停止命令。

    最后几句话:

    SMB/CIFS及其周围的协议非常复杂,难以理解。试图理解如何处理远程服务控制似乎是可以的,但这可能是一段很长的旅程。

    也许这个页面(使用java来控制windows服务)也有助于理解。

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