LFI-to-RCE با استفاده از php://filter برای افشای سورسکد
چگونه یک LFI بهظاهر «فقط خواندن» میتواند به افشای کامل سورسکد (و گاهی اجرای کد) منجر شود.
اگر یک پارامتر نام فایل مستقیماً به 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 دینامیک بر اساس ورودی کاربر.