Metasploit进阶笔记之如何使用 Metasploit Messagepack RPC

RPC API 使你能够通过基于 HTTP 的远程过程调用(RPC)服务以编程方式控制 Metasploit 框架和商业产品。RPC 服务是一组消息类型和远程方法,提供了外部应用程序与 Web 应用程序交互的结构化方式。你可以使用 RPC 接口本地或远程执行 Metasploit 命令,执行基本任务,如运行模块、与数据库通信、与会话交互、导出数据以及生成报告。

Metasploit 产品主要使用 Ruby 编写,这是使用远程 API 的最简单方式。然而,除了 Ruby 之外,任何支持 HTTPS 和 MessagePack 的语言,如 Python、Java 和 C,也可以用来利用 RPC API。

目前 Metasploit 的 RPC 有两个实现:

  1. HTTP 和 MessagePack — 本指南将涵盖
  2. 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 <opt> - 访问 msfrpcd 的密码。
  • -S - 启用或禁用 RPC 套接字上的 SSL。将此值设置为 true 或 false。默认情况下启用 SSL。
  • -U <opt> - 访问 msfrpcd 的用户名。
  • -a <opt> - msfrpcd 运行的地址。
  • -p <opt> - 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|false>
--rpc-uri URI
--rpc-user USERNAME
--rpc-pass PASSWORD
--rpc-token TOKEN
--rpc-config CONFIG-FILE
--rpc-help

辅助模块示例

要执行 scanner/smb/smb_enumshares 模块:

>> rpc.call("module.execute", "auxiliary", "scanner/smb/smb_enumshares", {"RHOSTS" => "192.168.175.135", "SMBUSER" => "Administrator", "SMBPASS" => "Password1"})
=> {"job_id"=>0, "uuid"=>"yJWES2Y6d4MRyfFLWjqhqvon"}

请注意,结果返回了 job_iduuid,这些可以用来跟踪模块的进度。

提供的参数包括:

  • "module.execute" - 你想要对模块调用的方法
  • "auxiliary" - 模块类型
  • "scanner/smb/smb_enumshares" - 你想要运行的具体模块
  • {"RHOSTS" => "192.168.175.135", "SMBUSER" => "Administrator", "SMBPASS" => "Password1"} - 模块的数据存储选项

查询所有运行状态:

>> rpc.call('module.running_stats')
=> {"waiting"=>[], "running"=>[], "results"=>["yJWES2Y6d4MRyfFLWjqhqvon"]}

请注意,输出包含了先前的 uuid,现在已被标记为完成。要查看给定 UUID 的模块结果,使用以下命令:

>> rpc.call('module.results', 'yJWES2Y6d4MRyfFLWjqhqvon')
=> {"status"=>"completed", "result"=>nil}

列出当前的工作任务,可以使用以下命令:

>> rpc.call('job.list')
=> {"0"=>"Exploit: windows/smb/ms17_010_psexec"}

列出当前会话,可以使用以下命令:

>> rpc.call('session.list')
=>
{1=>
  {"type"=>"meterpreter",
   "tunnel_local"=>"192.168.8.125:4444",
   "tunnel_peer"=>"192.168.8.125:63504",
   "via_exploit"=>"exploit/windows/smb/psexec",
   "via_payload"=>"payload/windows/meterpreter/reverse_tcp",
   "desc"=>"Meterpreter",
   "info"=>"NT AUTHORITY\\SYSTEM @ DC1",
   "workspace"=>"false",
   "session_host"=>"192.168.175.135",
   "session_port"=>445,
   "target_host"=>"192.168.175.135",
   "username"=>"cgranleese",
   "uuid"=>"hqtjjwgx",
   "exploit_uuid"=>"hldyog8j",
   "routes"=>"",
   "arch"=>"x86",
   "platform"=>"windows"}}

终止会话

要停止一个活动会话,可以使用 session.stop 命令并传递会话ID。要找到会话ID,可以使用 session.list 命令。

rpc.call('session.stop', 1)

4、示例工作流

让我们看一下使用上面讨论的命令的工作流,了解完整的操作流程。

辅助模块工作流

[*] The 'rpc' object holds the RPC client interface 
[*] Use rpc.call('group.command') to make RPC calls

>> rpc.call("module.execute", "auxiliary", "scanner/smb/smb_enumshares", {"RHOSTS" => "xxx.xxx.xxx.xxx", "SMBUSER" => "user", "SMBPASS" => "password"})
=> {"job_id"=>0, "uuid"=>"yJWES2Y6d4MRyfFLWjqhqvon"}
>> rpc.call('module.running_stats')
=> {"waiting"=>[], "running"=>[], "results"=>["yJWES2Y6d4MRyfFLWjqhqvon"]}
>> rpc.call('module.results', 'yJWES2Y6d4MRyfFLWjqhqvon')
=> {"status"=>"completed", "result"=>nil}

漏洞利用模块工作流

这个工作流使用了 module.check 方法来检查目标是否易受该模块的漏洞利用攻击:

[*] The 'rpc' object holds the RPC client interface 
[*] Use rpc.call('group.command') to make RPC calls 

>> rpc.call("module.check", "exploit", "windows/smb/ms17_010_psexec", {"RHOSTS" => xxx.xxx.xxx.xxx", "SMBUSER" => "user", "SMBPASS" => "password"}) 
=> {"job_id"=>0, "uuid"=>"q3eewYtM3LqxuVN5ai1Wya3i"} 
>> rpc.call('module.running_stats') 
=> {"waiting"=>[], "running"=>[], "results"=>["q3eewYtM3LqxuVN5ai1Wya3i"]} 
>> rpc.call('module.results', 'q3eewYtM3LqxuVN5ai1Wya3i') 
=> {"status"=>"completed", "result"=>{"code"=>"vulnerable", "message"=>"The target is vulnerable.", "reason"=>nil, "details"=>{"os"=>"Windows 8.1 9600", "arch"=>"x64"}}}

module.result 调用显示目标是易受攻击的,并返回了关于目标的附加元数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

人间酒中仙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值