Omar Alzughaibi
Omar Alzughaibi

@Omarzzu

7 تغريدة 31 قراءة Jan 08, 2025
كيف قدرنا نكتشف ثغرة؟
🔴Secondary Context Leads to Full Company Takeover
كيف قدرنا نوصل انا و لا
🔺 تحكم كامل على اكثر من 3,000 الاف شركة وجميع الفروع المسجلة
🔺جميع بصمات وهويات الموظفين والمستخدمين
🔺 وصول وتحكم كامل على جميع حسابات المستخدمين
🔺اضافة بيانات حساسة الى قاعدة البيانات
🔺وصول الى جميع الدومينز الداخلية
🔺 وكيف قدرنا نتخطى الثغرات السابقة من خلال التكنيك هذا
نسمي بالله ونبدا
خلونا بالبداية نشرح كيف قدرنا نكتشف الثغره قبل كل شيء عشان تكون الصورة واضحة
اثناء فحصنا للموقع قدرت اني اسبب خطأ من خلال تلاعبي بال Request وطلع لي Error غريب بال Response مثل مانلاحظ
مثل مانلاحظ ان ال path بال Response مختلف تماما عن ال path الي موجود بال Request
من اول نظرة عرفنا انه هذا ال path الي يتم استعماله ك Backend API فالعملية الي تصير نفس كذا
اول سؤال جاء ببالي هل ممكن اني اوصل الى ال Backend API ؟
طيب عمر قبل سؤالك ذا وش الفايده اذا وصلت الى ال backend API؟
بكل اختصار دايما ال Backend API يكون عباره عن Internal domain
بمعنى اذا قدرت توصل له يمديك توصل الى مسارات وبيانات واشياء مره كثيره وهذا الي راح نشوفه بالمقالة (;
في اول محاولتنا الى الوصول الى ال Backend API حاولنا انه نسوي traversal بمعنى انه نحاول نخلي ال Backend يوصله path محدد
ولكن للأسف كان فيه WAF يمنعنا من انه نسوي Path traversal
وهنا حاولنا ندور تخطي بأكثر من طريقة ولكن للأسف كان ال WAF يمنعنا
كملت عملية البحث وقلت خل اشيك على ال JS Files شفت بال JS files ال domain معرف (الي فيه WAF)
ولكن لقيت ايضا API domain اخر معرف وقررنا نشيك عليه
بعد ماشيكت عليه طلع نفسه نفس ال API الأساسي ولكن ماكان فيه أي WAF!
على طولت رحت اجرب اني اسوي Path traversal
تكملة ⬇️
على طولت رحت اجرب اني اسوي path traversal بال API الجديد الي جبناه من ال JS Files (بدون WAF)
ولكن ال Error الي رجع لنا غريب نوعا ما
وش الغريب بالموضوع ياعمر؟ لو نشوف ال Error نفسه بدون traversal
نلاحظ انه مختلف تماما وهذا يعني ان ال Error بالصورة الأولى يوضح انه بالفعل وصلنا لل Backend API
اما بالصورة الثانية هذا ال Error من ال Front end API وهذا الأمر الطبيعي/ Normal flow
وهذا يعني انه وصلنا الى ال Backend API!
بس الحين الأمر الصعب انه كيف نوصل للمسارات الداخلية لل Backend API ودام شغلنا كله Black box سالفة انه نحصل مسارات داخلية أصعب شوي
# الوصول الى مسارات داخلية
بعد العديد من المحاولات قدرنا نحصل Internal path فيه API documentation (internally)
ولو نشيك على ال Response
رجعلنا احد ال Internal endpoint ومن اسمه "extractOrderDocument" والواضح ان له علاقه بالوثائق
جربنا ان نسوي له Request ونحط رقم أي وثيقة
وعلى طول حملنا ال PDF عشان نشوف المحتوى الي فيه والصدمه كانت...
تكملة ⬇️
#3 وصولنا الى جميع وثائق والمستندات الحساسة
وعلى طول حملنا ال PDF عشان نشوف المحتوى الي فيه والصدمه كانت.
مثل مانلاحظ قدرنا نوصل الى جميع وثائق الموظفين والمستخدمين وايضا وثائق حساسة اخرى
وايضا من خلال اكتشافنا الى endpoint من ال Internal documentation
قدرنا نوصل الى جميع الفواتير للجهة كانت ال endpoint تسوي انشاء لرابط على دومين الجهة بأستعمال رقم فقط
لكن لحساسية المعلومات مانقدر نوضح المعلومات المسربة بالضبط
والى الان ماوصلنا شيء هذي مقدمه فقط (;
تكلمة ⬇️
#4 وصولنا الى واجهة الشركة وتحكم كامل على أكثر من 3,000 الاف شركة والفروع المسجلة
في الأسبوع الثاني من فحصنا, قررنا ان نحاول نوصل الى endpoints في ال Backend
والعملية كانت صعبه لأنه مثل ماقلنا شغلنا كله black box وال endpoint case sensitive ف كانت خطوة صعبة نوعا ما
ولكن ماوقفنا هنا تعمقنا قدر الأمكان حاولنا نجمع جميع ال backend directory
والأمر ماكان سهل وهذي مقتطفات من المعاناه الي كنا فيها انا و @stuipds
سوينا shared note ونحط فيها اي شيء ممكن يساعدنا بأن نطلع more endpoints
او يساعدنا بان نسوي wordlist تجيب لنا Endpoints on the backend API
وبعد عدة محاولاااات وصلنا الى شيء بس مب اي شيء (;
قدرنا نكتشف endpoint الى superAdminLogin
ولكن واجهتنا مشكله
مثل مانلاحظ بأنه كان يجينا error 405 والي هي ال method not allowed جرنبا نغيره ال POST ولكن نفس الكلام
يجينا نفس ال Error لكن بهئية مختلفة بالرغم انه غيرنا ال method to POST
هنا دريت انه ال front end API يقبل GET فقط
اما ال backend API لل superAdminLogin يقبل POST فقط
وعشان تكون اوضح الي يصير كذا
فالي كان يمنعنا من الوصول هو اختلاف ال method بين ال Backend API & the Frontend API
ولكن ماوقفنا حاولنا نطلع اي endpoint تقبل POST من ال Frontend API بحيث يصير له forwarded الى ال Backend API بشكل سليم
بعد بحث ورا بحث لقينا endpoint تقبل POST لل Front-end API
جربنا نسوي request الى ال backend API والنتيجة!
التكملة ⬇️
#5 وصولنا الى واجهة الشركة وتحكم كامل على أكثر من 3,000 الاف شركة والفروع المسجلة
جربنا نسوي Request الى ال Backend API والنتيجة!
وصلنا الى internal admin login كانت لحظة فرح واحباط بنفس الوقت لأنه كانت تتطلب حساب / credentials
ولكن بال response كان فيه احد ال JS Files شيكنا عليه ويحتوي على internal endpoints
لكن كانت عليه validation يعني لازم نجيب معلومات الدخول أو مانقدر نسوي اي شيء
قلنا خل نجرب default credentials ممكن تضبط معنا؟ لكن للأسف ماضبطت
بعديين عرفنا انه يمدي نسوي Username Enumeration لأن ال error كان يعلمنا اذا ال username غلط او الباسورد
وطبعا جبنا ال username كان مطابق لل endpoint تماما
وهنا بدا يرجع لنا الأمل جبنا المفتاح الأول وباقي الثاني
بدينا نسوي brute force على ال password ولكن ماكانت فيه أي نتيجة استعملنا أشهر ال wordlists ونفس الكلام مالقينا شيء
بدينا نفقد الأمل وكنا مقررين ان نتركه ونروح لشيء ثاني ولكن قررنا نسوي تجربة اخيرة
قلنا ليش مانسوي costume wordlist وهنا رجعنا لل shared notepad حقتنا وكملنا عليه وحاولنا نجمع أي كلمة له علاقة بالشركة وممكن تساعدنا
وطلع لنا عدد مرعب من الكلمات لكن رحنا لخوينا GPT وبدينا نفلتر ونضبط الكلمات الي جمعناه
وبالنهاية قدرنا نسوي coustmize wordlist تحتوي على أكثر من 70 الف باسورد بالأستعانه مع حبيبنا GPT وكم AI اخر
وبدينا عملية نسوي brute force مره ثانيه والصدمة كانت!
بالفعل قدرنا نجيب الباسورد لل super admin!!!!!!!!!
هنا بغينا نطير من الفرحة قدرنا نجيب ال access token لل admin!!
والحين عندنا صلاحيات كاملة على ال dashboard
وحاليا عندنا وصول وتحكم كامل على dashboard
وانا اقصد هنا بتحكم كامل يعني
اننا نتحكم على اكثر من 3 الاف شركة‍!!
وجميع فروع الشركة
يمدي نغير جميع المعلومات اربط هويتي اغير الباسورد واغير معلومات جدا حساسه
تكملة ⬇️
#6 كيف قدرنا نوصل لجميع بيانات المستخدمين والشركات و نتخطى جميع الثغرات السابقة ؟
اثناء فحصنا للجهة أكتشفنا ثغرات كثيرة ومنها ثغرات Broken access control على سبيل المثال مثل ال IDOR
وبعد مابلغنا الثغرات تم اصلاحه مثل مانلاحظ يعطينا "Authorization Failed"
قلنا ليش مانجيب ال Backend API endpoint ونوصل له من ال Backend بشكل مباشر
لأن ال Error الي فوق كان يجينا من ال Front-end API
سوينا Request لنفس ال Endpoint لكن من خلال ال Backend API وبالفعل قدرنا نشوف جميع ملعومات المستخدمين
طبعا المعلومات المسربة كانت جدا حرجة ولانقدر نصرح عن تفاصيله بالضبط
بنفس التكنيك طبقناه على جميع الثغرات السابقة وقدرنا نسوي تخطي لأكثر من 20 ثغرة من خلال وصولنا الى
ال Back-End API
وسبب ذلك لأن كان التحقق يكون من خلال ال Front-end API
وهي تعتبر عملية تحقق صحيحة
ولكن بما اننا واصلين الى ال Backend قدرنا نتخطأ عملية التحقق هذي بشكل كامل
بمجرد مانسوي traversal ونطلع الى الى ال Backend API
وهذي صورة توضح عملية التحقق كيف تكون
من خلال ال Front end
وعشان تكون اوضح هذي الصورة توضح كيف يكون التخطي
فالي قاعد يصير هنا خلينا سوينا Request بشكل طبيعي ولكن سوينا ../ وطلعنا وحطينا ال Endpoint الي ترجع ملعومات المستخدمين
ال Front-end ماراح يبلكه لأنه وصلته endpoint عاديه ولا قاعد يصير أي normalization من طرف ال (Front-end API)
ولكن بما ان ال Backend يسوي normalization راح يسوي normalize بالتالي راح توصلة Endpoint مختلفة والي هي ترجع بيانات المستخدم
نقدر نقول سوينا confusion او تلاعب بين ال Frontend يوصلة شيء وال Backend يوصلة شيء مختلف تماما
لذلك كنا قادرين نتخطى جميع الثغرات الي تم أغلاقه وأي endpoint كانت تتطلب Authorization قادرين نوصلة من دون أي تحقق
طبعا وصلنا لأشياء اكثر بكثير بس حرصا على طول المقالة حاولنا نرفق الأشياء الي ممكن تكون واضحة وبأقصر صورة
والى هنا وصلنا الى نهاية المقالة اتمنى ان شرحي كان واضح
كتابتنا للمقالة أخذ اكثر من اسبوعين من ترتيب وتجميع المعلومات
لذلك اذا استفدت من المقالة لا تنسى انك تدعم بالنشر والتكبيسات والعلوم الطيبة
خطأ مطبعي
انا و @stuipds x.com

جاري تحميل الاقتراحات...