-
دوشنبه, ۱۷ شهریور ۱۳۹۹، ۰۸:۰۶ ق.ظ
-
۸۹۹
اسکریپت سرشماری فایل های یک وبسایت در پایتون
درود به همه !
امروز درخدمت شما هستیم با اسکریپت سرشمار فایل های یک وبسایت . هر وبسایتی یک فضای اختصاصی مربوط به خود روی اینترنت دارد که فایل های مورد نیاز خود را روی آن فضا نگهداری میکند . کار اسکریپت ما این است که با استفاده از یک حمله ی Brute Force ، برخی فایل های مهم روی آن فضای اختصاصی را تشخیص دهد .
برای نوشتن این اسکریپت نیاز به کتابخانه ی colorama برای چاپ متون رنگی داریم.
نصب colorama در لینوکس :
MrPython@debian:~$ sudo pip3 install colorama
نصب colorama در ویندوز :
C:\> pip install colorama
همانطور که در بالا گفتیم این اسکریپت از حمله ی Brute Force از نوع Dictionery Attack بهره میبره یعنی ما یک word list میدیم به اسکریپت که اسامی یه سری فایل داخلش نوشته شده . مثلا :
login.php index.php robots.txt index.php about.php login.php security.php logout.php setup.php instructions.php phpinfo.php
بعد هر کدوم از اینا رو میچسبونیم به آخر آدرس وبسایت و میبینیم کدومش صحیحه . برای مثال فرض کنید ما میخوایم فایل های وبسایت به نام www.example.com رو سرشماری کنیم . برای اینکار ، هر کدام از کلمه های لیست بالا رو میچسبونیم به آخر وبسایت و میبینیم کدومش کار میده و درسته . یعنی به شکل زیر:
www.example.com/login.php
www.example.com/index.php
www.example.com/robots.txt
....
و نهایتا میتوانیم برخی فایل های مهم روی سرور رو تشخیص بدیم .
خب میریم سراغ سورس کد :
from requests import get from colorama import init , Fore
init() # colorama initialize
url = input("Url : ")
if url.endswith("/"): url = url[:-1]
wordlist = input("Word List : ") correct_words = []
for word in open(wordlist): word = word.strip("\n") address = url + "/" + word response = get(address) if response.status_code == 200: print(Fore.GREEN + "[+] {} exists".format(word)) correct_words.append(word) else: print(Fore.RED + "[-] {} not exists".format(word))
print("--------------------") print(Fore.GREEN + "[+] Found Words : ") for word in correct_words: print("- " + word)
توضیح سورس کد : در ابتدا ماژول های مورد نیاز رو ایمپورت کردیم . get برای ارسال درخواست به یک آدرس مشخص در اینترنت و colorama برای نوشتن متون رنگی .
در خط بعد با استفاده از تابع ()init اومدیم کتابخونه ی colorama رو آماده سازی کردیم . سپس یه ورودی از کاربر گرفتیم که آدرس وبسایت هستش و ریختیم داخل متغییر url .بعد چک کردیم اگه آخرش / بود ، آخرشو حذف کنه (یعنی / رو حذف کنه از آخرش) .سپس آدرس word list رو پرسیدیم . در خط بعد یک لیست خالی به اسم correct_words تعریف کردیم که بعدا میایم فایل هایی که وجود داشتن رو داخلش مینویسیم .
سپس روی wordlist یه حلقه ی for نوشتیم تا به تک تک خط های فایل دسترسی داشته باشیم . در خط اول حلقه ی for اومدیم n\ آخر هر خط رو پاک کردیم .سپس اومدیم کلمه ی مورد نظر رو چسبوندیم به آخر آدرس وبسایت که از کاربر گرفتیم و ریختیم داخل متغییر address . پس از اون با استفاده از تابع get یه در خواست فرستادیم به لینک ساخته شده و نتیجه درخواست رو ریختیم داخل متغییر response . اگه اون فایل وجود داشته باشه ، کد وضعیت درخواست عدد ۲۰۰ هستش . بنابراین در خط بعد چک کردیم اگه کد وضعیت درخواست برابر ۲۰۰ بود چاپ کنه که اون فایل وجود داره (با رنگ سبز) و به لیست correct_words اضافش کنه . در غیر این صورت چاپ کنه که این فایل وجود نداشت (با رنگ قرمز) .
نهایتا در آخر سورس کد یه for دیگه نوشتیم و با استفاده از اون اومدیم اسم تمام فایل های پیدا شده رو از طریق لیست correct_words چاپ کردیم .
در اجرای سورس کد توجه کنید که وقتی میخواین آدرس وبسایت رو بدید حتما http یا https قبلش داشته باشه . برای مثال :
https://www.example.com یا http://www.example.com
پس از اجرا و دادن ورودی های مورد نیاز به برنامه ، شروع به سرشماری فایل های روی سرور میکند :
یا حق !
Telegram Channel : @mrpythonblog