ثغرة LFI
مقدمة:
في عالم الأمن السيبراني، تُعد ثغرة تضمين الملفات المحلية (LFI) من الثغرات الشائعة والخطيرة التي تُهدد تطبيقات الويب. تَسمح هذه الثغرة للمهاجمين بتحميل ملفات موجودة على خادم الويب بشكل غير مصرح به، مما قد يُفضي إلى عواقب وخيمة.
ما هي ثغرة LFI؟
تحدث ثغرة LFI عندما يُسمح لتطبيق الويب بتضمين ملفات موجودة على الخادم دون التحقق من صحة مدخلات المستخدم. يمكن للمهاجم استغلال هذه الثغرة عن طريق إدخال مسار لملف مُحدد في أحد متغيرات التطبيق، مما قد يُجبر التطبيق على تحميل الملف وتنفيذه.
أنواع ثغرة LFI:
- ثغرة LFI مطلقة: تسمح للمهاجم بتضمين أي ملف موجود على الخادم، بما في ذلك ملفات النظام الحساسة.
- ثغرة LFI نسبية: تُقيد المهاجم بتضمين الملفات الموجودة في نفس مسار الملف المُضمن حاليًا.
أمثلة على استغلال ثغرة LFI:
- الكشف عن معلومات حساسة: يمكن للمهاجم تضمين ملفات تحتوي على معلومات حساسة، مثل كلمات المرور أو بيانات العملاء.
PHP
<?php
$file = $_GET['file'];
include($file);
?>
- تنفيذ أكواد على الخادم: يمكن للمهاجم تضمين ملفات برمجية ضارة، مثل ملفات PHP، لتنفيذ أكواد على الخادم.
PHP
<?php
$file = $_GET['file'];
if (file_exists($file)) {
include($file);
}
?>
- الحرمان من الخدمة (DoS): يمكن للمهاجم تضمين ملفات كبيرة جدًا لإبطاء أو إيقاف خادم الويب.
PHP
<?php
$file = $_GET['file'];
while (true) {
include($file);
}
?>
طرق استغلال ثغرة LFI:
- استخدام متغيرات URL:
يمكن للمهاجم إدخال مسار الملف في متغير URL.
PHP
?file=../../../../../../etc/passwd
- استخدام متغيرات النموذج:
يمكن للمهاجم إدخال مسار الملف في أحد حقول نموذج الويب.
HTML
<input type="text" name="file" value="...">
- استخدام ملفات تعريف الارتباط:
يمكن للمهاجم تخزين مسار الملف في ملف تعريف ارتباط.
PHP
setcookie('file', '../../../../../../etc/passwd');
طرق الحماية من ثغرة LFI:
- التحقق من صحة مدخلات المستخدم:
يجب التحقق من صحة جميع مدخلات المستخدم والتأكد من أنها لا تحتوي على مسارات غير آمنة.
PHP
<?php
$file = $_GET['file'];
if (!preg_match('/^[a-zA-Z0-9_\-]+\.php$/', $file)) {
die('Invalid file name');
}
include($file);
?>
- تقييد الوصول إلى الملفات:
يجب تقييد الوصول إلى الملفات الحساسة على الخادم.
PHP
<?php
if (!is_dir('uploads')) {
mkdir('uploads');
}
if (!is_writable('uploads')) {
chmod('uploads', 0775);
}
$file = $_GET['file'];
if (!file_exists('uploads/' . $file)) {
die('File not found');
}
include('uploads/' . $file);
?>
- استخدام وظائف تصفية الإدخال:
يمكن استخدام وظائف تصفية الإدخال لمنع تضمين الملفات غير المرغوب فيها.
PHP
<?php
$file = $_GET['file'];
$file = filter_var($file, FILTER_SANITIZE_FILENAME);
if (!file_exists($file)) {
die('File not found');
}
include($file);
?>
- تحديث برامج الويب:
يجب تحديث برامج الويب بانتظام لإصلاح الثغرات الأمنية المعروفة.
نصائح:
- استخدم أدوات اختراق اختبار ثغرات LFI:
تتوفر العديد من أدوات اختراق اختبار ثغرات LFI على الإنترنت. يمكن استخدام هذه الأدوات للبحث عن ثغرات LFI في مواقع الويب.
ملاحظة:
- لا تُستخدم المعلومات المُقدمة في هذه المقالة لشن هجمات على مواقع الويب أو الأنظمة الأخرى.
- يُنصح بمراجعة قوانين وأنظمة الدولة التي تتواجد فيها قبل استخدام أي أدوات اختراق اختبار ثغرات LFI.
أمثلة إضافية:
- استغلال ثغرة LFI لكشف معلومات حساسة:
PHP
?file=../../../../../../etc/passwd
يمكن للمهاجم استخدام هذا المثال لكشف معلومات حساسة، مثل كلمات المرور أو بيانات العملاء، من خلال تضمين ملف /etc/passwd.
- استغلال ثغرة LFI لتنفيذ أكواد على الخادم:
PHP
?file=../../../../../../etc/passwd;phpinfo();
يمكن للمهاجم استخدام هذا المثال لتنفيذ أكواد PHP على خادم الويب، مثل عرض معلومات حول نظام التشغيل والبرامج المُثبتة.
- استغلال ثغرة LFI للحصول على وصول shell:
PHP
?file=../../../../../../tmp/shell.php
يمكن للمهاجم استخدام هذا المثال للحصول على وصول shell إلى خادم الويب، مما يسمح له بتنفيذ الأوامر على الخادم.
الخاتمة:
ثغرة LFI هي ثغرة خطيرة يمكن أن تُهدد تطبيقات الويب. من المهم اتباع خطوات الحماية المذكورة أعلاه لمنع استغلال هذه الثغرة من قبل المهاجمين.
ملاحظة:
يُنصح بمراجعة قوانين وأنظمة الدولة التي تتواجد فيها قبل استخدام أي أدوات اختراق اختبار ثغرات LFI.
وانا غير مسؤل عن اي استخدامت لثغرة .