资讯专栏INFORMATION COLUMN

Python 实现 FTP 弱口令扫描器

peixn / 834人阅读

摘要:一项目说明项目简介本次实验通过使用实现一个弱口令扫描器开始,入门渗透测试技术,实验涉及协议原理,库的使用等知识点。找到密码并不会终止程序,而是会继续扫描其他主机的弱口令,直到所有的主机都扫描一遍。

一、项目说明 1.1 项目简介

本次实验通过使用 Python 实现一个 FTP 弱口令扫描器开始,入门 Python 渗透测试技术,实验涉及 FTP 协议原理,ftplib 库的使用等知识点。

本教程由作者向实验楼投稿发布,完整教程及在线练习地址:Python 实现 FTP 弱口令扫描器

1.2 目标学员

具有Python语言基础,不会的同学请到隔壁班先去学一下

1.3 Python版本

Python3.x

1.4 知识点

本实验涉及如下知识点:

认识Ftp服务器

Ftplib库的使用

argparse库的使用

Ubuntu下Ftp服务器的搭建

1.5 效果图

本节实验将实现如下功能的 FTP 弱口令扫描器:

二、 理论基础

以下内容整理自百度百科,参考链接:

百度百科-FTP服务器

2.1 FTP服务器

FTP服务器(File Transfer Protocol Server)是在互联网上提供文件存储和访问服务的计算机,它们依照FTP协议提供服务。 FTP是File Transfer Protocol(文件传输协议)。顾名思义,就是专门用来传输文件的协议。简单地说,支持FTP协议的服务器就是FTP服务器。

FTP是仅基于TCP的服务,不支持UDP。与众不同的是FTP使用2个端口,一个数据端口和一个命令端口(也可叫做控制端口)。通常来说这两个端口是21(命令端口)和20(数据端口)。但FTP 工作方式的不同,数据端口并不总是20。这就是主动与被动FTP的最大不同之处。主要有两种工作模式:

主动FTP

FTP服务器的控制端口是21,数据端口是20,所以在做静态映射的时候只需要开放21端口即可,他会用20端口和客户端主动的发起连接。

被动FTP

服务器的控制端口是21,数据端口是随机的,且是客户端去连接对应的数据端口,所以在做静态的映射话只开放21端口是不可以的。此时需要做DMZ。

2.2 Ftp扫描器实现方案

本课程开发Ftp扫描器主要从以下两个方面着手:

扫描匿名Ftp

Ftp匿名登录的扫描主要应用于批量扫描中,多带带针对一个Ftp服务器进行扫描的话成功几率比较小,不过也不排除成功的可能。估计讲到这里的时候,有的同学就有疑问了!!!现在还有人不设置密码吗?那得傻到啥程度?用东北的话来说那不就是傻狍子吗!!!(开个玩笑,免得同学们看我的教程睡着了!)不过言归正传,很多网站都开放Ftp服务方便用户下载资源(这个允许匿名登录不足为奇),更疯狂的是网站管理人员为了方便网站访问软件的更新也开放了Ftp匿名登录(估计不是自己家的网站......)。这样就给了我们很多机会,尤其后者的服务器很容易就受到攻击,后期我会讲解Ftp目录下可以搜到web页面之后怎样拿到Shell(大家多多关注我的教程吧,还有很多精品课程等着你!)。

扫描Ftp弱口令

Ftp弱口令扫描其实就是暴力破解,为何我们不称为暴力破解呢?因为我们只是扫描一些简单的密码组合,并不是所有可能得密码组合,而且我们也没有那么多时间去暴力破解,谁让我们活不了成千上万年呢!只是一个密码而已,弱口令扫不到就算了,天涯何处无芳草何必单恋一枝花呢!不过你要非喜欢这个Ftp服务器的话,以后我再教大家别的方法渗透服务器!

三、代码实现 3.1 Ftp匿名扫描器的实现

这里我们要用到Python的ftplib库中的Ftp这个类,Ftp这个类实现了Ftp客户端的大多数功能,比如连接Ftp服务器、查看服务器中的文件、上传、下载文件等功能,详细用法可以查看一下文档,以后碰到问题也要养成先看文档的习惯!接下来我们来定义anonScan(hostname)这个函数以实现扫描可匿名登录的Ftp服务器。代码如下:

#匿名登录扫描
def anonScan(hostname):                 #参数是主机名
    try:
        with FTP(hostname) as ftp:      #创建Ftp对象
            ftp.login()                 #Ftp匿名登录
            print("
[*] " + str(hostname) + " FTP Anonymous login successful!") #不抛出异常则表明登录成功
            return True
    except Exception as e:              #抛出异常则表明匿名登录失败
        print("
[-] " + str(hostname) + " FTP Anonymous logon failure!")
        return False

代码很简短,主要在注释中解释了代码的含义。这里说一下这个函数的思路,首先用主机名构造了一个Ftp对象(即ftp),然后用这个ftp调用不带任何参数的login()函数即表示要匿名登录这个Ftp服务器,如果登录过程中没有产生异常,则表明匿名登录成功,否则匿名登录失败!

3.2 Ftp弱口令的扫描

Ftp弱口令的扫描依赖于用户名和密码字典,我们的实验环境中会提供 pwd.txt 作为密码字典,字典的格式如下图所示:

接下来我们针对字典中的格式来实现Ftp弱口令的扫描,代码如下:

#暴力破解
def vlcLogin(hostname, pwdFile):                #参数(主机名,字典文件)
    try:
        with open(pwdFile, "r") as pf:          #打开字典文件
            for line in pf.readlines():         #循环读取字典文件中的每一行
                time.sleep(1)                   #等待1秒
                userName = line.split(":")[0]   #从读取的内容中取出用户名
                passWord = line.split(":")[1].strip("
").strip("
") #从读取的内容中取出密码
                print("[+] Trying: " + userName + ":" + passWord)
                try:
                    with FTP(hostname) as ftp:  #以主机名为参数构造Ftp对象
                        ftp.login(userName, passWord)   #使用读取出的用户名密码登录Ftp服务器
                        #如果没有产生异常则表示登录成功,打印主机名、用户名和密码
                        print("
[+] " + str(hostname) + " FTP Login successful: "+ 
                              userName + ":" + passWord)
                        return (userName, passWord)
                except Exception as e:
                    # 产生异常表示没有登录成功,这里我们不用管它,继续尝试其他用户名、密码
                    pass
    except IOError as e:
        print("Error: the password file does not exist!")
    print("
[-] Cannot crack the FTP password, please change the password dictionary try again!")
    return (None,None)

这段代码其实就是循环从字典中读取用户名和密码并尝试登陆,登陆成功则表明找到用户名和密码。由于这个函数将主机名定义成了可以用“,”分割的字符串。找到密码并不会终止程序,而是会继续扫描其他主机的弱口令,直到所有的主机都扫描一遍。

3.3 命令行解析

至此我们的Ftp扫描器已经几乎完成了,代码并不多,也很简单。现在我们需要做的是让我们的脚本可以处理命令行输入,以控制扫描哪些主机。处理命令行参数我们将用到Python中的argparse库,这个库是Python中自带的模块,处理命令行将变得非常简单,下面我们一起见证一下argparse的强大之处,先上代码:

# 这里用描述创建了ArgumentParser对象
    parser = argparse.ArgumentParser(description = "FTP Scanner")
    # 添加-H命令dest可以理解为咱们解析时获取-H参数后面值的变量名,help是这个命令的帮助信息
    parser.add_argument("-H",dest="hostName",help="The host list with ","space")
    parser.add_argument("-f",dest="pwdFile",help="Password dictionary file")
    options = None
    try:
        options = parser.parse_args()

    except:
        print(parser.parse_args(["-h"]))
        exit(0)
    hostNames = str(options.hostName).split(",")
    pwdFile = options.pwdFile

通过argparse库来解析命令行参数,可以根据添加参数时指定的help关键字的内容来自动生成帮助文档。具体效果如下图所示:

在处理复杂命令的时候argparse的强大就更明显了,由于这个属于Python基础,所以Python库中自带的库这里我就不做过多的介绍了。

四、实验环境搭建测试

本项目完整代码和环境搭建、测试,可在实验楼中查看并在线完成。

五、总结

本次项目实现了Ftp弱口令扫描器,主要用到以下知识点:

Ftp服务器的基本概念

使用ftplib如何一步一步的实现Ftp弱口令扫描器

使用argparse解析命令行参数

实验环境的搭建方法

六、参考文献

《Python绝技--运用Python成为顶级黑客》

《Python黑帽子-- 黑客与渗透测试编程之道 》

:本系列项目教学思路,参考自《Python绝技--运用Python成为顶级黑客》,书中代码和教学思路只做参考,本系列教程全部重新设计并基于Python3.x重写。本系列课程旨在教大家渗透测试,维护网络安全,如用于非法目的,自行承担法律责任!

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/9389.html

相关文章

  • Python 实现 FTP 口令描器

    摘要:一项目说明项目简介本次实验通过使用实现一个弱口令扫描器开始,入门渗透测试技术,实验涉及协议原理,库的使用等知识点。找到密码并不会终止程序,而是会继续扫描其他主机的弱口令,直到所有的主机都扫描一遍。 showImg(https://segmentfault.com/img/bVz0PF); 一、项目说明 1.1 项目简介 本次实验通过使用 Python 实现一个 FTP 弱口令扫描器开始...

    cocopeak 评论0 收藏0
  • Python 实现 FTP 口令描器

    摘要:一项目说明项目简介本次实验通过使用实现一个弱口令扫描器开始,入门渗透测试技术,实验涉及协议原理,库的使用等知识点。找到密码并不会终止程序,而是会继续扫描其他主机的弱口令,直到所有的主机都扫描一遍。 showImg(https://segmentfault.com/img/bVz0PF); 一、项目说明 1.1 项目简介 本次实验通过使用 Python 实现一个 FTP 弱口令扫描器开始...

    graf 评论0 收藏0
  • 渗透Metasploitable主机

    摘要:攻击机靶机一个特制的操作系统,设计初衷作为安全工具测试和演示常见漏洞攻击的环境,默认开放高危端口如等等,而且具有很多未打补丁的高危漏洞漏洞弱口令漏洞如等命令注入漏洞漏洞共享目录配置漏洞管理台默认口令漏洞用户弱口令漏洞爆破后门漏洞等等利用 攻击机:kali 靶机:Metasploitab...

    liuhh 评论0 收藏0
  • linux系统安全及应用

    摘要:二系统引导和登录控制开关机安全控制调整引导设置原则将第一引导设备设为当前系统所在硬盘禁止从其他设备光盘盘网络引导系统将安全级别设为并设置管理员密码。 目录 一、账号安全控制 1.1基本安全措施 1.1.1系统账号的清理 1.1.2密码安全控制 1.1.3命令历史、自动注销 1.2用户切换与...

    孙吉亮 评论0 收藏0
  • 渗透测试——常见服务端口及对应的漏洞汇总

    摘要:一服务类弱口令漏洞利用可以上传包上传慢速攻击文件包含漏洞后台弱口令后台部署包反序列化远程代码执行后台弱口令任意文件泄露反序列化后台弱口令后台部署包测试页面上传反序列化暴力 ...

    2bdenny 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<