من المعروف أن الهجمات على تطبيقات الويب في الفترة الأخيرة باتت أكثر إنتشاراً مما كانت عليه ، وأصبحت تُهدد العديد والعديد من المواقع الإلكترونية حول العالم بجميع إهتمامتها ، فباتت تستهدف المواقع التجارية والإخبارية وحتى المواقع الشخصية ، ومع هذا التسارع الذي تشهده المواقع على شبكة الإنترنت أصبح من الضرووري تأمين هذه المواقع وحمايتها من هجمات الويب.

على مدار الست سنوات السابقة من التدوين في iSecur1ty ، تحدثنا عن العديد والعديد من الهجمات التي تُصيب تطبيقات الويب  وشرحنا أغلب الثغرات والتقنيات التي تُمكننا من القيام بعملية إختراق لهدف مُعين ، وفي مقالنا اليوم سوف نتحدث عن موضوع شيق جداً يشرح ثغرة XSS – Cross Site Scripting بشكل لم نشرح مُسبقاً وهو Blind XSS.

Blind-XSS-final

قبل الدخول بأي تفاصيل دعونا نقوم بعمل مُراجعة سريعة لأنواع ثغرات xss ، كما نعلن بأن هذه الثغرات تُقسم بالغالب إلى 3 أقسام رئيسية وهي :

  1. Reflected XSS.
  2. Stored XSS.
  3. DOM Based XSS.

وكما ترون أرفقت مصدر لكُل نوع من أنواع هذه الثغرة لكي تستطيعون القرأة عنها بكُل حُرية ، وكما نعلم أيضاً أن ثغرات xss بشكل عام تحدث كغيرها من ثغرات الويب بسبب وجود مُشكلة بالتعامل مع مدخلات المُستخدم ، وعدم فلترتها بالشكل المطلوب ، فيحدث خطأ برمجي يُمكننا من حقن أكواد html + javascript من خلال هذه الثغرة التي بالأساس جوهرها يعني “البرمجة من خلال الموقع” ، لا أدري إن كانت هذه الترجمة الحرفية لها أيضاً أم لا ولكن هذا ما يُعبر عنه المفهوم الخاص بها 😀

اليوم بإذن الله سوف نتعرف على نوع جديد من هذه الثغرة يُمكننا تسميته كما ذكرت ب Blind XSS وفي ما يلي تعريف هذه الثغرة.

ما هي الـ Blind XSS :


نستطيع القول سريعاً بأن ثغرة Blind XSS هي أحد أنواع ثغرة XSS تنتج من خلال حقن كود مُعين بمكان “بصفحة” ، وظهوره وتنفيذه بمكان أخر “بصفحة أخرى” أنت لا تعلم عنها شيء ، فمثلاً يُمكنني حقن كود مُعين في هذا المقال ويتم تنفيذه داخل لوحة التحكم وعدم ظهوره لك ، نعم بكُل هذه البساطة نستطيع تعريف الـ Blind XSS.

 

أين من المُمكن أن تحدث ثغرة Blind XSS :


في الفقرة السابقة ذكرت مثال بسيط يُمكن أن يحدث من خلاله ثغرة xss وهو صفحة التعليقات ، وكذلك يُمكن أن تحدث هذه الثغرة ببعض التطبيقات التالية حسب ما إستنتجت من تجارب سابقة في إختبار إختراق تطبيقات الويب :

  1. صفحات مُتابعة تسجيل المُستخدمين : حيث يتم فرضاً عرض أي مُستخدم جديد يقوم بالتسجيل في تطبيق الويب الخاص بك ومثلاً إدخال إسمه ورقم هاتفه وبريده ثم عرضهم في صفحة أخرى ، حيث يُمكن التلاعب بهذه المُدخلات ويتم عرضها بشكل خاطئ في صفحة مُتابعة المُستخدمين.
  2. صفحات ترك الرسائل : تحدث في الصفحات التي تكون خاصة لإستقبال مُلاحظات الزوار وعرضها بصفحة أخرى خاصة بمُشرف الموقع على سبيل المثال.

هذه بعض الحالات التي من المُمكن أن يحدث فيها ثغرة Blind XSS على سبيل المثال لا الحصر.

 

كيف يتم إكتشاف هذه الثغرة وإستغلالها :


إكتشاف الثغرة وإستغلالها يعتمد بالمقام الأول على مدى فهمك لتطبيق الويب ومُدخلاته جيداً ، حيث تستطيع بعد دراستك لتطبيق الويب ومُلاحظة الصفحات الخاصة به بعنايه ، أن تقوم بحث كود جافا سكربت في بعض الأماكن الخاصة بالسكربت والتي تتوقع مُلاحظتها من قبل مُدير الموقع ، حيث أن طبيعة عمل كود الجافا سكربت هذا يقوم بإرسال طلب GET  مُعين يُخبرك فيه برابط الصفحة مثلاً وكذلك قيمة الـ cookies الخاصة بهذا الموقع ، وخلال هذا المقال بإذن الله سوف نشرح ألية العمل التي سوف نعتمدها لإكتشاف و إستغلال هذه الثغرات بِكُل سهولة.

 

سيناريو العمل : 


سوف أفترض أنكم قمتم بجمع المعلومات عن الموقع وعمل Crawling / Spidering للموقع وتوصلتم لصفحة تتطلب منك إدخال تعليق ليتم إرساله للأدمن كما يلي :

blind-xss-comment-form

كما نرى أن الصفحة تحتوي على أربع حقول رئيسية وهي الإسم والإيميل ورقم الهاتف والتعليق ، وعندما نستعرض الكود الخاص بالصفحة سوف نرى التالي :

blind-xss-form-source

تأكيد للأربع حقول وكذلك نرى أن الفورم يقوم بإرسال المعلومات إلى صفحة proccess-comment من خلال POST Method ، وهذا يعني أنه يتم التعامل معها من قبل الـ Backend من إدخالها لقاعدة البيانات وإعادة عرضها بصفحة أخرى ، أو مُمكن إرسالها للمُدير من خلال بريد على سبيل المثال !

دعونا أن نقوم بإدخال معلوماتنا لنرى ماذا سوف يحصل وبناءاً عليه نقوم بتتبع ما يجري بالضبط كما بالصورة التالية :

blind-xss-comment-done

بعد إدخال معلوماتنا ظهرت لنا رسالة تشكرنا على التعليق الخاص بنا ولكن مهلاً ! أين ذهب المعلومات الخاصة بنا ! دعونا نقوم بإكتشاف ذلك.

سوف تقوم بتجهيز السلاح الخاصة بنا ، أقصد هنا الـ Payload المُستخدم 😀 حيث يجب ان نعلم بأننا إستطعنا حقن كود مُعين ليرُد علينا بمكانه وبأي كوكيز قد يحصل عليها أيضاً ، وكمثال سوف نرمي الطُعم وننتظر أن يتم إلتقاطه ليخبرنا بوجود سمك هنالك أم لا وبكل بساطة سوف نستخدم XMLHttpRequest في javascript للقيام بذلك ، قُمت بشرح إستخدام هذه التقنية بإستغلال ثغرة xss ويُمكنكم قرأته من خلال هذا الرابط.

نعود للـ Payload الخاص بنا حيث سوف يقوم بإرسال المسار الحالي للصفحة ومعلومات الكوكيز من خلال طلب GET على صفحة مُعينة كما بهذا الكود التالي :

blind-xss-payload

أستطيع شرح الكود السابق كالتالي :

  1. السطر الأول يقوم بتعريف مُتغير location وهو يحتوي على رابط الصفحة التي يتم جلبه من خلال العنصر window.location.href
  2. السطر الثاني يقوم بتعريف مُتغير cookies ويتم حفظ معلومات الكوكيز فيه من خلال document.cookies.
  3. السطر 3 يحفظ المُتغير الأول والثاني بطريقة مُنسقه.
  4. السطر الرابع يقوم بإنشاء عنصر من XMLHttpRequest بإسم XH.
  5. السطر الخامس يقوم بإنشاء طلب GET بالمُتغير data للعنوان الموجود بالأعلى.
  6. السطر السادس يقوم بإرسال الطلب الذي تم إنشائه.

نحتاج الأن للتنصت على المنفذ 8090 والذي سوف يتم إرسال الطلب له من خلال XMLHttpRequest الموجوده داخل كود الإستغلال الخاصة بنا ، ونستطيع تنفيذ ذلك من خلال الأمر nc -vlp 8090 وبعد حقن الكود داخل الحقل comment الموجود داخل صفحة comment.html سوف تكون النتيجة كالتالي :

هنا ياتي دورك بمُراقبة الصفحات والمدخلات التي لا تعلم أين مخرجاتها بمحاولة إلتقاط أي إتصال من هذه الصفحات

blind-xss-exploit-done

كما نُشاهد تم إرسال الطلب بنجاح وتم حقن الكود بصفحة show.html التي من المفترض أن تظهر لدى الأدمن فقط ، حيث أن الصفحة أظهرت للأدمن كما يلي :

blind-xss-show-page

كما نرى تم إدخال المعلومات الخاصة بنا من جديد مع عدم وجود حقن للتعليق الخاص بنا ، حيث أنه تم حقن الكود الذي أدخلنها بدلاً منه بنجاح وعلى أثره لا يظهر أي معلومات ، وبهذا نكون قد قُمنا بإستغلال ناجح للثغرة وأيضاً سرقة الكوكيز من الأدمن بنجاح.

هذا السيناريو قابل للتطور بعدة طرق ، وسوف احاول إن شاء الله بكتابة مقال أخر يتحدث عن كيفية تطوير سكربت python لإكتشاف الثغرة وإستغلالها بشكل تلقائي.

أتمنى أن يكون المقال قد نال إعجابكم وبإذن الله نلتقي بمقالات أخرى.