Python实现远程调用MetaSploit的方法

603次阅读  |  发布于5年以前

本文较为详细的讲述了Python实现远程调用MetaSploit的方法,对Python的学习来说有很好的参考价值。具体实现方法如下:

(1)安装Python的msgpack类库,MSF官方文档中的数据序列化标准就是参照msgpack。


    root@kali:~# apt-get install python-setuptools
    root@kali:~# easy_install msgpack-python

(2)创建createdb_sql.txt:


    create database msf;
    create user msf with password 'msf123';
    grant all privileges on database msf to msf;

(3)在PostgreSQL 执行上述文件:


    root@kali:~# /etc/init.d/postgresql start
    root@kali:~# sudo -u postgres /usr/bin/psql < createdb_sql.txt

(4)创建setup.rc文件


    db_connect msf:msf123@127.0.0.1/msf
    load msgrpc User=msf Pass='abc123'

(5)启动MSF并执行载入文件


    root@kali:~# msfconsole -r setup.rc
    * SNIP *
    [*] Processing setup.rc for ERB directives.
    resource (setup.rc)> db_connect msf:msf123@127.0.0.1/msf
    [*] Rebuilding the module cache in the background...
    resource (setup.rc)> load msgrpc User=msf Pass='abc123'
    [*] MSGRPC Service: 127.0.0.1:55552
    [*] MSGRPC Username: msf
    [*] MSGRPC Password: abc123
    [*] Successfully loaded plugin: msgrpc

(6)Github上有一个Python的类库,不过很不好用


    root@kali:~# git clone git://github.com/SpiderLabs/msfrpc.git msfrpc
    root@kali:~# cd msfrpc/python-msfrpc
    root@kali:~# python setup.py install

测试代码如下:


    #!/usr/bin/env python
    import msgpack
    import httplib

    class Msfrpc:
     class MsfError(Exception):
      def __init__(self,msg):
       self.msg = msg
      def __str__(self):
       return repr(self.msg)

     class MsfAuthError(MsfError):
      def __init__(self,msg):
       self.msg = msg

     def __init__(self,opts=[]):
      self.host = opts.get('host') or "127.0.0.1"
      self.port = opts.get('port') or 55552
      self.uri = opts.get('uri') or "/api/"
      self.ssl = opts.get('ssl') or False
      self.authenticated = False
      self.token = False
      self.headers = {"Content-type" : "binary/message-pack" }
      if self.ssl:
       self.client = httplib.HTTPSConnection(self.host,self.port)
      else:
       self.client = httplib.HTTPConnection(self.host,self.port)

     def encode(self,data):
      return msgpack.packb(data)
     def decode(self,data):
      return msgpack.unpackb(data)

     def call(self,meth,opts = []):
      if meth != "auth.login":
       if not self.authenticated:
        raise self.MsfAuthError("MsfRPC: Not Authenticated")

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

      opts.insert(0,meth)
      params = self.encode(opts)
      self.client.request("POST",self.uri,params,self.headers)
      resp = self.client.getresponse()
      return self.decode(resp.read()) 

     def login(self,user,password):
      ret = self.call('auth.login',[user,password])
      if ret.get('result') == 'success':
    self.authenticated = True
        self.token = ret.get('token')
        return True
      else:
        raise self.MsfAuthError("MsfRPC: Authentication failed")

    if __name__ == '__main__':

     # Create a new instance of the Msfrpc client with the default options
     client = Msfrpc({})

     # Login to the msfmsg server using the password "abc123"
     client.login('msf','abc123')

     # Get a list of the exploits from the server
     mod = client.call('module.exploits')

     # Grab the first item from the modules value of the returned dict
     print "Compatible payloads for : %s\n" % mod['modules'][0]

     # Get the list of compatible payloads for the first option
     ret = client.call('module.compatible_payloads',[mod['modules'][0]])
     for i in (ret.get('payloads')):
      print "\t%s" % i

相信本文所述方法对大家的Python学习可以起到一定的学习借鉴作用。

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8