FTP یا File Transfer Protocol یا پروتکل انتقال فایل یک پروتکل لایه 7 (لایه کاربرد) است که با هدف انتقال فایل بین کامپیوترها بوجود آمده است. این پروتکل به کاربران اجازه میدهد که فایلهای خود را در شبکههای مبتنی بر TCP/IP انتقال دهند. این شبکه میتواند شبکه داخلی یا حتی شبکه اینترنت باشد.
این پروتکل در سال 1971 توسط ابـهی بـوشن (Abhay Bhushan) توسعه داده شد.
از آنجایی که FTP توانسته مشکل دیرینه انتقال فایل بین کامپیوترها را حل کند، بسیار مجبوب است. کاربرد این پروتکل بسیار گسترده و البته مشخص میباشد. برای مثال یک سازمان بوسیله این پروتکل، این امکان را به کارمندان خود میدهد که فایلها را در سطح سازمان به اشتراک بگذارند.
یک ارتباط FTP به اینصورت است که یک FTP سرور وجود دارد که مدیریت فایلهای ذخیره شده برروی سرور را به عهده دارد. سپس کاربران مجاز به آدرس سرور متصل میشوند و فایلهایی را دانلود و یا آپلود میکنند.
در یک ارتباط FTP دو کانال وجود دارد:
•کانال دستور (Command Channel)
•کانال داده (Data Channel)
همانطور که از اسم آن پیداست، کانال دستور برای انتقال دستورات و پاسخ آنها بین کلاینت و سرور میباشد. این تبادلات از طریق پورت 21 انجام میشود.
برای مثال وقتی یک کاربر میخواهد به یک سرور FTP وصل شود و یا میخواهد درخواست دانلود و یا آپلود بدهد، این درخواست از کانال دستور یا همان Command Channel منتقل میشود. در اصل کنترل FTP از این کانال صورت میگیرد.
در کنار کانال دستور، یک کانال به اسم داده وجود دارد که دیتا از طریق آن منتقل میشود. یعنی بعد از اینکه کاربر و سرور از طریق کانال دستور، ارتباط خود را برقرار و دستورات موردنظر را تبادل کردند، داده موردنظرشان را از کانال داده منتقل میکنند. پورت مربوط به کانال داده وابسته به نوع انتقال داده میباشد. اگر از Active Mode استفاده شود، پورت 20 در نظر گرفته میشود. اما در Passive Mode یک پورت تصادفی انتخاب میشود. پس یعنی FTP را میتوان در دو حالت Active و Passive در نظر گرفت.
مُد فعال یا همان Active Mode، حالت قدیمیتر FTP است. این مُد به طور خلاصه به اینصورت است که در ابتدا کاربر از یک پورت تصادفی به پورت 21 از سرور دستور PORT را ارسال میکند تا به سرور بفهماند که از چه پورتی در حال برقراری ارتباط میباشد. سپس سرور از پورت 20 خود به پورتی از سیستم کاربر که در مرحله قبل متوجه آن شد، دادهها را ارسال میکند.
مد Passive حالتی است که در آن کاربر ارتباط را با ارسال دستور PASV به پورت 21 سرور، آغاز میکند. با این دستور کاربر به سرور میگوید که یک پورت را برای من باز کن تا از طریق آن بتوانیم داده موردنظر را رد و بدل کنیم. FTP در جواب این درخواست یک پورت را باز میکند و شماره پورت را به کاربر اعلام میکند. سپس کاربر به پورتی که در جوابِ سرور به او اعلام شده است، وصل میشود و دیتا را رد و بدل میکند.
به طور کلی در دنیای کامپیوتر، نشست (نِشَست) یا همان Session به بازهای گفته میشود که در آن “دو یا چند دستگاه” و یا “یک کاربر با یک برنامه” تعامل دارند. هدف از ایجاد نِشَست این است که اطلاعات به صورت Stateful نگهداری و استفاده شوند.
کاربرد نشست
استفاده از سازوکار نشست یا سشن امکانات زیادی را هم برای کاربران و هم برای توسعهدهندگان به همراه دارد. در حضور سشن، کاربران راحتتر با سرویس ارائه شده تعامل میکنند. چراکه اطلاعات و درخواستها را میتوانند بصورت جامع به جریان بندازند.
همچنین توسعهدهندگان میتواند راحتتر درخواستهای کاربران را کنترل و خدمترسانی کنند. علاوه بر این، میتوانند با تحلیل دادههای جمعآوری شده از عملیات کاربران، رفتار آنها را آنالیز کنند.
یعنی برای مثال، اگر کاربری درخواستی ارسال میکند، مشخص باشد که قبلا چه درخواستهایی ارسال کرده است و به عبارتی تاریخچه عملیات آن مشخص باشد.
پروتکل HTTP، یک پروتکل Stateless میباشد. یعنی State هر کانکشن در ارتباط HTTP نگهداری نمیشود. یعنی در یک ارتباط HTTP، هر بار که درخواستی را به سرور ارسال میکنید، انگار یک کاربر جدید (در اصل یک مرورگر جدید) درخواست را ارسال کرده است. این یعنی همان مفهوم Stateless بودن! یعنی State را نگهداری نمیکند و هیچ وقت اطلاع ندارد که کاربری که الان در حال ارسال درخواست هست، آیا قبلا هم درخواستی ارسال کرده یا خیر.
Statless بودن پروتکل HTTP این نتیجه را خواهد داشت که اگر شما داخل یک فروشگاه اینترنتی باشید و جنس اول را به سبد خرید اضافه کنید، و سپس صفحه را رفرش کنید، خواهید دید که سبد خالی هست! چراکه HTTP خاطرش نیست که شما چه کاربری هستید و قبلا چه درخواستیهایی را به سرور ارسال کردید. هر بار که شما صفحه را رفرش میکنید، گویی شخص جدیدی وارد سایت شده است! اما راه حل چیست؟ مرسومترین روش برای حل این مشکل استفاده از Session یا نِشَست میباشد. راهحلهای دیگری نظیر کوکی نیز وجود دارد که قبلا مورد بررسی قرار دادیم.
پس یکی از موارد استفاده از نشست، در دنیای وب میباشد. به این صورت که، کاربر وقتی تعامل خود با سرویس مبتنی بر وب را شروع میکند، یک نِشَست تشکیل شده و از این به بعد کاربر از طریق آن درخواستهای خود را ارسال میکند. به واسطه وجود این نشست، درخواستهای کاربر به صورت Stateful جریان پیدا میکند. توجه کنید که این تنها یکی از کاربردهای نشست میباشد و مفهوم آن در زمینههای مختلف مورد استفاده قرار میگیرد.
یکی دیگر از مزیتهایی که استفاده از نشست با خود به همراه دارد، آنالیز رفتار کاربران است. این مساله در دنیای امروز از اهمیت بسیار بالایی برخوردار است. تعیین رفتار مشتریان در یک فروشگاه اینترنتی گرفته تا کاربرانی که با سیستمعامل خود تعامل میکنند. به همین واسطه، مدت زمان حضور کاربر در بخشهای مختلف، میزان تمایل به ماژولهای مختلف یک برنامه، تعداد کلیک برروی ماژولهای مختلف و … همگی جز مواردی هستند که از نشست کاربران قابل تحلیلاند.
بطور کلی مراحل ایجاد یک نشست به اینصورت است که ابتدا یک کاربر از طریق محیط کاربری پیشِ روی خود، به یک سرویس لاگین میکند. در صورتی که لاگین موفقیتآمیز باشد، برنامه پذیرنده یک نِشَست (Session) و یک شماره نشست (Session ID) برای تشخیص آن ایجاد میکند. از این به بعد کاربر درخواستهایی که دارد را در بستر نشستِ ایجاد شده مطرح میکند، یعنی شماره نشست یا همان Session ID را به همراه درخواستهای خود ارسال میکند تا پذیرنده متوجه شود که درخواستهای دریافتی متعلق به کدام کاربر است.
اطلاعاتی که از وب اپلیکیشن و یا وبسایت قابل دسترسی است بسیار مهم میباشد. چه از دید یک مهاجم که هر چه اطلاعات بیشتری داشته باشد، حمله راحتتر و البته قدرتمندتری را انجام میدهد. و چه از دید یک متخصص تستنفوذ که باید بداند چه اطلاعاتی از طریق اسکن وبسایت، نشت پیدا کند. یکی از ابزارهای جمعآوری اطلاعات whatweb میباشد.
در زمینه جمعآوری اطلاعات با ابزارهای زیادی از جمله amap، metagoofile، nmap، Recon-NG و … آشنا شدیم. البته برخی از این ابزارها نظیر nmap تنها یک ابزار ساده جمعآوری اطلاعات نیستند و میتوان عملیات گستردهتری با آنها انجام داد. (برای مشاهده ویدیو رایگان هر ابزار برروی نام آن کلیک کنید.)
ابزار WhatWeb نیز هم در زمینه جمعآوری اطلاعات و هم در زمینه آنالیز وباپلیکیشنها کاربرد دارد. این ابزار تعداد بسیار زیادی پلاگین دارد که هر کدام از این پلاگینها برای بخشی از اسکن استفاده میشود. پلاگینهایی برای تشخیص وب سرور، آنالیز CMS، تشخیص سیستمعامل سرور هدف و … مورد استفاده قرار میگیرند.
همچنین WhatWeb این امکان را دارد که با مشخص کردن Aggression Level برای آن، مشخص کنیم که اسکن در چه سطحی انجام شود. سطوح قابل انتخاب Stealthy، Aggressive و Heavy میباشد.
این حالت، حالت پیشفرض ابزار میباشد. در این حالت ابزار کمترین درخواستها را به سمت سرور ارسال میکند. عدم ارسال درخواستهای زیاد و جلوگیری از Noisy بودن اسکن، هدف اصلی این حالت است. مزیت دیگر این حالت این است که با توجه به تعداد درخواستهای کمی که ارسال میکند، سرعت بالاتری نیز دارد.
در این حالت تعداد درخواستهای ارسال شده به سمت هدف بیشتر است. به اینصورت که اگر درخواستی به سمت سرور ارسال شود و اصطلاحا math رخ دهد (یکی از پلاگینها تطابق داشته باشد با جواب دریافت شده) ابزار درخواستهای بیشتری را نیز ارسال خواهد کرد. طبیعی است که این حالت از حالت Stealthy کندتر ولی کاملتر است.
در این حالت تعداد بسیار زیادی درخواست به سمت هدف ارسال میشود. بدلیل حجم زیاد درخواستها، نباید انتظار داشته باشیم که اسکن انجام شده در این حالت، بزودی به اتمام برسد.
در ادامه سری ویدیوهای تست نفوذ وب از آکادمی ترجنس، به بررسی ابزار Uniscan میپردازیم.
همواره طی ویدیوها از اهمیت فاز جمعآوری اطلاعات سخت گفتهایم. همچنین در این زمینه با ابزارهای زیادی از جمله amap، metagoofile، nmap، Recon-NG و … آشنا شدیم. البته برخی از این ابزارها نظیر nmap تنها یک ابزار ساده جمعآوری اطلاعات نیستند و میتوان عملیات گستردهتری با آنها انجام داد. (برای مشاهده ویدیو رایگان هر ابزار برروی نام آن کلیک کنید.)
اما بسیاری از این ابزارها از پیچیدگیهای خاص خود برخوردارند. برای مثال ابزار nmap بدلیل اینکه تنها یک ابزار تک منظوره نیست و عملیات بسیار متنوعی را میتوان با آن انجام داد، از پیچیدگی بالاتری به نسبت دیگری ابزارها برخوردار است.
بنابراین به افرادی تازه کار در زمینه تست نفوذ وب، توصیه میشود که با ابزارهای سبکتر شروع کنند. منظور از ابزارهای سبکتر، ابزارهایی با کارایی کم و بی فایده نیست. بلکه منظور ابزارهایی است که آپشنهای کمتری دارند و کاربر به هنگام کار کردن با آنها درگیر جزییات نمیشود.
همچنین در نظر داشته باشید که Uniscan با اینکه در ابتدا به عنوان یک اسکنر آسیبپذیریهای وب مطرح شد، اما اکنون بیشتر در فاز جمعآوری اطلاعات از آن استفاده میشود.
ابزار UniScan، بصورت پیشفرض برروی کالی و پروت نصب هست. اگر از توزیع لینوکسی دیگری استفاده میکنید، براحتی بوسیله پکیج منیجر میتونید UniScan را نصب کنید. برای مثال در توزیعهای مبتنی بر دبین:
sudo apt install uniscan
توجه کنید که ابزار UniScan هم نسخه گرافیکی دارد و هم نسخه مبتنی بر خط فرمان. برای دسترسی به نسخه گرافیکی دستور uniscan-gui را درون ترمینال وارد کنید. طبیعی است که برای دسترسی به نسخه CLI نیز میتوانید دستور uniscan را درون ترمینال وارد کنید.
در این Less Than 5 بیشتر با ابزار uniscan آشنا میشویم.
کوکی یک تکه کوچک دیتا هست که به هنگام ملاقات یک وبسایت، توسط مرورگر برروی سیستم کاربر ذخیره میشود. هدف از ذخیره کردن این تکه کوچک دیتا این است که اطلاعات به صورت Stateful نگهداری و استفاده شوند تا استفاده از وبسایت برای کاربر سادهتر شود.
قبل از توضیح بیشتر لازم هست با مقداری مقدمات درمورد وب آشنا شویم.
پروتکل HTTP، یک پروتکل Stateless میباشد. یعنی State هر کانکشن در ارتباط HTTP نگهداری نمیشود. یعنی تو یه ارتباط HTTP، هر بار که درخواستی رو به سرور ارسال میکنید، انگار یک کاربر جدید (در اصل یک مرورگر جدید) درخواست را ارسال کرده است. خیلی ساده بخوایم بگیم، HTTP ذهن نداره و همه چی رو فراموش میکنه! این یعنی همون Stateless بودن! یعنی State را نگهداری نمیکند و هیچ وقت اطلاع ندارد که کاربری که الان در حال ارسال درخواست هست، آیا قبلا هم درخواستی ارسال کرده یا خیر.
یکی از مشکلاتی که ممکن است ایجاد شود اینست که اگر شما داخل یک فروشگاه اینترنتی برید و جنس اول رو به سبد کالا اضافه کنید، و بعد صفحه رو رفرش کنید، میبینید که سبد خالی هست! چرا؟ چون HTTP یادش نیست که شما کی هستید و قبلا چه درخواستی رو به سرور ارسال کردید. هر بار که شما صفحه رو رفرش میکنید، انگاری شخص جدیدی وارد سایت شده است! اما راه حل چیه؟ کوکی! کوکی دقیقا همون چیزی هست که به ما کمک میکنه تا اطلاعات رو بصورت Stateful انتقال بدیم.
کاربرد کوکی بطور کلی در دو مورد خلاصه میشه: •نگهداری اطلاعات بصورت Stateful •دنبال کردن فعالیتهای کاربر در یک سایت
که البته این دو هدف همپوشانی زیادی با یکدیگر دارند.
پس هدف کوکی این است که کاربر راحتتر با وبسایت کار کند. برای مثال، سبد خرید داشته باشد، مجبور نباشد هر بار نامکاربری و رمزعبور خود را تایپ کند و … . توجه داشته باشید که کوکی، یک مهفوم سمتِ کلاینت هست و این اطلاعات درون مرورگر ذخیره میشود.
بطور خلاصه، وقتی یک درخواست HTTP به سمت سرور ارسال میشود، سرور میتواند در پاسخ به آن درخواست، یک یا چند سربرگ (Header) از نوع Set-Cookie در پاسخی که میدهد، قرار دهد. از این به بعد کاربر میتواند با قرار دادن مقادیر قرمز رنگ به عنوان کوکی در درخواستهای بعدی، State ارتباط و دادهها را مشخص کند.
یعنی کاربر این مقادیر را در مرورگر دارد و از این به بعد میتواند درخواستهای خود را به همراه هِدِر کوکی مشخص کند:
در نهایت توجه داشته باشید که کوکی درون مرورگر ذخیره میشود. پس حتی اگر یک شخص مرورگر خود را عوض کند، کوکیها دیگر کوکیهای قبلی نخواهند بود.
باید توجه داشت که کوکی به تنهایی میتواند مشکلات امنیتی زیادی را به همراه داشته باشد. همچنین به نسبت Session، اطلاعات کمتری را میتوان از طریق آن ذخیره کرد. پس در یک مقایسه رو در رو بین مکانیزم استفاده از Session و کوکی، میتوان گفت که کوکی ضعیفتر از Session میباشد.
ترجنس | thregence.ir
آکادمی ترجنس | edu.thregence.ir
اینستاگرام | instagram.com/thregence
تلگرام | t.me/thregence
یوتوب | https://bit.ly/30mGowo
آپارات | aparat.com/thregence