مقال : مقدمة إلى ثغرات XXE – XML External Entity
السلام عليكم
في مجتمع isecur1ty نحن نحاول ان نبقي متبابعينا على علم باخر واحدث الثغرات والامور الامنية ومن الثغرات المهمة وخلو المحتوى العربي منها هي ثغرة XXE
ماهي 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 لو عرضنا الوثيقة الان
تم الان استدعاء المتغير وكان المتغير هو &isecur1ty; في منتصف ال<foo> وتم تعريف قيمته في الخانة XXE TEST
<!ENTITY isecur1ty “XXE TEST ” >]>
الان اللون الاخضر يشير الى اسم المتغير واللون الاحمر يشير الى قيمة المتغير .
الان تم تعريف المتغير الى نص فقط كيف يمكن الاستفادة من هذا ؟
الجواب بوضع أمر SYSTEM قبل قيمة المتغير وبذلك سوف يقراها معالج XML كأمر سحب او ادراج للملف الموجود في القيمة
مثل الان لو وضعنا الامر system ووضعنا رابط موقعنا
حين سيتم ارسال هذا البيانات . سوف يقوم السيرفر بارسال طلب الى موقعنا ويطلب الملف XXE.html يمكن ان نسجله في السجلات الLOG .
الان لو اردنا سحب كلف ETC/PASSWD في السيرفر كل ما علينا القيام به هو طلبه عن طريق ال
سوف يرد السيرفر بجلب ملف ال etc/passwd ويعرضه على شكل نص الامر مقارب لثغرة LFI ولكن مع امكانيات اكبر سيتم شرحها لاحقاً
مثال عملي
الأن لو كنت تبحث في موقع وحين سجلت دخول وجدت ان البيانات يتم ادخالها بصيغة XML
واردنا ان نجرب ثغرة XXE سنقوم بتعديل الطلب كالاتي :
ونرسل الطلب الأن سوف نحصل على معلومات ملف etc/passwd
هذه الثغرة تعتبر ثغرة خطيرة جداً وتعتبر ثغرة حقن اكواد كRCE
بعض المقالات حول الثغرة :
- ثغرة XXE في فيس بوك (جائزة 34,000$)
- ثغرة XXE في شركة QIWI (جائزة 1,000$)
- شرح ثغرة XXE
- التحقق من ثغرات XXE
سيتم شرح العمليات وكيفية الاستغلال في مواضيع لاحقة .
للاستفسارات اترك تعليقاً هنا او اتصل بي Abdulahhusam@
الف شكر .. مقاله رائعه ونادره
http://www.4techin.blogspot.com
مقال ممتاز وأكثر من رأئع أستمر يا مبدع
ماهي الطريقة الصحيحة لتعلم هذه الثغرات واستغلالها ؟
السلام عليكم
وجدت نفس الثغره في موقع http://ubnt.com/
شكرا
طيب دا معناه ان لازم الموقع يكون بيسمح بدخول البيانات بصيغة xml او بيقبل رفع xml فقط ؟؟؟
عبدالله حسام
مبرمج ومختبر اختراق من العراق ..
أبدعت يابطل الله يعطيك العافية على هذا الشرح الوافي المبسط …عساك على القوة …
بالتوفيق ياغالي …