محترف الحاسوب: مقدمة إلى ثغرات XXE – XML External Entity

ليس العار في أن نسقط ولكن العار ألا نستطيع النهوض

محترف الحاسوب مدونة تهتم بكل ما هو جديد بعالم التكنولوجيا والانترنت والحاسوب بشكل وتقدم اخر الاخبار و افضل البرامج و تضم مجموعة من المواضيع المفيدة في شتى مجالات التقنية

يتم التشغيل بواسطة Blogger.

محترف الحاسوب


الاثنين، 29 أغسطس 2016

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

ماهي 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 كأمر سحب او ادراج للملف الموجود في القيمة


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

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

123


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

12345


مثال عملي 


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

21

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

1



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

3


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

ماهي 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 كأمر سحب او ادراج للملف الموجود في القيمة


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

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

123


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

12345


مثال عملي 


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

21

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

1



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

3


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

ليست هناك تعليقات :

إرسال تعليق

عبدالعظيم الهادي2013 : عبدالعظيم الهادي2013