بروت فورس دایرکتوری ها با پایتون !

سلام امید وارم حالتون خوب باشه ! تو این بخش میخوام راجب بروت فورس دایرکتوری های یک وب سایت باهاتون یک صحبتی داشته باشم ! اما اینکه بروت فورس چی هست پیشنهاد میکنم روی این لینک کلیک کنیناما خب بخوام یه توضیح خودمونی ترم بهتون بدم باید بگم که شما فرض رو بر این بزارید که میخواید بیایید و از طریق یه اسکریپت ساده تست بکنید که ایا این یوزر نیم و پسورد من مثلا در سایت اینستاگرام معتبره یا نه؟؟خب برای این کار دقیقا چه اتفاقی میوفته؟؟ بخوام خلاصه بگم اینطور هست که اسکریپت مثلا رفته با کتابخانه requests و...به فیلد username و password صفحه لاگین اینستاگرام از طریق متد POST یوزر و پسورد خودشو ارسال میکنه! اینجا برای ما دوحالت میتونه رخ بده! یا لاگین میشیم..یا لاگین نمیشیم...و اینجا ما شرط تعیین میکنیم که اگر لاگین شد بیا و برای ما این متن رو نشون بده و اگرم نشد بیا مثلا فلان کار رو انجام بده!خب این ینی چی الان>؟؟خب مشخصه...شما وقتی میای به صفحه لاگین یه سایت مثلا اینستاگرام درخواست میفرستی و میگی این یوزر و پسوردم اوکی بود بیا فلان متن رو نشون بده...ما خب میتونیم بیاییم و یک یوزر تعریف کنیم و یک لیست عظیمی از پسورد لیست های خودمونو که توی یک فایل txt هستن هم به اسکریپت بدیم و بگیم روی این یوزر پسورد اولی رو تست کن.اگه نشد برو پسورد بعدی..اگه اونم نشد بازم بعدی و....البته این یک مثال ساده برای تفهیم هرچه بهتر این مطلب بود و این توضیحی که دادم قطعا یک سری جاهاش انتقادات فنی داره..مثلا اینستاگرام نمیزاره بیشتر از 19 پسورد رو تست کنی اگر اشتباه نکنم..و بعدش برات محدودیت تعیین میکنه ! پس باید این بخش رو هم اضافه کنم که باید از پراکسی لیست هم استفاده کنیم..در کل از این مبحث بگذریم..بریم سر بروت فورس کردن دایرکتوری ها !الان برای مثال شما فرض رو بر این بزارید که ما مثلا میخوایم دایرکتوری های یک سایت وردپرسی رو مورد عنایت قرار بدیم. برای مثال سایتQadiryolme.com خب حالا میخوایم بفهمیم آیا بر روی سایت اقای قدیر یلمه(البته چنین سایتی من تاحال نزدم?) مثلا بخش theme وجود داره؟؟ ایا فایل wp-config.php وجود داره؟؟ ایا فایل robots.txt وجود داره؟؟ یابرای مثال ایا یه پوشه ای به نام myfile وجود داره ؟خب اگه وجود داشته باشه و اقای یلمه یک سری مسایل امنیتی رو رعایت نکرده باشه میتونیم به محتوای فایلای اون دایرکتوری هم دسترسی پیدا کنیم ! البته اینارو به عنوان مثال دارم میگم که شما بتونین درک کنین..الان روی وردپرس شما برید بصورت معمول نمیتونین محتوای فایل wp-config رو مشاهده کنین..مگر اینکه سطح دسترسی تون رو افزایش بدید!خب ما میتونیم بیاییم و یه لیست خوب و خفن اماده کنیم و روی سایت مورد نظر تست بکنیم!اما برای این کار قبلش باید یه سری کارا انجام بدیم (:در وحله اول میاییم کتابخانه های مورد نظرمون رو import میکنیم و اصل کاری مون این وسط requests هست ! اگه دقیقا نمیدونین کار با این کتابخونه چطوریه و با نحوه نصبش آشنایی ندارید روی این لینک کلیک کنید (: البته اینم بگم که از کتابخانه sys برای مدیریت خطاهام exit کردن از اسکریپت در صورت خطا دادن برنامه و از کتابخانه time برای تعیین ارسال درخواست به صفحه مورد نظر مثلا در فلان تایم استفاده میکنم..برای مثال من میگم هر یک صدم ثانیه بیا و درخواست بفرست ! و در اخر از کتابخانه colorama برای رنگی کردن string های خودم استفاده میکنم !خب اینم از لیستی که اماده کردم و میخوام روی سایت مورد نظرم تست بشه! خب من اینجا اومدم و یک فانکشنش تعریف کردم و اسمشو گذاشتم brute-forceو بعدش اومدم یک try:except تعریف کردم و داخلش یک متنی رو به رنگ قرمز چاپ میکنم تحت عنوان لطفا آدرس سایت مورد نظرت رو بده ! و توی خط بعدیش یک متغیری به نام url تعریف میکنم و داخلش مقدار input رو قرار میدم و داخلش یک str تعریف میکنم که حین اجرای اسکریپت نمایش داده بشه تحت عنوان ادرستو وارد کن ! حالا شما هرچی عشقت کشید بنویس ?فرض رو بر این میزاریم که ما آدرس رو وارد کردیم ولی ما باید اینجا بیاییم و برسی کنیم که آیا ادرسی که ما قرار دادیم http داره؟؟ دقت بکنید که کتابخانه requests به دارا بودن http یا https خیلی حساسه و نباید آدرس مورد نظرتون رو همینطوری بزارید..مثلا qadiryolme.com و خب توی خط بعدی میاییم برسی های لازم رو انجام میدیم میگیم اگه تو اون آدرسی که در متغیر url وارد شد http بود که بود نبودم که خب میگیم خودت بیا و بهش اضافه کن ?البته من لازمه که دوباره عکس رو اپلود کنم تا هم من راحت این مقاله رو بنویسم..هم شما مجبور نباشی حین توضیحات من هی بالا بری و اون عکسو ک داخلش کد نوشته برسی کنی (:خب حالا من اینجا اومدم و یک حلقه for تعریف کردم و به زبان ساده گفتم: داداش بیا یه متغیری بساز به نام (i) و مقدار اون رو قرار بده با مقداری که توی متغیر search بود(همون لیست خودمون) و بعد از اون اومدم و یک تایم اسلیپ ست کردم که ماجرا شو اخر کار توضیخ میدم !خلاصه که ما اومدیم و یک متغیری به نام ur ساختیم و اون رو برابر کردیم با ادرسی که میخوایم بهش اتک بدیم و به علاوه یک / اسلش و به علاوه i خب این ینی چی دقیقا؟؟ ببینین ادرس ک همون آدرس خودمونه..ولی اون وسط / اسلش چیکار میکنه؟؟خب این خیلی سادست وقتی ما داخل ابزار میاییم و ادرس qadiryolme.com رو میزنیم بعدش باید در مرحله اول robots.txt که توی لیست خودمون تعریف کردیم باید تست شه..خب الان ما این وسط / اسلش نزاریم چ اتفاقی میوفته؟؟qadiryolmerobots.txtخب اینطوری ک ادرسمون کلا اشتباه میشه ):ur = (url+&quot/&quot+i)پس ما میاییم و بعد از url خودمون یه دونه / اسلش اضافه میکنیم و بعدش i رو قرار میدیم..خب اون i این وسط چیکارس دقیقا؟؟ اگه متوجه نمیشید باید بگم که بالاتر ما تمامی محتوای متغیر search رو ریختیم تو i و خب بعد از url و اسلش / باید اسم دایرکتوری یا فایل ما بیاد دیگه ?بازم گذاشتمش ک ?خب بعدش اومدیم یه متغیری به نام reqs تعریف کردیم و اونو با متغیر requests متد GET قرار دادم! حالا دیگه این بخششو توضیح نمیدم چرا ک سطح این اموزش تا حدودی متوسطه هست و اون بالا چرا من لینک واسه کتابخونه requests تعریف کردم ؟ ? درکل بگذریم..بعد از اینکه متد get رو تعریف کردم داخل پرانتز بهش ur رو پاس دادم..پس این متغیر الان بر اساس مقداری که واسش تعریف شده دقیقا میاد چیکار میکنه؟؟دقیقا میاد از طریق متد GET یه درخواست میفرسته! طبق چیزی که ما توی ur تعریف کردیم مثلاqadiryolme.ir/robots.txtارسال میشه و در خط بعدیش من توضیح دادم که اگر کد برگشتی که از این صفحه دریافت میکنی برای مثال برابر بود با 200 که خب این کد معنیش اینه ک عملیات اوکی بوده ! و طبق تعریفم اگر status_code برابر بود با بیا و با رنگ سبز برام ادرسی که اوکی بوده رو چاپ کن..اگرم بعد یه else هم اونجا گذاشتم ک اگر اوکی نبود بیا و با رنگ قرمز ادرسی که تست کردی و اوکی نبود رو بفرست ! بعد از اون دوباره یه try:except تعریف کردم و داخلش یه ورودی خالی گرفتم که دقت بکنید من try:except خودم رو زیر اون متغیر url تعریف کردم..یعنی هم ردیف با اون اولا بگم که من این کدی ک دارم بهتون نشون میدم مال فریم ورک کوچولوی شخصی خودمه و اون چونکه توی یک حلقه while قرار داده شده برا همین وقتی خروجی نمایش داده میشه مستقیما دوباره حلقه اجرا میشه و چو من توی خود اول حلقه تعریف کردم که هربار به این بخش رسیدی صفحه رو clear کن برا همین همه چی پاک میشد..واسه همین یه input خالی تعریف کردیم تا زمانی ک کاربر نیاد و Enter نزنه وارد اون مسیری ک میخوای بشی نشو! و خب توی except چرا اومدم تعریف کردم که اگه خطایی دیدی بیا و exit بکن ! این واسه اینه که اگه کاربر رو همین input که ما ازش ورودی میگیریم بیاد Ctrrl+c زد بیا و اون ارور رو نشون نده(همین ارور طولانی که معمولا تعریف میکنه و ما همیشه تو دیباگ هامون ازش استفاده میکنه ) و از برنامه خارج بشه!خب امید وارم از این بخش هم لذت کافی رو برده باشید !این مقاله اختصاصی برای مجموعه لین اکادمی می باشد (: