RPC API 使你能够通过基于 HTTP 的远程过程调用(RPC)服务以编程方式控制 Metasploit 框架和商业产品。RPC 服务是一组消息类型和远程方法,提供了外部应用程序与 Web 应用程序交互的结构化方式。你可以使用 RPC 接口本地或远程执行 Metasploit 命令,执行基本任务,如运行模块、与数据库通信、与会话交互、导出数据以及生成报告。
Metasploit 产品主要使用 Ruby 编写,这是使用远程 API 的最简单方式。然而,除了 Ruby 之外,任何支持 HTTPS 和 MessagePack 的语言,如 Python、Java 和 C,也可以用来利用 RPC API。
目前 Metasploit 的 RPC 有两个实现:
- HTTP 和 MessagePack — 本指南将涵盖
- HTTP 和 JSON — 另有指南
请注意,MessagePack 和 JSON RPC 服务提供非常相似的操作,值得查看这两个文档。
一、启动 Messagepack RPC 服务器
在使用 RPC 接口之前,你必须启动 RPC 服务器。根据你使用的 Metasploit 产品,有几种方式可以启动服务器。在此示例中,我们将使用 MSFRPD 登录工具,但其他方法可以在这里找到。
使用以下命令设置用户名和密码,当前示例使用的是用户 user 和密码 pass: - $ ruby msfrpcd -U <username> -P <pass> -f
复制代码
二、使用 MSFRPC 登录工具连接
msfrpc 登录工具使你能够通过 msfrpcd 连接到 RPC 服务器。如果你是通过 msfrpcd 工具启动的服务器,作为 Framework 用户,请进入你的框架目录,或者作为 Pro 用户,进入 metasploit/apps/pro/msf3 目录,然后运行以下命令连接到服务器: - $ ruby msfrpc -U <username> -P <pass> -a <ip address>
复制代码
你可以提供以下选项:
- -P - 访问 msfrpcd 的密码。
- -S - 启用或禁用 RPC 套接字上的 SSL。将此值设置为 true 或 false。默认情况下启用 SSL。
- -U - 访问 msfrpcd 的用户名。
- -a - msfrpcd 运行的地址。
- -p - msfrpc 监听的端口。默认端口是 55553。
例如,如果你想连接到本地服务器,可以输入以下命令: - $ ruby msfrpc -U user -P pass123 -a 127.0.0.1
复制代码
这将返回以下响应: - [*] exec: ruby msfrpc -U user -P pass123 -a 127.0.0.1
- [*] The 'rpc' object holds the RPC client interface
- [*] Use rpc.call('group.command') to make RPC calls
复制代码
三、RPC工作流示例
1、启动服务器
使用以下命令启动服务器,并配置用户名和密码: - $ ruby msfrpcd -U user -P pass -f
复制代码
2、在第二个终端标签中启动客户端
使用在之前命令中设置的用户名和密码访问客户端: - # Start the client in second terminal tab
- $ ruby msfrpc -U user -P pass -a 0.0.0.0
复制代码
一个交互式提示符将会打开: - [*] The 'rpc' object holds the RPC client interface
- [*] Use rpc.call('group.command') to make RPC calls
复制代码
3、命令
在查看命令之前,我们将列出可以传递给 RPC 调用的选项: - --rpc-host HOST
- --rpc-port PORT
- --rpc-ssl <true
复制代码 |