Python 远程调用MetaSploit

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

[email protected]:~# apt-get install python-setuptools

[email protected]:~# 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 执行上述文件:

[email protected]:~# /etc/init.d/postgresql start

[email protected]:~# sudo -u postgres /usr/bin/psql < createdb_sql.txt

(4)创建setup.rc文件

db_connect msf:[email protected]/msf

load msgrpc User=msf Pass=‘abc123‘

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

[email protected]:~# msfconsole -r setup.rc

* SNIP *

[*] Processing setup.rc for ERB directives.

resource (setup.rc)> db_connect msf:[email protected]/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的类库,不过很不好用

[email protected]:~# git clone git://github.com/SpiderLabs/msfrpc.git msfrpc

[email protected]:~# cd msfrpc/python-msfrpc

[email protected]:~# 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 远程调用MetaSploit,布布扣,bubuko.com

时间: 2024-10-13 11:18:52

Python 远程调用MetaSploit的相关文章

Python 远程调用脚本之 RPC

最近有个监控需求,需要远程执行集群每个节点上的脚本,并获取脚本执行结果,为了安全起见不需要账号密码登陆主机,要求只需要调用远程脚本模块的方法就能实现. 总结下python进行远程调用脚本方法: 登陆主机执行脚本,python模块支持如 pssh.pexpect.paramiko 以远程方法调用(不需要登陆主机),python模块 rpyc,支持分布式 socket 方式,稍显复杂,需要熟悉网络协议,起点比较高 rpyc支持远程调用.分布式计算,以较少代码量实现需复杂socket编程,本文主要介绍

Python中实现远程调用(RPC、RMI)简单例子

说白了,远程调用就是将对象名.函数名.参数等传递给远程服务器,服务器将处理结果返回给客户端 远程调用使得调用远程服务器的对象.方法的方式就和调用本地对象.方法的方式差不多,因为我们通过网络编程把这些都隐藏起来了.远程调用是分布式系统的基础. 远程调用一般分为两种,远程过程调用(RPC)和远程方法调用(RMI). RPC RPC属于函数级别的远程调用,其多是通过HTTP传输数据,数据形式有XML.JSON.序列化数据等.在此,用python做一个xml-rpc的示例. 先给服务器端server.p

(转)RabbitMQ消息队列(七):适用于云计算集群的远程调用(RPC)

在云计算环境中,很多时候需要用它其他机器的计算资源,我们有可能会在接收到Message进行处理时,会把一部分计算任务分配到其他节点来完成.那么,RabbitMQ如何使用RPC呢?在本篇文章中,我们将会通过其它节点求来斐波纳契完成示例. 1. 客户端接口 Client interface 为了展示一个RPC服务是如何使用的,我们将创建一段很简单的客户端class. 它将会向外提供名字为call的函数,这个call会发送RPC请求并且阻塞知道收到RPC运算的结果.代码如下: [python] vie

[转载] 基于Dubbo的Hessian协议实现远程调用

转载自http://shiyanjun.cn/archives/349.html Dubbo基于Hessian实现了自己Hessian协议,可以直接通过配置的Dubbo内置的其他协议,在服务消费方进行远程调用,也就是说,服务调用方需要使用Java语言来基于Dubbo调用提供方服务,限制了服务调用方.同时,使用Dubbo的Hessian协议实现提供方服务,而调用方可以使用标准的Hessian接口来调用,原生的Hessian协议已经支持多语言客户端调用,支持语言如下所示: Java:http://h

JSON-RPC轻量级远程调用协议介绍及使用

JSON-RPC轻量级远程调用协议介绍及使用 目录 技术简介    1 一.JSON-RPC协议描述    1 二.JSON-RPC调用简单示例    1 2.1.服务器端Java调用示例    1 2.2.Java客户端调用示例    2 2.3.PHP客户端调用示例    2 2.3.JavaScript客户端调用示例    2 2.4.直接GET请求进行调用    2 三.JSON-RPC总结    3 参考文档    3 技术简介 json-rpc是基于json的跨语言远程调用协议,比x

【PHP】远程调用以及RPC框架

前言 一个项目,从开始到版本更新,一直到最后的版本维护.功能在不断增多,对应的代码量也在不断增加,也就意味着项目变得更不可维护,这时候,我们需要用拆分的方式将一个项目打散,以便开发团队更好的对项目进行维护. 分模块 这个阶段,一般也是项目的初级阶段,由于人手不够,一个服务端的接口项目只有一个开发进行维护,根据开发的习惯,会把项目分成若干个模块进行开发,在一个项目下进行部署. 这样做的缺点在于项目会随着版本更新而变得不可维护. 分项目 随着每个模块功能的不断完善,代码变得更加臃肿.这时候需要对项目

RabbitMQ(七):适用于云计算集群的远程调用(RPC)

 在云计算环境中,很多时候需要用它其他机器的计算资源,我们有可能会在接收到Message进行处理时,会把一部分计算任务分配到其他节点来完成.那么,RabbitMQ如何使用RPC呢?在本篇文章中,我们将会通过其它节点求来斐波纳契完成示例. 1. 客户端接口 Client interface 为了展示一个RPC服务是如何使用的,我们将创建一段很简单的客户端class. 它将会向外提供名字为call的函数,这个call会发送RPC请求并且阻塞知道收到RPC运算的结果.代码如下: [python]

基于Dubbo的Hessian协议实现远程调用

Dubbo基于Hessian实现了自己Hessian协议,可以直接通过配置的Dubbo内置的其他协议,在服务消费方进行远程调用,也就是说,服务调用方需要使用Java语言来基于Dubbo调用提供方服务,限制了服务调用方.同时,使用Dubbo的Hessian协议实现提供方服务,而调用方可以使用标准的Hessian接口来调用,原生的Hessian协议已经支持多语言客户端调用,支持语言如下所示: Java:http://hessian.caucho.com/#Java Flash/Flex:http:/

Java 常用远程调用协议比较

一.综述本文比较了RMI,Hessian,Burlap,Httpinvoker,web service等5种通讯协议的在不同的数据结构和不同数据量时的传输性能.RMI是java语言本身提供的远程通讯协议,稳定高效,是EJB的基础.但它只能用于JAVA程序之间的通讯.Hessian和Burlap是caucho公司提供的开源协议,基于HTTP传输,服务端不用开防火墙端口.协议的规范公开,可以用于任意语言.Httpinvoker是SpringFramework提供的远程通讯协议,只能用于JAVA程序间