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 元组(Tuple)操作详解
Mar 11 Python
教你如何在Django 1.6中正确使用 Signal
Jun 22 Python
浅谈Python的异常处理
Jun 19 Python
浅析Python中MySQLdb的事务处理功能
Sep 21 Python
Python制作刷网页流量工具
Apr 23 Python
在python中只选取列表中某一纵列的方法
Nov 28 Python
使用python3批量下载rbsp数据的示例代码
Dec 20 Python
tensorflow获取预训练模型某层参数并赋值到当前网络指定层方式
Jan 24 Python
keras topN显示,自编写代码案例
Jul 03 Python
Python使用eval函数执行动态标表达式过程详解
Oct 17 Python
python 下划线的不同用法
Oct 24 Python
python全面解析接口返回数据
Feb 12 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
建立动态的WML站点(一)
2006/10/09 PHP
Yii2实现上下联动下拉框功能的方法
2016/08/10 PHP
PHP函数rtrim()使用中的怪异现象分析
2017/02/24 PHP
JavaScript高级程序设计 错误处理与调试学习笔记
2011/09/10 Javascript
jquery tab插件精简版分享
2011/09/10 Javascript
javascript类型转换示例
2014/04/29 Javascript
深入探寻seajs的模块化与加载方式
2015/04/14 Javascript
Jquery实现仿京东商城省市联动菜单
2015/11/19 Javascript
javascript实现C语言经典程序题
2015/11/29 Javascript
jQuery Validate插件实现表单强大的验证功能
2015/12/18 Javascript
jQuery ajax分页插件实例代码
2016/01/27 Javascript
js创建对象几种方式的优缺点对比
2016/09/28 Javascript
基于zepto.js实现手机相册功能
2017/07/11 Javascript
老生常谈JavaScript获取CSS样式的方法(兼容各浏览器)
2018/09/19 Javascript
深入理解Vue.js轻量高效的前端组件化方案
2018/12/10 Javascript
JS实现骰子3D旋转效果
2019/10/24 Javascript
JS实现图片幻灯片效果代码实例
2020/05/21 Javascript
[57:28]2018DOTA2亚洲邀请赛 4.6 淘汰赛 TNC vs Liquid 第一场
2018/04/10 DOTA
[01:14]2019完美世界城市挑战赛(秋季赛)全国总决赛精彩花絮
2020/01/08 DOTA
Python字符串格式化
2015/06/15 Python
Django rest framework工具包简单用法示例
2018/07/20 Python
Python协程 yield与协程greenlet简单用法示例
2019/11/22 Python
pycharm配置python 设置pip安装源为豆瓣源
2021/02/05 Python
pycharm配置安装autopep8自动规范代码的实现
2021/03/02 Python
商务专员岗位职责
2013/11/23 职场文书
教师现实表现材料
2014/02/14 职场文书
七夕情人节促销方案
2014/06/07 职场文书
国际贸易毕业生求职信
2014/07/20 职场文书
个性与发展自我评价
2015/03/06 职场文书
2014年度个人工作总结范文
2015/03/09 职场文书
2016自主招生教师推荐信范文
2015/03/23 职场文书
学生会干部任命书
2015/09/21 职场文书
iPhone13将有八大升级
2021/04/15 数码科技
详解Redis基本命令与使用场景
2021/06/01 Redis
HTML实现仿Windows桌面主题特效的实现
2022/06/28 HTML / CSS
详解apache编译安装httpd-2.4.54及三种风格的init程序特点和区别
2022/07/15 Servers