18

يونيو

الثغرات المنطقية – The Logical Vulnerabilities

الثغرات المنطقية تعتبر من الثغرات الخطيره جداً جداً وبتؤدى لأمور كارثية هشرحلكم بعضها فى الامثلة، بشكل عام انا مبحبش اتعمق كتير ولا من محبى كتابة البوستات الدسمة لأنى مؤمن بأنى كل ما هتعمق هيكون الكلام فيه تركايات كتير الانسان البسيط العادى مش هيفهمها، ولا هكلمك بالانجلش المجعلص الى هوا يخليك تدور على المعانى وتترجم قبل ما تفهم، بشكل عام لو العالم والتكنولوجيا كلها اتطورت من حولينا وانتهى عصر جميع الثغرات بجميع الانواع الى نعرفها، ثغرات المنطق لايمكن سدها لأن المسؤول عنها هو البنى ادم بتفكيرة المنطقى لسير دورة حياة ال Web Application نفسه، زى الهندسة الاجتماعيه بالظبط من الثغرات التى لا يمكن سدها، وبكدا عندنا اللوجيك، والثغرات الخاصه بالهندسة الاجتماعيه، وهجوم حجب الخدمه DDOS ال 3 حاجات دول هما سرطان الانترنت والحمايه حتى كتابة هذا البوست المتواضع. نبدأ بقى، بص ياسيدى من المعنى كدا المنطق معناه ان ال Web Application فى مراحل تعامل اليوزر معاه يكون سليم 100% بمعنى ان الشخص الى برمج الويب ابلكيشن دا قبل ما يكتب الكود بيمر بمراحل تخطيط واختبار قبل ما حتى يوصل لمرحلة ال Private Beta Testing Stage “بدون ما تدور دى مرحله كدا بتسبق مرحلة البيتا بس بتكون محصوره على مجموعه من اصدقائك عادة بيكون عددهم من 5 – 10 اشخاص وبيكون الموقع لسه مش اونلاين فبيفضلوا يجربوا ويدولك التقرير خد يابرنس والله جينا ندوس هنا مطلعلناش الصوره بس طلعلنا لسانه .

المهم خلونا نتخيل ان عندنا Web Application وجواه المراحل التالية:
1- اليوزر بيدخل يسجل بالايميل
2- بيوصله ايميل تأكيد على البريد الاليكترونى بتاعه
3- علشان يكمل معانا و”يربح الغسالة” لاز يضغط على لينك الاكتيفيشن الموجود بالميل علشان نتأكد انه هوا مش حد تانى
4- يقوم المستخدم بعمل Login او تسجيل دخول علشان يقدر يستخدم الخدمه
5- الخدمه عباره عن Portal مثلا لإرسال كروت تهنئة فى المناسبات “Greeting Cards”.
6- علشان اليوزر يبعت كارت تهنئة لازم يربط حسابه برقم الموبايل
7- لو مربطش حسابه برقم موبايل هيقدر يستلم كروت تهنئة فقط
8- لو ربط الحساب بتاعه برقم موبايل علشان هوا على الباقة المجانيه “Free Plan” هيقدر يبعت 5 رسائل فى اليوم فقط
9- يوجد لوحة تحكم خاصه باليوزر هيعرف منها إعدادات حسابه واحصائيات عما قام به من استلام وارسال كروت التهنئة
10- تسجيل الخروج “زهقت وعايز انام”

طبعا فلنعتبر ان دا موقع مشهور جدا وعليه مستخدمين كتير، مختبر الاختراق Pentester او صائدى الاخطاء البرمجية Bug Hunters اول ما بيلاقوا حاجه زى دى خصوصا لو الحاجه دى بتقدم برنامج مكافأت بيدخلوا يسجلوا مباشرة بس الفرق مابين الفئتين اللى ذكرتهم وفئة تانيه كدا ملناش دعوه بيها هتلاقيه يادوب متعلملة كلمتين عن ال XSS ومعاه Payload عمال على بطال ماسك اى Input Box وشغال فيها Copy / Paste لل Payload ولو ادتله ال Alrert Box يجرى على لينك الريبورت ويبلغ وفى الاخر بكدا شايف نفسه انه خلاص حد برنس، زى ما قولت دول فئة ملناش دعوه بيهم خلينا فى اللوجيك بتاعنا، الشخص السوى هيدخل هيسجل وهياخد لفه فى الحساب يدخل يشوف كل شئ هل هوا تمام كما انزل الكتاب ولا لا، انا عن نفسى كمحمد اول شئ بدخله بجرى مباشرة على لوحة إعدادات الحساب Settings واشوف ياترى هل الموقع مصاب ب CSRF ولا XSS ولا Authentication Bypass والاخيره دى هيا اكتر ثغرة بتنتج عن المنطق والى بيكون فيها المبرمج الى كتب الويب ابلكيشن سكران ساعتها فمعملش حسابه ان فى اشرار هتدخل تاكل عيش علي قفاه، وبعدين ابدأ اختبر باقى الثغرات دا طبعا بعيدا عن انى عمرى ما فى البدايه بجرب اى SQL Injection لأنه ممكن ب Payload بسيط يقع منك الموقع ومتقدرش تكمل الشغل بتاعك، دايما بفضل انى اخلى ال SQL Injection Test فى النهايه، المهم بتدخل انت كبج هنتر او بن تستر كيوزر عادى جدا بتاخد لفه زى ما قولنا وتشوف الدنيا عامله ازاى، فى مثالنا الى فوق انا كمحمد هعمل التالى:

هسجل، هدخل الميل علشان اضغط على الرابط الى هيعمل Activation للحساب “للعلم فى مواقع بتدخلك مباشرة للحساب بمجرد ما بتضغط على رابط التفعيل، دى لازم تركز فيها على الرابط”، هبص على الرابط نفسه زى ما قولنا فى الجمله الى فاتت، لو لقيت 2 متغير ، 2 Parameters “للناس الى ثقافتها اجنبى” هبص عليهم هتلاقى واحد فيهم مثلا هاش، والتانى الايميل وبكدا لو صاحب الويب ابلكيشن دا انسان واعى مكانش عملهم بنفس الشكل دا، عالاقل كان المفروض يبقوا نص واحد وهناك “خلف الكواليس” بيتفك ويتقسم ويتشاف، المهم احيانا بتبقى روابط زى دى سهلة التخمين يعنى مثلا تلاقى ميل، وتلاقى الهاش دا هوا هوا الميل بس مضاف ليه كام كلمة ومتشفرين ب Base64 مثلا، انت وخبرتك بقى من كتر ما عينيا شافت هاشات واتهريت فى الشغلانه دى هحدد الهاش دا نوعه ايه، فى مثالنا هنا مثلا لو لقيت == فى اخر الهاش يبقى دا Base64 وش، خده وفكه فى اى مواقع فك هتلاقى فيه معلومات عنب ممكن تستغلها، لو ال Procedure هنا فيه مشاكل هتلاقى نفسك لو ظبطت هاش وغيرت الميل بناء عليه، كون ال URL تانى وحطه فى البراوزر، دوس Enter زى الشطار، مبروك بقيت فى الحساب، على فكره عايز اذكر هنا ان فى شخص معانا من الصعيد تحديداً من محافظة الغردقة لقى ثغرة زى دى فى فيسبوك وكان بيدخل حساب اى شخص، انا الوحيد الى شوفت ال PoC بتاعها بصراحه لأنه طلب ان محدش يشوفه، واخد مكافأه 15 الف دولار، والله بعينى كان بيدخل اى حساب، حتى لو حساب مارك نفسه، بس علشان فيسبوك حويط الشخص دا ميقدرش يغير باسوورد الحساب لأن فيسبوك فاشخ اللوجيك فى الجزئية دى وبيطلب منك الباسوورد القديمه، هتطلع ذكى وتقول اضيف موبايل هقولك ماهو هيطلب باسوورد بردو فى الاضافه والتأكيد، المهم نرجع لموضوعنا، اختبرت انت ال URL وطلع سليم مفهوش اى مشاكل “وطلع الى كتب الويب ابلكيشن دا برنس ومظبط كل حاجه عنده فى ال Backend”، خش على الخطوه الى بعد كدا ادخل الاكاونت بص على ال Business Logic واللى هيا هنا انك مبتقدرش تبعت اى رسائل تهنئة الا لو كان الموبايل مربوط بالحساب، اختبر الخاصيه دى شوفها ياترى الويب ابلكيشن بيفحصها Client Side من ناحيتك بس يعنى شوية Java Script وبيطلعلك رسالة “عفوا عزيزى حبيشه لايمكنك ارسال رساله لأنك مش رابط الاكاونت برقم موبايل” ولا ياترى بيكون الفحص فى ال Backend Server Side ؟ لو كان من ناحيتك تقدر تتخطاه عادى جدا وبسهوله، وقف الجافا سكربت ومبروك، لو مبتقدرش حاول تضيف رقم موبايل وتشوف الركوست الى طالع شكله عامل ازاى غالبا هتلاقى فى باراميتر مثلا اسمه isMobileAutheticated وهلاقيها بتساوى قيمة 1 مثلا او true هنا بيقول للسيرفر ياسيرفر اه الراجل دا رابط الموبايل وكله تمام، السيرفر بقى لو اخد الكلام دا من اليوزر ومبصش عنده فى الداتابيز وشافه فعلا رابط بالموبايل هتلاقى نفسك بتبعت عادى جدا حتى لو دخلت الاعدادات وشيلت الموبايل تانى وبكدا اصبح الاكاونت بتاعك بيبعت بدون ما يكون فى رقم موبايل، مع الباراميتر الى اتكلمنا عنه فوق جايز تلاقى الايميل الى بتبعت منه او رقم الموبايل الى بتبعت منه كارت التهنئة، حاول تعترض ال Request بأى Proxy زى Burp او Fiddler والعب فى الباراميترز دى وشوف جايز تبعت كارت التهنئة برقم تليفون او ببريد صاحب الموقع مثلا grin emoticon .

خدوا بالكم فى ارتباط وثيق مابين الثغرات المنطقيه وثغرات ال Broken Authentication الرابط هنا مبيكونش فى ناحيتك انت، لا دا بيكون على السيرفر، مش هدخل فى تفاصيل كتير لأنى حاسس نفسى بترمى اكتر ناحية ثغرات ال Broken Authentication.

هيكون فى ثغرات لوجيك فى لو حصلت الحالات التاليه:

– فى مثالنا لو فى جزء تغيير الباسوورد مكانش بيطلب منك الباسوورد القديمه “اللوجيك هنا والعقل بيقول علشان تغير باسووردك الحاليه لازم تدينى القديمه، وإلا انت مش المستخدم الخاص بالحساب، يا اما انت المستخدم بس نسيتها وفى الحالة دى سهله هتعمل Forget Password وتستلمها على الايميل بتاعك، ساعتها لو الموقع مؤمن ضد ثغرات ال CSRF وكنت لقيت ثغرة من نوع XSS فى اى صفحة من صفحات ال Web Application تقدر تكتب فى الصفحه دى IFrame لصفحة تغيير الباسوورد وفى حدث OnLoad تقدر تحط جافا سكربت تكتب الباسوورد الجديده مرتين وتضغط Submit وبكدا عملت تغيير للباسوورد وكذلك نفس الخطوات للإيميل وبكدا تبقى سيطرت على الاكاونت.

– فى مثالنا مفيش Captcha مثلا على عمليات الارسال وتغيير الاعدادات و و الخ، بنفس السيناريو الى فوق هتعمل اى شئ كأنك اليوزر

– فى فيسبوك لو عملت بلوك لشخص ما والشخص دا كان معلق عندك، بكدا مبقالهوش الحق فى انه يدخل يلغى اى إعجابات او كومنتات على بوستاتك كان عملها قبل البلوك

– فى فيسبوك لو فى اتنين مستخدمين Admins بداخل جروب ما لو حد فيهم عمل Block للشخص التانى اللوجيك بيقول انهم لازم يشوفوا بوستات بعض ويحذفوها ويتعاملوا معاها بصفة انهم الاتنين مدراء لنفس المجموعه، بس دا مكانش موجود فى فيسبوك.

– فى فيسبوك نفس النقطة الى فاتت فى إدارة الصفحات مثلا.

– صفحات احيانا بتكون خاصه بال Login بيبقى فيها ثغرات من نوع XSS ، اللوجيك هنا بيقول ان فى كود الصفحه دى لازم المبرمج يعمل Check لو كان اليوزر مسجل دخوله من عدمه، بمعنى انى لو جيت مثلا فى موقع ما وقمت بفحص الموقع كله وكان خالى من ثغرات ال Broken Authentication وثغرات CSRF وجميع الثغرات الاخرى، وجميع صفحاته مؤمنه ضد ثغرات XSS “ماعدا” صفحة ال Login مثلا فيها “لوجيك مش صحيح” والى هوا “المبرمج مش بيفحص هل اليوزر عامل Login ولا لا فى الحالة دى ممكن تاخد منها ال Cookie بسهوله وتسرقه او لو ل كانت ال Cookies دى معلمه بفلاج Httponly ففى الحالة دى هتضطر انك تضيف IFrames وتلعب بيها زى ما حصل هنا: من هنا

– طيب ولو لقينا ثغرة من نوع XSS فى صفحة Login وكانت الصفحة دى بتتشيك اذا كان اليوزر مسجل دخوله بترمية على ال Home ولو مكانش بتقوله سجل ياترى نقدر نستغلها ازاى ؟ شوف الفيديو دا هتعرف: دى ثغرة كنت اكتشفتها فى موقع التخزين السحابى Box.com فى الصفحة الخاصه بتسجيل الدخول، للأسف الصفحه دى مش هقدر اسحب منها الكوكيز ابداً لأنها سليمة من ناحية المنطق او Logic اول ما اليوزر بيدخلها، لو هوا Logged In بترميه على صفحة ال Home مباشرة، لو هوا مش Logged In بتقوله سجل دخولك وهنا يكمن الشيطان grin emoticon

اليكم الفيديو بعنوان :

“An XSS ‪ – Vulnerability‬ Discovered in BOX.com which could lead to full account takeover”

رابط الفيديو: من هنا

– طبعا فى امثلة تانيه كتير هسيبك تكتشفها بنفسك.

ملاحظات:
*طبعا انا متكلمتش عن الموضوع بشكل مكثف او عميق شويه ليه؟ علشان سعادتك تتعب شويه وتدور وتعرف ليه ومين وايه!
* بتحب تقرأ، هنا هتلاقى كل شئ حول ثغرات ال Logic ، كيفية الاكتشاف، الاستغلال والحمايه تجدوها هنا : عنها: من هنا – كيفية اختبارها : من هنا

من محافظةالمنيا , 22 سنة وشهور، مبرمج دوت نت حرً ، مؤسس فريق coder #36 فريق متخصص فى مجال التقنية – بحب التدوين جداً وبعشق كتابة المحتوى ? – اشتغلت SEO Specialist من فترة علشان بحب التحدى ، بحب السوشيال ميديا علشان بقضى وقت كبير عليها وبستفاد منها كتير، مسئول عن قسم الـ IT فى جمعية مصر بقرية البرشا “والفرع الرئيسى بالقاهرة”، مؤسس مشارك فى Event True موقع متخصص فى الـ Events.، بحب السمك والفراخ المشوية كتير ? مقولتى المفضلة ” الاحلام بتحقق لما بنصدق ^_^ “