مركز التطوير | DevHub

File path traversal Bug – ثغرة إجتياز مسار الملف

تعريف Path Traversal

Path Traversal، المعروف أيضًا باسم Directory Traversal، هو تقنية تُستخدم لاستغلال ثغرات في التطبيقات للوصول إلى ملفات حساسة على الخادم. الهدف الأساسي من هذه التقنية هو الخروج من المسار المحدد للوصول إلى مسارات أو ملفات غير مصرح بها.

تحدث ثغرة Path Traversal عندما يستدعي التطبيق ملفات أو صورًا من الخادم دون وجود قيود مناسبة على المدخلات. على سبيل المثال، إذا كان لدينا رابط مثل:

www.example.com/test.php?imagepath=205.png

فهذا يسمح للمهاجم بتعديل المعلمة imagepath للوصول إلى ملفات حساسة مثل /etc/passwd عن طريق استخدام مسارات النقطتين (..) للانتقال لأعلى في الهيكلية.

يمكن اكتشاف Path Traversal من خلال:

  1. التحقق من مدخلات المستخدم: البحث عن أي مدخلات تقبل بيانات تتعلق بالملفات.
    • هل هناك معلمات في الطلب يمكن استخدامها للوصول إلى ملفات؟
    • هل هناك امتدادات ملفات غير اعتيادية؟
  2. الأساليب التلقائية: استخدام أدوات مثل Burp Suite أو أدوات فحص أخرى للتحقق من وجود الثغرات.

يمكن استغلال Path Traversal عن طريق قراءة ملفات حساسة مثل /etc/passwd أو ملفات التكوين. أمثلة على الملفات التي يمكن الوصول إليها تشمل:

/proc/version للتحقق من إصدار نظام التشغيل.

/proc/mounts للحصول على قائمة الملفات الموجودة على النظام.

هناك عدة طرق يمكن استخدامها لتجاوز القيود المفروضة على Path Traversal:

  1. استخدام المسار الكامل (absolute path) مثل etc/passwd.
  2. استخدام المسارات المزدوجة (//) للتغلب على الحماية.
  3. تطبيق الترميز (encoding) على المدخلات مثل URL encoding.
  4. إذا كانت المدخلات يجب أن تبدأ بمسار معين، يمكنك إضافة المسار المطلوب ثم اتباعه بمدخلات مسار التنقل.
  5. استخدام بايت null (%00) لإنهاء مسار الملف عند الحاجة.
  6. محاولة فتح الملف باستخدام file://etc/passwd.
  7. استكشاف هيكلية الملفات من خلال تعديل المعلمات ومعرفة ما إذا كانت تعرض ملفات.

لمنع Path Traversal، يجب اتباع خطوات معينة:

  1. التحقق من المدخلات: يجب التحقق من جميع المدخلات قبل معالجتها، وتطبيق قوائم بيضاء (whitelists) للملفات المسموح بها.
  2. تجنب استخدام المدخلات مباشرة: من الأفضل عدم تمرير المدخلات المدخلة من قبل المستخدم إلى واجهات برمجة تطبيقات الملفات مباشرة. إذا كان ذلك ضروريًا، يجب استخدام APIs للتحقق من صحة المسارات المدخلة.

مثال على كود بلغة PHP

PHP
$file = BASE_DIRECTORY . '/' . $userInput;
if (strpos(realpath($file), realpath(BASE_DIRECTORY)) === 0) {
    // process file
}


المصادر

اترك تعليقاً

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