توی این چنل بارها سعی کردم راجب پروتکل گافر(gopher) حرف بزنم ولی به دلایلی شما یه محبث امنتی دیگه ای رو ترجیح دادید .
میخوام در مورد این پروتکل با یه سناریو ریل ورد حرف بزنم که صاحبش هنوز نمیدونه مهاجم ها باهاش چه کاری انجام میدن
داستان از چه قراره ؟
برای شروع هیچ وقت روی مین دامین وقتمو نمیزارم و معمولا میزارمش اخر کار
یه سابدامین انتخاب کردم و استارت کارمو روش زدم
رفتم سراغ سورس کد خوندن و بیرون کشیدن فایلای جی اس و روش فاز انداختم تا ببینم چه سرنخی دستگیرم میشه
بعد از کلیک کردن روی تمامی لینک های صفحه بالای صفحه قسمت تسکبار یه باتن وجود داشت که وقتی موس روش hover میشد یه فرم خیلی کوچیک باز میشد که به اسم کانتکت که نمیدونم با چه هدفی یه وب سایت از من میگرفت و یه ایمیل
معمولا همیشه وقتی url میبینم شهود هانتریم مثل هر هانتر دیگه ای بلند داد میزنه ssrf رو تست کن
پس سریع قبل از زدن دکمه ارسال ریکوست رو با برپ خودم کپچر کردم ریکوست من یه پارامتر مهم به اسم اندپوینت رو توی دیتای پست خودش میفرستاد
endpoint=https://yoursite.siteایا اگه من اینپوت رو به سرور خودم تغیر بدم ایا سرور به سرور من درخواست میزنه یا نه ؟
ادرس کلابریتور برپ خودمو گذاشتم و یه درخواست(http/dns) از طرف سرور اسیپ پذیر به کلابریتور ارسال شد .
پس من تا اینجا یه ssrf دارم از نوع blind
ایا میتونم گزارشش بدم ؟
نه باید یه ایمپکتی براش بسازی تا تارگت بدونه چه خطری داره تهدیدش میکنه
خب پس من تا اینجا اپی اصلی سرور رو دارم دو تا راه برای بالا بردن ایمپکت میتونم استفاده کنم .
1 - پورت اسکن
2 - تست کردن اسکیم های مختلف
اولین راهو چجوری میتونیم تست کنیم ؟
یک بار سایت رو پورت اسکن کنیم و یکبار اپی اصلی سایت . اگر توی سایت پورتی باز نبود و توی اپی اصلی یه سرویسی با این پورت باز بود میتونیم بگیم که ما عمل سرویس دیسکاوری انجام دادیم و ایمپکت رو بالا ببریم .
ولی توی این سناریو من هیچ پورتی باز نبود + سایت پشت cdn بود
بریم سراغ راه دوم :
خلیا توی ssrf همیشه دنبال راه اولن در صورتی که ما میتونیم و حق داریم از اسکیم های مختلف برای زدن درخواست های مختلف استفاده کنیم
چه اسکیم هایی ؟
sftpمیتونید برید راجب هر کدوم از این پروتکل های کاربردی بخونید
ldap
dict
gopher
http
ftp
dict
پروتکل و اسکیمی که ما باهاش کار داریم گافره
همونطور که میدونید توی این سناریو وقتی شما اسکیم http/https بزنی به صورت دیفالت یه GET میفرسته و امکان اینو نداری که این دیتارو با متد POST بفرستی !
شاید الان بگی که با کرل میتونیم ؟
نه توی این سناریو امکان تغیر دادن این GET به POST نیست
تنها در یه حالت . اینکه پروتکل گافر و دیکت باز باشه.
زمانی که گافر باز باشه یه tcp زده میشه و یه وب سوکت برای من ساخته میشه که میتونم از طریق اون هر درخواستی با هر متدی بزنم .
پس برای تست اول رفتم سراغ این که ایا این تارگت از gopher پیروی میکنه ؟
gopher://myserver.meدرخواست رو فرستادم و با خطای سرور مواجه شدم این به این معناس که گافر پشتیبانی نمیشه ؟
از رایتاپ های که خونده بودم
میدونستم که ریدارکت ها راه خوبی میتونن برای دور زدن چکر فانکشن باشن .
پس سوالی که پیش میاد اینه که ایا این سرور از ریدارکت پیروی میکنه ؟
سریع رفتم یه سرویس http با پایتون ساختم که تمام ترافیک رو ریدارکت کنه به برپ کلابریتور خودم .
اتفاقی که افتاد این بود که دوباره به سرور کلابریتر درخواست زده شد . این به این معنیه که سرور از اپن ریدارکت هم پیروی میکنه .
endpoint=http://redirect.comکدی که داخل http://redirect.com بود به این ادرس هدایت میکرد :
gopher://mycolab.comبرنامه نویس یه فیلتر و یا یه چک و تیکی سمت کلاینت درخواست داشت که به gopher اجازه نمیداد ولی حواسش به این نبود که قراره با ریدارکشن دور خورده بشه.
پس اگر برید گافر بخونید میدونید که با گافر میتونم کد سیستم عاملی کنیم و به اینترنال ها دسترسی پیدا کنیم .
ایا باید من باید دستی این کارو انجام بدم ؟
نه . gopherus برای همین ساخته شده که شما با گافر بتونی سطح دسترسی ssrf خودتو بالا ببری