Python实现远程调用MetaSploit的方法


Posted in Python onAugust 22, 2014

本文较为详细的讲述了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学习可以起到一定的学习借鉴作用。

Python 相关文章推荐
python zip文件 压缩
Dec 24 Python
深入剖析Python的爬虫框架Scrapy的结构与运作流程
Jan 20 Python
python daemon守护进程实现
Aug 27 Python
python机器学习实战之树回归详解
Dec 20 Python
Python中的函数式编程:不可变的数据结构
Oct 08 Python
5分钟 Pipenv 上手指南
Dec 20 Python
Python基于OpenCV实现人脸检测并保存
Jul 23 Python
Python实现检测文件的MD5值来查找重复文件案例
Mar 12 Python
Python3爬虫中Splash的知识总结
Jul 10 Python
matplotlib基础绘图命令之errorbar的使用
Aug 13 Python
python list等分并从等分的子集中随机选取一个数
Nov 16 Python
Python系统公网私网流量监控实现流程
Nov 23 Python
Python解释执行原理分析
Aug 22 #Python
Python实现的石头剪子布代码分享
Aug 22 #Python
Python使用MD5加密字符串示例
Aug 22 #Python
Python中让MySQL查询结果返回字典类型的方法
Aug 22 #Python
Python安装Imaging报错:The _imaging C module is not installed问题解决方法
Aug 22 #Python
Python with的用法
Aug 22 #Python
Tornado服务器中绑定域名、虚拟主机的方法
Aug 22 #Python
You might like
php的一些小问题
2010/07/03 PHP
php中实现可以返回多个值的函数实例
2015/03/21 PHP
php mongodb操作类 带几个简单的例子
2016/08/25 PHP
浅谈PHP中的数据传输CURL
2016/09/06 PHP
Laravel5.7 数据库操作迁移的实现方法
2019/04/12 PHP
jQuery一步一步实现跨浏览器的可编辑表格,支持IE、Firefox、Safari、Chrome、Opera
2009/08/28 Javascript
比较详细的关于javascript 解析json的代码
2009/12/16 Javascript
javascript获取当前日期时间及其它操作函数
2011/01/11 Javascript
javascript获取和判断浏览器窗口、屏幕、网页的高度、宽度等
2014/05/08 Javascript
jQuery功能函数详解
2015/02/01 Javascript
node.js连接mongoDB数据库 快速搭建自己的web服务
2016/04/17 Javascript
jQuery实现指定区域外单击关闭指定层的方法【经典】
2016/06/22 Javascript
Angular2  NgModule 模块详解
2016/10/19 Javascript
jsp 网站引入外部css或者js失效问题解决
2016/10/31 Javascript
微信小程序 获取当前地理位置和经纬度实例代码
2016/12/05 Javascript
AngularJS页面传参的5种方式
2017/04/01 Javascript
redux-saga 初识和使用
2018/03/10 Javascript
详解关于Angular4 ng-zorro使用过程中遇到的问题
2018/12/05 Javascript
JS div匀速移动动画与变速移动动画代码实例
2019/03/26 Javascript
layui表格 列自动适应大小失效的解决方法
2019/09/06 Javascript
vue滚动插件better-scroll使用详解
2019/10/18 Javascript
p5.js临摹动态图形的方法
2019/10/23 Javascript
Python查询Mysql时返回字典结构的代码
2012/06/18 Python
Python selenium文件上传方法汇总
2020/11/19 Python
Django 限制用户访问频率的中间件的实现
2018/08/23 Python
用python生成1000个txt文件的方法
2018/10/25 Python
解决Python计算矩阵乘向量,矩阵乘实数的一些小错误
2019/08/26 Python
jupyter notebook中美观显示矩阵实例
2020/04/17 Python
舞会礼服和舞会鞋:PromGirl
2019/04/22 全球购物
移动通信行业实习自我鉴定
2013/09/28 职场文书
函授大专自我鉴定
2013/11/01 职场文书
大学自荐信
2013/12/12 职场文书
热门专业求职信
2014/05/24 职场文书
学习实践科学发展观心得体会
2014/09/10 职场文书
董事长年会致辞
2015/07/29 职场文书
PHP连接MSSQL数据库案例,PHPWAMP多个PHP版本连接SQL Server数据库
2021/04/16 PHP