المقال المثبتمواضيع عامةمواضيع ومقالات

مقال : مقدمة إلى ثغرات XXE – XML External Entity

تم أرشفة هذا المحتوى


السلام عليكم

في مجتمع isecur1ty نحن نحاول ان نبقي متبابعينا على علم باخر واحدث الثغرات والامور الامنية ومن الثغرات المهمة وخلو المحتوى العربي منها هي ثغرة XXE

zero

ماهي XXE ؟

XXE هي اختصار للعبارة  XML External Entity وهي عبارة عن هجوم يستهدف البرامج التي تعمل على طريقة ادخال البيانات عن طريق XML يمكن استخدامها لحقن الاكواد (RCE) او هجمات الحرمان من الخدمة (DDos) فحص البوراتات وLFI ادراج الملفات المحلية .

 

يحدد معيار  XML  في صيغة او بنية XML وجود عنصر يسمى عنصر يسمى entity لغرض جلب محتوى او بيانات من وحدات تخزينية اخرى قد تكون داخل السيرفر او خارجه ويتم اضافتها للمستند يعتبر كمتغير في البرمجة حيث يتم تعرفيه في أول النص . يمكن تعرفها كنص , رابط خارجي , ملف , كود , الخ …

 

تعدد ثغرات XXE نادرة في الويب لعدة أسباب منها قلة استخدام المبرمجين لXML كنوع ادخال معوضين عنها بJSON او JSONP وهناك بعض الالزامات حيث يمكن ادخال XML كمدلاخات يتم لفترة المدلاخات . لكن ماذا لو نسي المبرمج الفلترة ؟ ومكن قابلية أضافة عنصر خارجي entity  ؟

 

الجواب ببساطة سيكون مصاب بثغرة XXE .

الان لنقوم بتطبيق عملي صغير على الثغرة

بيانات مدخلة ب XML :

 

<?xml version=”1.0″ encoding=”ISO-8859-1″?>

<!DOCTYPE foo [   <!ELEMENT foo ANY >

<!ENTITY isecur1ty “XXE TEST ” >]>

<foo>&isecur1ty;</foo>

 

نلاحظ الان عدة عناصر في الصفحة اول سطر هو تعريف لوثيقة XML .

العصنر المهم هو عنصر ENTITY  في حالتنا اسمه isecur1ty  وهو المتغير . وتم استدعاء ENTITY  في الوثيقة بوضع & في اوله و ; في اخره بوصفه متغير ENTITY  لو عرضنا الوثيقة الان

 

xxe

 

تم الان استدعاء المتغير وكان المتغير هو &isecur1ty; في منتصف ال<foo> وتم تعريف قيمته في الخانة XXE TEST

<!ENTITY isecur1ty XXE TEST ” >]>

الان اللون الاخضر يشير الى اسم المتغير واللون الاحمر يشير الى قيمة المتغير .

الان تم تعريف المتغير الى نص فقط كيف يمكن الاستفادة من هذا ؟

الجواب بوضع أمر SYSTEM قبل قيمة المتغير وبذلك سوف يقراها معالج XML كأمر سحب او ادراج للملف الموجود في القيمة

 

مثل الان لو وضعنا الامر system ووضعنا رابط موقعنا

 

231231

حين سيتم ارسال هذا البيانات . سوف يقوم السيرفر بارسال طلب الى موقعنا ويطلب الملف XXE.html يمكن ان نسجله في السجلات الLOG .

 

الان لو اردنا سحب كلف ETC/PASSWD في السيرفر كل ما علينا القيام به هو طلبه عن طريق ال

 

123

 

سوف يرد السيرفر بجلب ملف ال etc/passwd ويعرضه على شكل نص الامر مقارب لثغرة LFI ولكن مع امكانيات اكبر سيتم شرحها لاحقاً

 

12345

 

 

مثال عملي 

 

الأن لو كنت تبحث في موقع وحين سجلت دخول وجدت ان البيانات يتم ادخالها بصيغة XML

 

21

 

واردنا ان نجرب ثغرة XXE سنقوم بتعديل الطلب كالاتي :

 

1

 

 

 

ونرسل الطلب الأن سوف نحصل على معلومات ملف etc/passwd

 

3

 

 

هذه الثغرة تعتبر ثغرة خطيرة جداً وتعتبر ثغرة حقن اكواد كRCE

 

بعض المقالات حول الثغرة :

 

سيتم شرح العمليات وكيفية الاستغلال في مواضيع لاحقة .

للاستفسارات اترك تعليقاً هنا او اتصل بي Abdulahhusam@

 

 

عبدالله حسام

مبرمج ومختبر اختراق من العراق مهتم بأمن المعلومات والثغرات البرمجية للتواصل معي عبر تويتر https://twitter.com/Abdulahhusam

مقالات ذات صلة

‫5 تعليقات

  1. مقال ممتاز وأكثر من رأئع أستمر يا مبدع
    ماهي الطريقة الصحيحة لتعلم هذه الثغرات واستغلالها ؟

  2. طيب دا معناه ان لازم الموقع يكون بيسمح بدخول البيانات بصيغة xml او بيقبل رفع xml فقط ؟؟؟

  3. عبدالله حسام
    مبرمج ومختبر اختراق من العراق ..
    أبدعت يابطل الله يعطيك العافية على هذا الشرح الوافي المبسط …عساك على القوة …
    بالتوفيق ياغالي …

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

زر الذهاب إلى الأعلى