1. AhMeD 23

    AhMeD 23 Developer

    الأنتساب:
    ‏16 يوليو 2013
    المشاركات:
    62
    الإعجابات المتلقاة:
    2
    نقاط الجائزة:
    8
    [​IMG]

    بسم الله الرحمن الرحيم

    السلام عليكم ورحمة الله وبركاته

    سبحانك لا علم لنا الا ما علمتنا انك انت العليم الحكيم

    (-----------------------------------------------------------)

    [NOTE]التحليل الشامل لثغرات Dom-based Xss بالتفصيل[/NOTE]

    [​IMG]

    (-----------------------------------------------------------)

    غرات XSS او Cross-Site Scripting اصبحت واحدة من أشهر ثغرات تطبيقات الويب فهي تأتي في المرتبة الثالثة حسب تصنيف موقع OWASP لأشهر و أكثر 10 ثغرات انتشاراً في تطبيقات الويب لعام 2013 .[​IMG]


    صحيح ان ثغرات الـ XSS لا تعد من الثغرات عالية الخطورة لأنها لا تؤثر بشكل مباشر على الموقع او الخادم و إنما تؤثر على جانب العميل الـ Client Side او المستخدم و تحتاج لإضافة القليل من الهندسة الاجتماعية حتى تصل إلى هجوم قوي من خلالها .

    لكن هذا لا يمنع ان ثغرات XSS كانت سبباً أساسي في أختراق أكبر الشركات و المواقع العالمية كما حدث منذ أشهر مع المنتديات الخاصة بموقع ubuntu الشهير و تم سرقة معلومات قرابة الـ 2 مليون مستخدم عن طريق استغلال لثغرة XSS بالموقع كما ان ثغرات الـ Xss ايضا كانت سبباً رئيسي في اختراق موقع Apple للمطورين خلال نفس الفترة . فمن المؤكد أن هذا النوع من الثغرات قد يشكل خطورة أكبر بكثير من خطورة ثغرات الـ SQL Injection في حال قام الـهاكر باستغلالها بشكل ذكي و قوي .

    موضوعنا اليوم سنتكلم فيه بشكل أساسي على نوع مختلف بعض الشئ من ثغرات الـ XSS و الذي يطلق عليه Dom-Based XSS و قد يكون الكثير ممن يقرؤون هذا المقال لم يتعرفوا إلى هذا النوع من ثغرات xss او يعرفوه اسماً فقط .

    من المتعارف عند الجميع ان أشهر أنواع لثغرات XSS هي ما يطلق عليها الـ Reflected XSS و الـ Stored XSS .

    و لكن يوجد ايضاً أنواع اخرى تقوم بنفس التأثير لثغرات XSS مثل الـ Flash XSS و Dom-Based XSS

    (-----------------------------------------------------------)

    [NEW]ما هي فكرة ثغرات XSS و كيف تعمل؟[/NEW]
    كما نعلم ثغرات XSS تكمن خطورتها في تعديل لمحتوى صفحات الموقع التي تظهر للمستخدم و ذلك عن طريق حقن اكواد HTML او Javascript , كانك تقوم بالضبط بالتعديل على ملفات الـ html و javascript الخاصة بالموقع من خلال احد برامح محرر صفحات الويب .فثغرات XSS تساعد المخترق على تعديل صفحات الموقع و عمل صفحات مزورة مع الاحتفاظ بنفس رابط الصفحة و الدومين , كما يستغلها لبعض لسرقة Sessions او الـ Cookies الخاصة بالمستخدمين و هو يعد اخطر استغلال لثغرات XSS و ذلك عن طريق استخدام داله جافا سكريبت التي تستطيع قراءة بينات الكوكيز مثل document.cookie و ايضاً يستخدم هاكرز أخرون ثغرات الـ XSS في اختراق صفحات الموقع في حال كانت الثغرة من نوع Stored Xss .

    دعونا اولا نستعرض طريقة عمل XSS حتى يمكنا بعد ذلك فهم فكرة عمل ثغرات Dom Based Xss بسهولة , ببساطة ثغرات XSS تحدث عندما يقوم المستخدم بأرسل مدخل للصفحة و تقوم الصفحة بأخذ هذا المدخل من المستخدم وعرضه مباشرة كما هو في HTML عن طريق دوال البرمجة مثلا print و echo

    مثال بسيط جداً على ذلك صفحة تطلب من المستخدم إدخال اسمه الشخصي

    [​IMG]

    و يدخل اليها الاسم

    اذاً الأن تتضح لدينا المشكلة بوضوح , فعند كتابة الاسم مصحوباً بـ الـ tags الخاصة بالـhtml المتصفح هنا لم يفهم انه هذا هو مجرد اسم الشخص و لكنه قام بترجمة اكواد html في الاسم و قام بعرضة بالشكل المطلوب و عندها تغير شكل الاسم في الصفحة و أصبح بخط أكبر . اذاً فان المشكلة كلها كانت في ان الصفحة أخذت الاسم من المستخدم و أظهرته مباشرة دون اي تحقق من ان الاسم قد يحتوى على اكواد خاصة بالـ HTML .

    دعونا الأن نحدد هنا من المسؤول عن أخذ الاسم من المستخدم في الصفحة و من المسؤول عن إظهار الأسم في html , في هذة الحالة فان المسؤول عن أخذ الاسم هي داله $_POST في لغة برمجة php و المسؤول عن إظهار الاسم في html هي داله echo . الأن هذة المقدمة كانت ضرورية لنا حتى نستطيع ان نستوعب فكرة عمل dom-based xss في الجزء التالي .:{13}:

    [NOTE] ما هي ثغرات Dom Based Xss و كيف تعمل ؟[/NOTE]
    ببساطة ثغرات XSS لا تختلف كثيراً في مفهموها عن ثغرات refelected xss و لكن الفرق بينها و بين ثغرات XSS في الأسلوب و الطريقة , فكما ذكرنا في ثغرات xss التقليدية فان من يقوم باستقبال المدخل من المستخدم هي لغة PHP عن طريق داله $_POST او $_GET التى تستطيع قرائه المدخلات من خلال form في صفحة ما او من خلال الرابط . لكن في حاله Dom-Based فأن من يقوم بأخذ المدخل من المستخدم هي دوال الـ javascript و من يقوم بطباعة المدخل ايضاً هي دوال الـ javascript دون الحاجة إلى اي لغات برمجة أخرى او حتى web server لترجمة و تشغيل الملفات .

    سوف نطلق على دوال التي تقوم بأخذ المدخل من المستخدم هي دوال الـ sources و ان الدوال التي تقوم بطباعة هذا المدخل و إظهاره في html هي sinks . و الأن نبدأ بشرح بعض دوال sources و sinks و نرى كيف يمكن ان تؤدي بعد ذلك إلى ثغرات XSS .[​IMG]

    [INFO] ما هي دوال Sources ؟[/INFO]
    دوال الـsources هي دوال في لغة javascript و التي من خلالها يمكن ان تقوم بإرسال مدخل إلى الصفحة في هذه الحالة غالبا يكون المدخل من المستخدم مرسل من خلال رابط الصفحة او url مثلا لدينا الرابط التالي :

    http://site.com/home/file.html?name=ahmed#9anas.com

    فمن الممكن من خلال هذة الدوال ان تقوم بقراءة رابط الصفحة بالكامل او فقط مسار الصفحة home/file.html/ او قيمة الاسم المدخل ahmed او الهاش تاج 9anas.com كأنك بالضبط تقوم عمل تحليل الرابط و تقسيمه إلى إجزاء , جزء هو مسار الصفحة و اسم ملف الصفحة و جزء هي المتغيرات او parameters المرسلة إلى الصفحة

    و يمكن عمل ذلك من خلال javascript ببساطة عن طريق الدوال التالية :

    [NEW]دوال تقوم بقرائه رابط الصفحة بالكامل[/NEW]
    كود PHP:
        document.URL
        document
    .documentURI
        document
    .URLUnencoded
        document
    .baseURI
        location
        location
    .href
    مثال على ذلك اقوم بكتابة صفحة تحتوى على كود الجافا سكريبت التالي[​IMG] :

    كود PHP:
    <script>
    alert(location.href);
    </script>
    و بعد ذلك اقوم بتشغيل الصفحة و تكون النتيجة كالتالي :

    [​IMG]

    نلاحظ ان الصفحة قامت باظهار msg box يحتوى على رابط الصفحة التي قمت بتشغيلها كما قمنا بكتابة في ملف html , و يكون نفس الحال مع باقي الدوال التي قمنا بذكرها , سوف تظهر رابط الصفحة بالكامل , الأن نتطرق إلى داله اخرى تقوم بقرائه اسم الصفحة فقط دون المدخلات إليها او اسم domain .

    [NEW]دوال تقوم بقرائه اسم الصفحة و مسارها[/NEW]
    location.pathname

    مع استخدام نفس كود الصفحة السابق و استبدال فقط اسم الدالة location.href باسم الدالة يصبح لدينا النتيجة التالية

    [​IMG]

    الفكرة بسيطة أليست كذلك ؟ الأن نستكمل ذكر بعض الدوال الأخرى و التي تستطيع قرائه جزء من رابط الصفحة كالدوال السابقة .[​IMG]

    [NEW]دوال تقوم بقرائه المدخلات او parameters فقط المرسلة إلى الصفحة[/NEW]
    location.search

    مثال على ذلك قمت بتشغيل الصفحة بهذة الدالة و ارسلت اليها بعض المدخلات مثلا

    http://site.com/page.html?name=ahmed

    تكون النتيجة كالتالي :

    [​IMG]

    و اخيرا نقوم بذكر دالة تستخدم كثير في مواقع و هي داله تقوم بقرائة الـ hashtag # في الرابط

    [NEW]دوال تقوم بقرائه HashTag[/NEW]
    نقوم بتشغيل الصفحة مرة اخرى بهذة الدالة و نرى النتيجة

    [​IMG]

    قمنا فقط بفتح رابط الصفحة مع اضافة #Ahmed Aboul-Ela في نهاية الرابط و قامت الصفحة بأظهار هذا الجزء فقط من الرابط الأن تعرفنا الى جميع دوال sources الأن ننطلق إلى الدوال التي تستطيع ان تظهر هذة sources في مخرج الصفحة

    [NEW]ما هي دوال Sinks ؟[/NEW]
    دوال sinks ببساطة كما ذكرنا هي المسؤلة عن إظهار و كتابة القيمة المرسلة من خلال داله من دوال sources بالظبط كداله print في لغات البرمجة

    دوال الـsinks ليست صعبة و سوف اقوم بذكر اهمها

    داله document.write و doucment.writeln

    هي داله المكافئة لدالة print في لغات البرمجة فتقوم مباشرة بطباعة الكلام داخل كود HTML

    مثال على ذلك صفحة تحتوى على كود HTML التالي

    كود HTML:
    <script>
    document.write(‘hello world’) ;
    </script>
    ستكون النتيجة لدينا كما في الصورة

    [​IMG]

    anyElement.innerHTML

    هذه الدالة ببساطة تقوم بقراءة او كتابة كود بداخل Tag معين في الصفحة

    مثلا document.body.innerHTML سوف تقوم بقرائة محتوى <body> </body> بالكامل

    و اذا قمت بعمل document.body.innerHTML = ‘unknown’ سوف يقوم بعمل استبدال كامل لمحتوى تاج body و كتابة فيه الكلمة unknown

    مثال على ذلك كود الصفحة التالي:

    كود HTML:
    <html>
    <body>
    Just a text in body tag
    <script>
    document.body.innerHTML = ‘www.iq-team.org';
    </script>
    </body>
    </html>
    ند تشغيل الصفحة ستقوم الـJavaScript بتغير محتوى الصفحة الأصلي
    و المكتوب فيه Just a text in body tag بـالكلمة

    كود HTML:
    www.iq-team.org
    كما نلاحظ لم تظهر الجملة just a text in body tag الأن تعرفنا إلى اهم دوال html sinks و التي تستطيع كتابة كلام في الصفحة و تعرفنا الى دوال Sources التي تستطيع ان ترسل مدخل إلى الصفحة من خلال الرابط

    الأن نتطرق إلى الخطوة الأخيرة و هي كيفية حدوث ثغرات dom based xss من خلال هذة الدوال

    [NEW]كيف تحدث ثغرات Dom-Based Xss باستخدام دوال Sources و Sinks[/NEW]

    كما ذكرنا في السابق ان xss تحدث عندما يرسل المستخدم للصفحة مدخل و تقوم الصفحة بأخذ المدخل و عرضه مباشرة داخل الصفحة
    و نحن الأن تعرفنا كيف من الممكن ان تقوم بقراءة جزء من رابط الصفحة كمدخل و تعرفنا كيف يمكن ان نقوم بكتابة كلام من خلال javascript بداخل الصفحة

    اذاً الأن يتحقق لدنيا طرفي المعادلة التي تقوم بإحداث ثغرات XSS , نرى في الجزء التالي كيف يمكن ان تقوم بتنفيذ ثغرة XSS فقط من خلال Javascript

    لن اسرد المزيد من الكلام النظري و دعونا ننتقل مباشرة إلى كود الصفحة التالي و نرى ماذا تفعل

    كود HTML:
    <html>
    <body>
    <script>
    document.body.innerHTML = location.hash;
    </script>
    </body>
    الأن فقط بالنظر لكود الصفحة يمكن فهم ماذا تفعل

    ببساطة الصفحة تقوم بكتابة location.hash و هو الهاش تاج # الذي يأتي في نهاية رابط الصفحة بداخل <body> </body>

    نفتح الصفحة الأن من خلال المتصفح و نرسل اليها اي كلام بعد # لنرى اذا كان هذا الكلام صحيح ام لا

    [​IMG]

    جميل لقد قامت الصفحة بطباعة الـhash tag كما كتبناه و عند تغير كلمة Test سوف تتغير النتيجة في الصفحة

    طيب الأن ماذا سيحدث اذا ارسلنا كلمه test مصحوبة باكواد html او javascript ؟

    مثل سوف ارسل للصفحة Xss Payload كالتالي :

    كود PHP:
    <img src=x onerror=alert(1337)>
    دعونا نرى النتيجة

    [​IMG]

    هل لاحظت ما حدث ؟ الأن اتضحت لدنيا ثغرة xss بوضوح و تم تشغيل كود alert لـ 1337 هذا كان فقط مثال بسيط يوضح لدينا فكرة عمل ثغرات Dom-Based Xss

    قد يسألني احد الأن هل تعتقد ان مثل هذة الثغرات قد تكون موجودة في كثير من المواقع !؟

    الأجابة بالطبع نعم فثغرات Dom Based Xss ظهرت في اكبر المواقع العالمية مثل google , microsoft , yahoo , Adobe و غيرهم الكثير

    [NOTE]كيف يمكن إكتشاف ثغرات Dom Based Xss ؟[/NOTE]

    إكتشاف ثغرات Dom-Based Xss هي عملية ليست سهله لأنها تحتاج إلى فحص و تدقيق في اكواد Javascript و اغلب المواقع الأن تستخدم الكثير من اكواد Javascript قد يصل الكود فيها إلى الاف من الأسطر و سيصبح من الصعب ان تقوم بعمل ذلك و فحص هذة الأكواد بشكل يدوي

    لكن اصبح هناك ادوات تساعد على اكتشاف مثل هذة الثغرات و من اشهر و اقوى هذة الأدوات هي اداة Dominitor و لكنها ليست مجانية للأسف والأداة هي عبارة عن متصفح firefox معدل يستطيع بتبع الـ Dom في الصفحات و يمكنه اكتشاف sinks و sources بمجرد زيارة الصفحة من خلال المتصفح

    دعواتكم بالتوفيق

    في امان الله {1!@}
     
  2. ! ـآوتآر !

    ! ـآوتآر ! DeveloPer Plus

    الأنتساب:
    ‏19 يوليو 2012
    المشاركات:
    192
    الإعجابات المتلقاة:
    1
    نقاط الجائزة:
    18
    الإقامة:
    السـ جــــده ـعوديـة
    رد: التحليل الشامل لثغرات Dom-based Xss بالتفصيل الممل

    وعليكم السلام ورحمة الله

    يعطيك الف عافية ع المجهود ,
     
  3. Mstr Yaser

    Mstr Yaser <span style="font-weight: bold; text-shadow: #BBBB موقوف لمخالفة الشروط

    الأنتساب:
    ‏21 نوفمبر 2014
    المشاركات:
    353
    الإعجابات المتلقاة:
    6
    نقاط الجائزة:
    18
    المخالفات
    1
    رد: التحليل الشامل لثغرات Dom-based Xss بالتفصيل الممل

    بارك الله بيك على الموضوع القيم والرائع
     
  4. Mr.FriezA

    Mr.FriezA V • I • P

    الأنتساب:
    ‏10 مارس 2014
    المشاركات:
    552
    الإعجابات المتلقاة:
    21
    نقاط الجائزة:
    18
    الجنس:
    ذكر
    الإقامة:
    افضل و اطهر بقاع الارض
  5. Тђе Масћіле

    Тђе Масћіле Developer

    الأنتساب:
    ‏23 مارس 2012
    المشاركات:
    76
    الإعجابات المتلقاة:
    1
    نقاط الجائزة:
    8
    الإقامة:
    ارض العزه
    رد: التحليل الشامل لثغرات Dom-based Xss بالتفصيل الممل

    تسسلم إيدك يا بطل
     
  6. صــــاروخ

    صــــاروخ Developer

    الأنتساب:
    ‏3 ديسمبر 2012
    المشاركات:
    31
    الإعجابات المتلقاة:
    1
    نقاط الجائزة:
    8
    رد: التحليل الشامل لثغرات Dom-based Xss بالتفصيل الممل

    شرح رائع وواضح ومفهوم
    استمر اخى الكريم
     
  7. Magic7hearts

    Magic7hearts Developer

    الأنتساب:
    ‏13 ابريل 2012
    المشاركات:
    48
    الإعجابات المتلقاة:
    0
    نقاط الجائزة:
    6
    الإقامة:
    مصر
    رد: التحليل الشامل لثغرات Dom-based Xss بالتفصيل الممل

    مشالله دايما مبدع بالتوفيق
     
  8. Mafia Scorpion

    Mafia Scorpion Developer

    الأنتساب:
    ‏19 أغسطس 2014
    المشاركات:
    62
    الإعجابات المتلقاة:
    0
    نقاط الجائزة:
    6
    رد: التحليل الشامل لثغرات Dom-based Xss بالتفصيل الممل

    بارك الله فيك شرح اكثر من رائع اخي الغالي
     
  9. MR.SINO.HACKER

    MR.SINO.HACKER Developer

    الأنتساب:
    ‏22 نوفمبر 2012
    المشاركات:
    13
    الإعجابات المتلقاة:
    0
    نقاط الجائزة:
    1
    الإقامة:
    [A][̲̅L][̲̅G][̲̅E][̲̅R][̲̅I][̲̅A]
    رد: التحليل الشامل لثغرات Dom-based Xss بالتفصيل الممل

    يعطيك ، العافيةةِ

    مجهودككِ ، تشكر عليةةِ /~شكرآآ



    :{w}:
     
  10. kalaka

    kalaka Developer

    الأنتساب:
    ‏11 مارس 2012
    المشاركات:
    81
    الإعجابات المتلقاة:
    1
    نقاط الجائزة:
    8
    الإقامة:
    تكساس
    رد: التحليل الشامل لثغرات Dom-based Xss بالتفصيل الممل

    تسلم ايدك يابطل ً#ٌ5oًًًُ.

    ماقصرت ..[​IMG]
     

مشاركة هذه الصفحة