اسکریپت سرشماری فایل های یک وبسایت در پایتون :: Mr Python | مستر پایتون

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

  • ۸۵۰

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

درود به همه !

 

امروز درخدمت شما هستیم با اسکریپت سرشمار فایل های یک وبسایت . هر وبسایتی یک فضای اختصاصی مربوط به خود روی اینترنت دارد که فایل های مورد نیاز خود را روی آن فضا نگهداری میکند . کار اسکریپت ما این است که با استفاده از یک حمله ی 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

  • سلام ، عالی و کاربردی بود . میشه یه مطلب بذارید که چجوری وقتی اسکریپت مون ران میشه رنگ بک گراند ترمینال رو عوض کنیم ؟

    @_@

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