XPath Injection

XPath Injection

 

 

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

هذه المقالة استكمال لسلسلة المقالات المتعلّقة بالـ XML

 

 قبل الخوض في تفاصيل ثغرة  XPath Injection لنعرف أولًا ما هو الـ XPath  في الأساس؟

 

 XPath :

 الـ XPath عبارة عن Query Language يتم استخدامها لجلب بعض البيانات المخزنة في XML Document

تعريف مختصر وجميل، لنفصّل فيه الآن أكثر ..

في بعض تطبيقات الويب (في الغالب التطبيقات البسيطة) يتم استخدام الـ  XML Documents لتخزين بعض البيانات مثل : أسماء المستخدمين وبياناتهم، الصلاحيات، و أي نوع من البيانات التي يخدمها التطبيق ، على سبيل المثال تطبيق ويب يعرض قائمة بالكتب، قد يتم تخزين قائمة الكتب وتفاصيل كل كتاب ( تاريخ النشر ، الكاتب ، الإصدار .. إلخ ) في ملف  XML

 

حتى يستطيع تطبيق الويب معالجة هذه البيانات ( عرضها للمستخدم مثلًا ) لابد من وجود آلية تُمكّن تطبيق الويب من جلب البيانات المخزنة في ملفات الـ XML

الـ XPath هي اللغة -إن صح التعبير- التي تتيح لنا الوصول وتنفيذ Query على البيانات المخزنة في ملفات الـ XML

 

 XPath Injection :

يحدث هذا النوع من الثغرات عندما يقوم تطبيق الويب بمعالجة XPath query يتم بناءها بناءً على مُدخَل ( input ) يأتي من المستخدم، وهذا المُدخَل لا يتم معالجته بالشكل السليم، بالتالي قد يقوم المخترق بإستغلال هذا الخطأ البرمجي والتحكم بالـ XPath query التي يتم تمريرها للتطبيق،

لنأخذ الكود التالي كمثال على هذه الثغرة:

-       الكود خاص بـ OWASP Mutillidae II  ، تحديدًا الصفحة التي تعرض بيانات المستخدم، تستطيع إيجادها في هذا المسار : /mutillidae/user-info-xpath.php

 

 

-       السطر رقم 1  : يتم بناء الـ XPath query التي تقوم بالبحث في الـ  Node المُسمّاه Employee وتمرّر لها قيمتين ، إسم المستخدم USERNAME و PASSWORD ، هذه القيمتين يقوم المستخدم بإدخالها، وتُمرّر لتطبيق الويب عبر الـ URL Parameters  كالتالي :

 

A screenshot of a cell phone

Description automatically generated

 

-       السطر رقم 2  وَ 3 : يتم دمج القيم القادمة من الـ HTTP Request مع الـ query * هنا مصدر الخَلل ، لم يتم معالجة المدخلات بالشكل السليم!

-       السطر رقم 4 : يقوم هذا السطر بتنفيذ الـ Query

 

لنأخذ مثال آخر،

ملف الـ XML  الذي سيتم تنفيذ الـ XPath query عليه كالآتي :

 

A screenshot of a cell phone

Description automatically generated

 

تعليمة الـ  XPath التي تقوم بإسترجاع جميع الإيميلات ستبدو كالتالي :

A picture containing table

Description automatically generated

ولو أردنا عرض البيانات الخاصة بالمستخدم Dawes ستكون التعليمة كالتالي :

الآن لنفترض أن تطبيق الويب سيقوم بعرض بيانات الـ credit card  بناءً على اسم المستخدم username  وكلمة المرور password ، سيتم تمرير هذه القيم من قبل المستخدم وستكون الـ  query  كالآتي :

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

A close up of a logo

Description automatically generated

سيؤدي حقن القيمة السابقة إلى جعل التعليمة كالآتي :

والتي ستقوم بعرض قيم الـ credit cards  لجميع المستخدمين

 

الممارسات الصحيحة لمنع ثغرات الـ XPath Injection :

-       لا تقم ببناء queries تستند على مُدخلات قادمة من المستخدم في المقام الأول

-       إن كان ولا بد من بناء مثل هذه التعليمات، فتأكد بأنك تقوم بإختبار الـ parameters القادمة من المستخدم والتأكد بأنها تحتوي فقط على القيم المسموحة، مثل الأرقام والحروف فقط، بمعنى آخر إستخدم منهجية White List لإختبار المدخلات، ولا تقم بالإعتماد على تنقيح المدخلات Sanitization ، حيث أن الطريقة الأخيرة لها طُرق تجاوز عدّة.

 

 

 

المراجع:

كتب:

-       The Web Application Hackers Handbook  , Chapter 9 (Injecting into XPath)

معمل:

-       OWASP Mutillidae II : https://github.com/webpwnized/mutillidae

يوتيوب:

-       Introduction to XPath Injection : https://youtu.be/fV0qsqcScI4