‹ بازگشت به کتابخانه‌ی رایت‌آپ‌ها
Path Traversal / LFI شدت: بحرانی

LFI-to-RCE با استفاده از php://filter برای افشای سورس‌کد

چگونه یک LFI به‌ظاهر «فقط خواندن» می‌تواند به افشای کامل سورس‌کد (و گاهی اجرای کد) منجر شود.

نویسنده: تیم PentesterHub

اگر یک پارامتر نام فایل مستقیماً به include() در PHP پاس شود، استفاده از wrapperهای خاص PHP مثل php://filter/convert.base64-encode/resource=config.php می‌تواند سورس‌کد فایل PHP (که در حالت عادی execute و نه نمایش داده می‌شود) را به‌صورت base64 در خروجی برگرداند — چیزی که LFI معمولی (مستقیماً خواندن فایل) اصلاً ارائه نمی‌دهد.

قدم بعدی به سمت RCE

اگر همین نقطه‌ی include بتواند به یک فایل لاگ (که مهاجم می‌تواند با یک درخواست آلوده، کد PHP درون آن تزریق کند) یا یک فایل آپلودی اشاره کند، همین LFI به اجرای کد کامل (RCE) تبدیل می‌شود.

راه‌حل

هرگز نام فایل ورودی کاربر مستقیماً به include/require پاس داده نشود؛ استفاده از یک whitelist دقیق از فایل‌های قابل‌include، یا کلاً اجتناب از include دینامیک بر اساس ورودی کاربر.

تمرین عملی در آزمایشگاه‌های Path Traversal / LFI ›