تحت المجهر: كيف يمكن أن تكون ثغرات LFI بوابتك إلى أمان الويب
ثغرات LFI هي نوع من الثغرات الأمنية التي تسمح للمهاجم بإدراج ملفات محلية على الخادم عبر مدخلات غير مفلترة. يحدث هذا عادة في تطبيقات الويب التي تستخدم لغات البرمجة مثل PHP.
كيف تحدث ثغرات LFI؟
تحدث ثغرات LFI عندما يتمكن المهاجم من تمرير مسار ملف عبر مدخلات المستخدم ويقوم التطبيق بإدراج هذا الملف وتنفيذه. يمكن أن يسمح هذا للمهاجم بقراءة ملفات النظام الحساسة، أو تنفيذ تعليمات برمجية ضارة إذا تمكن من إدراج ملف يحتوي على تعليمات تنفيذية.
مراحل استغلال ثغرات LFI
1. الفهم الأولي للتطبيق
أولاً، يحاول المهاجم فهم كيفية تعامل التطبيق مع ملفات الإدراج. يمكن أن يقوم بذلك من خلال تحليل شفرة المصدر إذا كانت متاحة أو من خلال تجربة إدخال قيم مختلفة في مدخلات التطبيق.
2. التحقق من القابلية للاستغلال
المهاجم يحاول إدخال مسارات ملفات بسيطة مثل:
http://example.com/page.php?file=test.txt
لمعرفة ما إذا كان التطبيق سيقوم بإدراج الملف أم لا. إذا تم إدراج الملف، فهذا يشير إلى وجود ثغرة LFI.
3. استغلال الثغرة لقراءة الملفات الحساسة
بمجرد تأكيد الثغرة، يمكن للمهاجم محاولة قراءة ملفات النظام الحساسة مثل `/etc/passwd`:
http://example.com/page.php?file=../../etc/passwd
هذه الملفات يمكن أن تحتوي على معلومات هامة مثل أسماء المستخدمين على النظام.
4. تجاوز قيود الفلترة
إذا كان هناك محاولات لمنع الهجمات باستخدام فلترة بسيطة، يمكن للمهاجم تجربة تقنيات تجاوز الفلترة مثل الترميز المزدوج (Double Encoding) أو استخدام طرق أخرى لتخطي الفلترة:
5. تحويل LFI إلى RCE (Remote Code Execution)
إذا تمكن المهاجم من رفع ملفات تحتوي على تعليمات برمجية ضارة إلى الخادم، يمكنه استخدام LFI لتنفيذ هذه الملفات:
http://example.com/page.php?file=uploads/malicious.php
يمكن للمهاجم أيضاً استخدام تقنيات مثل تلويث السجلات (Log Poisoning) لتنفيذ تعليمات برمجية ضارة إذا تمكن من كتابة تعليمات برمجية إلى ملف سجل.
أمثلة عملية على استغلال LFI
نفترض أن التطبيق يستخدم الشفرة التالية لإدراج ملفات:
إذا استدعى المستخدم هذا الكود عبر الرابط التالي:
http://example.com/page.php?file=../../etc/passwd
فإن التطبيق سيقوم بقراءة محتويات الملف `/etc/passwd`.
تنفيذ تعليمات برمجية ضارة من ملفات السجلات
إذا كان التطبيق يسجل أخطاء المستخدمين في ملف سجل، يمكن للمهاجم إدخال تعليمات برمجية ضارة كمدخل. لنفترض أن التطبيق يسجل اسم المستخدم عند حدوث خطأ في تسجيل الدخول:
يمكن للمهاجم إدخال اسم مستخدم يحتوي على شفرة PHP:
- <?php echo shell_exec('id'); ?>
إذا قام التطبيق بعد ذلك بإدراج ملف السجل عبر LFI، يمكن تنفيذ الشفرة الضارة:
- http://example.com/page.php?file=/var/log/app_errors.log
كيفية الحماية من ثغرات LFI
1. التحقق من المدخلات وتطهيرها:
- التحقق من صحة المدخلات وتطهيرها لمنع إدخال مسارات ملفات ضارة.
- يمكن استخدام دوال مثل `basename` لإزالة أي مسارات تحتوي على `../`.
2. تحديد المسارات المسموح بها:
- بدلاً من السماح بإدخال أي مسار ملف، يمكن تحديد قائمة بالمسارات المسموح بها والتحقق من أن الملف المطلوب إدراجه يقع ضمن هذه المسارات.
3. تقييد الوصول إلى الملفات:
- تأكد من أن التطبيق لا يمكنه الوصول إلى الملفات الحساسة خارج الدليل المخصص له. يمكن استخدام إعدادات الخادم لتقييد الوصول إلى الملفات.
4. استخدام إعدادات الخادم:
- تكوين الخادم لمنع تنفيذ ملفات PHP في أدلة معينة مثل أدلة الرفع. يمكن تحقيق ذلك من خلال إعدادات مثل `open_basedir` في PHP لمنع وصول البرنامج إلى ملفات أو أدلة معينة.
5. استخدام معايير الأمان:
- اتباع معايير الأمان المعروفة مثل OWASP واتباع إرشاداتها حول كيفية تأمين تطبيقات الويب من ثغرات LFI وغيرها من الثغرات الأمنية.
خاتمة
ثغرات LFI تعتبر من الثغرات الخطيرة التي يمكن أن تؤدي إلى كشف معلومات حساسة أو تنفيذ تعليمات برمجية ضارة على الخادم. يجب على مطوري التطبيقات توخي الحذر والتحقق من صحة المدخلات وتطهيرها لمنع مثل هذه الهجمات، بالإضافة إلى اتباع أفضل الممارسات الأمنية وتحديث التطبيقات بانتظام للحد من مخاطر الثغرات الأمنية.