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 كالتالي :
- السطر رقم 2 وَ 3 : يتم دمج القيم القادمة من الـ HTTP Request مع الـ query * هنا مصدر الخَلل ، لم يتم معالجة المدخلات بالشكل السليم!
- السطر رقم 4 : يقوم هذا السطر بتنفيذ الـ Query
لنأخذ مثال آخر،
ملف الـ XML الذي سيتم تنفيذ الـ XPath query عليه كالآتي :
تعليمة الـ XPath التي تقوم بإسترجاع جميع الإيميلات ستبدو كالتالي :
ولو أردنا عرض البيانات الخاصة بالمستخدم Dawes ستكون التعليمة كالتالي :
الآن لنفترض أن تطبيق الويب سيقوم بعرض بيانات الـ credit card بناءً على اسم المستخدم username وكلمة المرور password ، سيتم تمرير هذه القيم من قبل المستخدم وستكون الـ query كالآتي :
في حالة لم يقم المبرمج بمعالجة هذه المدخلات بالشكل السليم، قد يقوم المخترق بحقن القيمة التالية في حقل كلمة المرور :
سيؤدي حقن القيمة السابقة إلى جعل التعليمة كالآتي :
والتي ستقوم بعرض قيم الـ 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
يوتيوب: