RPC API的示例用法

下面的脚本提供了如何使用RPC API执行常见任务的示例。这些例子可以在metasploit /应用程序/ pro / api示例

添加一个工作区

         
ruby
1
2
#注意工作空间和项目是一回事
3.
4
require_relative“metasploit_rpc_client”
5
workspace_attrs
6
7
的名字“FooCorp穿透测试”
8
limit_to_network真正的
9
边界“10.2.3.1-10.2.3.24”
10
描述"对福氏关键任务内部地震局域网的测试"
11
12
13
#从CLI设置东西
14
api_tokenARGV0
15
宿主ARGV1
16
17
#创建客户端-ssl设置为真正的安装环境
18
客户端MetasploitRPCClient宿主宿主令牌api_tokenssl港口50505
19
客户端调用“pro.workspace_add”workspace_attrs

清单、下载和生成报告

         
ruby
1
报告列表的例子下载以及通过RPC API生成
2
3.
#使用
4
# ruby report_api_testrb<服务的关键><MSPro实例>' < WorkspaceName >”
5
6
#服务的关键从全局设置生成API令牌需要
7
# Pro授权实例
8
# MSPro实例127.0.0.1如果在本地运行
9
10
11
12
require_relative“metasploit_rpc_client”
13
14
#从CLI设置东西
15
api_tokenARGV0
16
宿主ARGV1
17
workspace_nameARGV2
18
19
#创建客户端
20.
客户端MetasploitRPCClient宿主宿主令牌api_tokenssl港口50505
21
22
# #报告
23
#列出报告类型
24
type_list客户端调用“pro.list_report_types”
25
允许的报表类型:\n#{type_list}
26
27
#列出当前报告
28
# report_list客户端调用“pro.report_list”workspace_name
29
#把“\ n \ nExisting报告:# {report_list} \ n”
30.
31
#下载报告构件
32
# report_artifact_id1
33
#工件客户端调用“pro.report_artifact_download”report_artifact_id
34
# tmp_path“/ tmp / report_ # {report_artifact_id} # {File.extname(工件[' file_path '])}”
35
#文件开放tmp_path' w '|c|c写工件“数据”
36
#把"将报告工件#{report_artifact_id}写入#{tmp_path}"
37
38
#创建报告
39
# report_hash工作空间workspace_name
40
#名称“SuperTest_ # {Time.now.to_i}”
41
# report_type审计
42
# # se_campaign_id1
43
# created_by“whoareyou”
44
# file_formatspdf
45
46
# report_creation客户端调用“pro.start_report”report_hash
47
#把“\ n \ nCreated报告:\ n # {report_creation}”
48
49
##下载报告和子工件
50
# report_id1
51
#报告客户端调用“pro.report_download”report_id
52
#报告“report_artifacts”each_with_index|一个|
53
# tmp_path“/ tmp / report_test_ #{我}_ # {Time.now.to_i} # {File.extname ([' file_path '])}”
54
#文件开放tmp_path' w '|c|c写一个“数据”
55
#把“将报告工件#{report_id}写入#{tmp_path}”
56
#结束

导入数据

         
ruby
1
2
通过RPC API导入数据的示例
3.
4
#使用
5
# ruby import_api_testrb<服务的关键><MSPro实例>
6
<项目名称>的
7
'<导入>文件的完整路径'
8
9
#服务的关键从全局设置生成API令牌需要
10
# Pro授权实例
11
# MSPro实例127.0.0.1如果在本地运行
12
#项目名称要导入的现有工作空间的名称
13
#导入文件路径完全限定的路径,以导入文件的支持
14
#格式
15
16
require_relative“metasploit_rpc_client”
17
18
# CLI参数
19
api_tokenARGV0
20.
宿主ARGV1
21
workspace_nameARGV2
22
import_file_pathARGV3.
23
24
除非api_token&&宿主&&workspace_name
25
提高异常“你必须指定一个API令牌、一个实例地址和一个工作空间名称。”
26
结束
27
除非import_file_path
28
提高异常您必须指定导入文件的路径。
29
结束
30.
31
#创建客户端
32
客户端MetasploitRPCClient宿主宿主令牌api_tokenssl港口50505
33
34
#导入配置
35
import_hash
36
工作空间workspace_name
37
#切换数据存储选项记录除了一些例外就像
38
#这个好用的因而
39
# DS_AUTOTAG_OS真正的
40
# TODO更新与正确的路径
41
DS_PATHimport_file_path
42
43
44
进口客户端调用“pro.start_import”import_hash
45
“\ nStarted导入:\ n #{进口}”

导出数据

         
ruby
1
#导出列表的例子下载和代
2
# RPC API
3.
4
#使用
5
# ruby export_api_testrb<服务的关键><MSPro实例>' < WorkspaceName >”
6
7
#服务的关键从全局设置生成API令牌需要
8
# Pro授权实例
9
# MSPro实例127.0.0.1如果在本地运行
10
11
12
13
require_relative“metasploit_rpc_client”
14
15
#从CLI设置东西
16
api_tokenARGV0
17
宿主ARGV1
18
workspace_nameARGV2
19
20.
#创建客户端
21
客户端MetasploitRPCClient宿主宿主令牌api_tokenssl港口50505
22
23
# # #出口
24
##列出当前导出
25
export_list客户端调用“pro.export_list”workspace_name
26
“现有出口:# {export_list}”
27
28
# #创造出口
29
# export_types“zip_workspace”“xml”“replay_scripts”“pwdump”
30.
# export_configcreated_by“whoareyou”
31
# export_typeexport_types0
32
#工作区workspace_name
33
# export_creation客户端调用“pro.start_export”export_config
34
#把“创建出口:# {export_creation}”
35
36
# #下载出口
37
# export_id1
38
#出口客户端调用“pro.export_download”export_id
39
# tmp_path“/ tmp / export_test_ # {export_id} # {File.extname(出口[' file_path '])}”
40
#文件开放tmp_path' w '|c|c写出口“数据”
41
#把" export #{export_id} to #{tmp_path}"

教程

找到允许我使用已知凭证作为根用户登录的Linux服务器。

让我们来设计测试场景。假设,通过这样或那样的方法,我获得了单个用户Bob的明文密码。我有Bob的Windows证书,可以很容易地通过RDP或psexec访问他的机器。我已经确定Bob是一个Linux管理员。我希望确定哪些Linux服务器允许我使用Bob泄露的密码作为“root”登录。有许多方法可以实现这一点。下面就是其中一种方法。

         
1
nmap 10.0.1.1/24 -p22 -oG ssh_scan.gnmap

文件,ssh_scan。gnmap,包含我们的活动主机和SSH的状态。我们需要清理结果文件,只关注SSH“打开”的主机。下面的命令就是这样做的,并将目标ip保存到一个单独的文件:

         
1
猫ssh_scan。Gnmap | grep open | cut -d " " -f 2 > ssh_hosts.txt

现在我们有一个名为ssh_hosts.txt的文件,其中包含运行SSH的IP地址列表。接下来,让我们启动Metasploit和MSGRPC接口:

         
1
msfconsole msf exploit(handler) > load msgrpc Pass=pa55w0rd
2
[*] MSGRPC服务:127.0.0.1:55552
3.
[*] MSGRPC用户名:msf
4
[*] MSGRPC密码:pa55w0rd
5
[*]成功加载插件:msgrpc msf exploit(handler) >

此时,Metasploit的RPC接口正在侦听端口55552。我们可以继续编写Python脚本,以自动化测试SSH登录的任务。我强烈建议您在继续之前阅读Metasploit的远程API文档。下面的伪代码满足了我们的需求:

  • 认证到Metasploit的MSGRPC接口(用户名:msf,密码:pa55w0rd)。
  • 创建Metasploit控制台。
  • 对于文件中的每个Linux主机,使用Bob泄露的密码's3cr3t'运行SSH_login模块。
  • 销毁Metasploit控制台(清理以保留资源)。
  • 与任何已建立的SSH会话进行交互。

下面是完整的Python源代码清单(请注意,我不是程序员)。为了继续进行测试,我更新了脚本顶部的用户设置,以反映“root”的用户名和“s3cr3t”的密码(这是Bob泄露的密码)。保存更改并运行Python脚本:

         
1
。/ msfrpc_ssh_scan.py
2
(+)身份验证成功
3.
[+]主机0创建!测试主机10.0.0.43
4
[+]清单会话……会话ID目标器1 root@10.0.1.43

查看会话清单,该脚本在主机10.0.1.43上使用Bob的密码成功地进行了“root”身份验证。我们之前启动的Metasploit控制台证实了这一事实:

         
1
无国界医生组织利用(处理器)>
2
[*] Command shell session 1 opened(10.0.2.10:43863 -> 10.0.1.43:22)…
3.
MSF利用(处理程序)>会话
4
活动会话
5
===============
6
1 shell linux SSH root:s3cr3t (10.0.1.43:22) 10.0.2.10:43863 -> 10.0.1.43:22 (10.0.1.43)