دليل LFI العملي: شرح واستراتيجيات الحماية سهل

x32x01
  • بواسطة x32x01 ||

إيه هي ثغرة Local File Inclusion (LFI)؟ 🧐📁

ثغرة LFI بتخلي المهاجم يقرأ أو يتصفح أو حتى يشغّل ملفات موجودة على السيرفر من غير ما يبقى عنده صلاحيات خاصة - كل ده بس عن طريق تغيير رابط بسيط أو باراميتر في الصفحة.

يعني إيه "include" ؟ 🤓

لما بنستدعي ملف في PHP أو JSP بنعمل include، يعني بنقول للبرنامج: "ياريت جِب الملف ده واطبعه هنا". لو الدالة اللي بتعمل include دي بتاخد اسم الملف من رابط المستخدم من غير تحقق، يبقى في ثغرة - تقدر تعرض أي ملف السيرفر يقدر يوصله.

مثال بسيط:
Code:
index.php?file=filename.html
لو الموقع بياخد file ويعمل include من غير فلترة، ممكن نغيّره ونطلب ملفات تانية موجودة على السيرفر.

ليه دي مشكلة كبيرة؟ 🔥

لأن المهاجم يقدر:
  • يقرأ ملفات حساسة زي /etc/passwd أو ملفات الكونفيج.
  • يشغّل سكربت كان هو رفعه قبل كده لو لقى مكان يرفعه فيه.
  • ينفّذ هجمات تانية بعد كده زي XSS أو RCE لو الظروف ساعدته.

ازاي نكتشف ثغرة LFI - الفكرة العامة 🕵️‍♀️

دَوّر على سكربتات بتاخد اسم ملف كـ parameter، زي:
Code:
http://website.com/index.php?page=home.html
لو غيرت page لحاجة زي:
Code:
/../../../etc/passwd
وبعدين ظهرلك محتوى الملف ده - يبقى عندك LFI. لازم تحسب المسار الصح بالاعتماد على مكان الملف الحالي، وتجرّب path traversal (نقطتين ..) عشان تطلع لفوق في الشجرية بتاعة الملفات.

أمثلة على طرق الاستغلال (مماثلة للمقال الأصلي) 🧩

  • لو المسار الحالي: /var/www/mutillidae/index.php وعايز توصل
    Code:
    /etc/passwd
    ، هتستعمل حاجة زي: ../../../../etc/passwd
  • ساعات الـinclude بيضيف لاحقة .php تلقائيًا، فتحتاج حيل زي الـnull-byte (%00) علشان تقطع السلسلة، لكن تفاصيل التطبيق بتختلف من سيرفر للتاني.

الثغرة ممكن توصّل لإيه تاني؟ (الوخيمة) ⚠️

  • قراءة ملفات حساسة: معلومات عن المستخدمين أو إعدادات القواعد.
  • تشغيل سكربتات خبيثة: لو المهاجم قدر يرفع ملف PHP قبل كده، ممكن يشغّله عن طريق LFI.
  • تصعيد لهجمات تانية: XSS، RCE، أو حتى DOS حسب الحالة.

طرق الحماية العملية - اعملها فورًا ✅🔐


1. فلترة المدخلات (Input Validation)​

ما تقبلش أي اسم ملف جاي من المستخدم من غير تحقق صارم. خلي الـapp يقبل بس قيم محددة (white-list).

2. منع الـPath Traversal​

منع أو تطهير (sanitize) أي رموز زي ../ أو أي محاولات للخروج من الـwebroot.

3. استخدم مسارات ثابتة أو mapping​

بدل ما تحط الملف كـ string مباشر، استخدم جدول يربط مفاتيح بأسماء ملفات داخلية (مثال: page=home → home.php).

4. تقليل صلاحيات الملفات (Least Privilege)​

حط صلاحيات الملفات على السيرفر بحيث حساب الـwebserver ما يقدرش يقرأ غير الملفات اللي محتاجها بالظبط.

5. منع رفع الملفات غير المصرح بها​

لو المساحة بتسمح رفع ملفات، اضمن فحص الامتدادات، نوع المحتوى، وتخزينها في مكان مافيش include ليه.

6. Logging ومراقبة​

سجّل محاولات الوصول الغريبة وردود السيرفر وراقبهم - دايماً ممكن تلاقي محاولات Path Traversal في اللوجز.

7. استخدم WAF وRequest Filtering​

WAF كويس يقدر يصد أنماط الهجوم المعروفة ويمنع محاولات LFI الشائعة.

نصايح للمطوّرين - خطوات سريعة للتطبيق 🛠️

  • لا تستخدم user input مباشرة في include.
  • استخدم دوال تأكيد المسار (realpath) وتأكد إنه جوا الـwebroot.
  • حدّث لغات وأطر العمل والبكتجات دوريًا.
  • اختبر تطبيقك بانتظام (فحوصات أمنية مصرح بها أو pentest).
 
التعديل الأخير:
المواضيع ذات الصلة
x32x01
الردود
0
المشاهدات
697
x32x01
x32x01
x32x01
الردود
0
المشاهدات
678
x32x01
x32x01
x32x01
الردود
0
المشاهدات
529
x32x01
x32x01
x32x01
الردود
0
المشاهدات
564
x32x01
x32x01
x32x01
الردود
0
المشاهدات
710
x32x01
x32x01
x32x01
الردود
0
المشاهدات
665
x32x01
x32x01
x32x01
الردود
0
المشاهدات
155
x32x01
x32x01
x32x01
الردود
0
المشاهدات
594
x32x01
x32x01
x32x01
الردود
0
المشاهدات
541
x32x01
x32x01
x32x01
الردود
0
المشاهدات
705
x32x01
x32x01
الدخول أو التسجيل السريع
نسيت كلمة مرورك؟
إحصائيات المنتدى
المواضيع
1,836
المشاركات
2,051
أعضاء أكتب كود
460
أخر عضو
jhghk
عودة
أعلى