1. المدير العام

    المدير العام أدارة موقع أكتب كود

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

    أولاً، ما هو معنى “include” ؟
    عندما تريد أن تستدعي ملف في php أو JSP, فأنت تقوم بعملية “include” أو تضمين للملف. إذاً “Local File Inclusion” تعني عرض الملفات المتاحة في السيرفر الذي يعمل عليه الموقع. الدالة المسؤولة عن عرض الملف تستقبل مسار الملف المطلوب، وقد ترى مسار الملف في رابط الصفحة في الأعلى، هكذا:
    كود:
    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)، مثل:
    كود:
    http://website.com/index.php?page=home.html
    هنا اسم الملف هو home.html، ونحن نريد عرض الملف etc/passwd/ فمالذي علينا فعله؟

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

    [​IMG]
    إذاً نستنتج أن المسار الموجود فيه الملف الحالي هو ” /var/www/mutillidae/index.php

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

    حيث أصبح الرابط كالتالي
    http://website.com/index.php?page=../.././../etc/passwd وهكذا قمنا بطلب عرض ملف passwd والنتيجة ستكون…

    [​IMG]
    وفي بعض الأحيان تكون خاصية include داخل كود PHP بهذا الشكل:
    كود:
    <?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 تمكننا من تشغيل الملفات الخبيثة من سيرفر آخر غير السيرفر الأساسي.
     
جاري تحميل الصفحة...
الوسوم: