• بواسطة x32x01 ||
ثغرة Local File Inclusion(LFI) هي ثغرة تتيح قراءة وتصفح وتشغيل الملفات الموجودة في السيرفر بدون طلب أي صلاحيات، وذلك بمجرد كتابة أوامر بسيطة جداً جداً.

أولاً، ما هو معنى “include” ؟
عندما تريد أن تستدعي ملف في php أو JSP, فأنت تقوم بعملية “include” أو تضمين للملف. إذاً “Local File Inclusion” تعني عرض الملفات المتاحة في السيرفر الذي يعمل عليه الموقع. الدالة المسؤولة عن عرض الملف تستقبل مسار الملف المطلوب، وقد ترى مسار الملف في رابط الصفحة في الأعلى، هكذا:
Code:
index.php?file=filename.html
إذا “Dynamic File Inclusion” تعني أن الصفحة تقوم تلقائياً بالبحث عن الملف والقيام بعرضه. وهنا توجد ثغرة خطيرة، إذ لا يقوم الموقع بالتحقق من الملف المطلوب! وبذلك نستطيع أن نقوم بالتنقل في السيرفر وعرض أي ملف نريده (إذا كان الموقع يملك الصلاحيات في السيرفر طبعاً).

نبدأ الآن بالحديث عن مخاطر هذه الثغرة وأسباب حدوثها…
يتم استغلال هذه الثغرة عبر تقنية الـ “Dynamic File Inclusion” وهي أحد تقنيات البرمجة بـ JSP (Java Server Pages) وملف الـ JSP هو ملف HTML لكن بداخله JSP Tags تحوي داخلها بعض من أكواد الجافا. وتُستغل عبر عرض السيرفر للملف المطلوب دون التحقق من الأمر المدخل أو نوعية الملف، وتحدث هذه الثغرة أيضاً في تقنيات الـ ASP وغيرها.

هذه الثغرة تمكن الهاكر من قراءة الملفات الحساسة في السيرفر والتنقل بين الملفات كما يشاء، ويمكنه أيضاً تفعيل أي سكربت موجود في السيرفر، بحيث لو أنه قد قام سابقاًُ برفع ملف سكربت في أحد المسارات الموجودة في السيرفر فسيتمكن من تنشيطه عن طريق هذه الثغرة, لأن الموقع لا يقم بالتحقق بمسار الملف المدخل من الهاكر, هذا يمكنه أن يدخل “path traversal characters” وهي رموز تسمح له بالتنقل بأي مسار على السيرفر, ولو كان خارج مسار الموقع.

استكشاف الثغرة:
*مفاتيح لفهم ماسيتم ذكره:
“..” تعني العودة للمسار السابق مثل أن تكون في var / www/ وعند إدخالك للأمر “… cd” ستعود إلى المسار /var/ .

*المسار “etc/passwd/”: هو مسار لملف يحتوي على معلومات عن كل مستخدم في النظام واسم الملف “passwd”، وفي كل سطر في الملف يوجد سبعة معلومات عن المستخدم منها: الإسم، الرقم السري (مشفر) ، user ID، group ID، وغيرها…

لاستكشاف ثغرة LFI في أي موقع إلكتروني علينا البحث عن السكربتات التي تأخذ أسماء الملفات على أنها متغيرات(Parameters)، مثل:
Code:
http://website.com/index.php?page=home.html
هنا اسم الملف هو home.html، ونحن نريد عرض الملف etc/passwd/ فمالذي علينا فعله؟

ذكرنا في الأعلى أنه للعودة إلى مسار سابق علينا إدخال نقطتين “…” إذاً، سنقوم بتغيير اسم الملف إلى:
Code:
/../../../etc/passwd
لكن يجب أن نتأكد من المسار الحالي للصفحة التي نريد بدء الهجوم عن طريقها، يمكننا معرفة ذلك عن طريق تغيير اسم الملف إلى "/.." بعد ذلك سيظهر لك الخطأ التالي:
[IMG]
إذاً نستنتج أن المسار الموجود فيه الملف الحالي هو ” /var/www/mutillidae/index.php ”

استغلال ثغرة LFI:
والآن بعد أن استنتجنا أن المسار الحالي هو ” /var/www/mutillidae/index.php ” أي على بعد أربع ملفات من المسار الرئيسي ، سنقوم الآن بالعودة أربع مرات لكي نصل إلى المسار الرئيسي في السيرفر ثم سنطلب من خاصية include أن تعرض لنا محتوى ملف passwd، نقوم بتغيير اسم الملف إلى ../../../../etc/passwd

حيث أصبح الرابط كالتالي
Code:
http://website.com/index.php?page=../.././../etc/passwd
وهكذا قمنا بطلب عرض ملف passwd والنتيجة ستكون…
[IMG]
وفي بعض الأحيان تكون خاصية include داخل كود PHP بهذا الشكل:
Code:
<?php “include/”.include($_GET['filename'].“.php”); ?>
فهنا عند إدخال اسم الملف المطلوب سيوضع مكان كلمة filename وسيضاف php. إليه ويصبح في حالتنا كالتالي: /../../../etc/passwd.php

ولا يوجد ملف بهذا الإسم، لذلك سنقوم باستخدام تكنيك الـnull-byte بإضافة 00% بعد الإسم الذي ندخله لتصبح النتيجة: /../../../etc/passwd%00

حيث أن 00% تعني نهاية هذا الـstring وما بعد هذه العلامه سيتم تجاهله.

وقد تؤدي هذه الثغرة إلى تنفيذ هجمات أخرى مثل XSS, code execution,DoS بالإضافة إلى حصول الهاكر على معلومات حساسة كما شرحنا في هذا الموضوع، وذلك عن طريق رفع ملفات إلى السيرفر بها أكواد وسكربتات خبيثة إلى السيرفر وتشغيلها عن طريق استغلال ثغرة LFI كما قمنا بشرح هذه الاستغلالات في شرحنا لثغرة RFI

لأن ثغرات LFI و RFI لها نفس المبدأ لكن ثغرة RFI تمكننا من تشغيل الملفات الخبيثة من سيرفر آخر غير السيرفر الأساسي.
 

المشاركات المتشابهة

الردود
0
المشاهدات
13
الردود
0
المشاهدات
15
الردود
0
المشاهدات
13
الردود
0
المشاهدات
19
الردود
0
المشاهدات
23
الوسوم : الوسوم
lfi local file inclusion أكتشاف ثغرات المواقع ثغرات المواقع ثغرة local file inclusion
عودة
أعلى