KB / Статті / LFI та Path Traversal: читання файлів сервера
UA EN

LFI та Path Traversal: читання файлів сервера

✍ admin 📅 21.09.2026 👁 23 переглядів

Що це таке

Path Traversal (він же Directory Traversal) — вихід за межі призначеного каталогу за допомогою ../. LFI (Local File Inclusion) — коли додаток не просто читає, а підключає локальний файл (у PHP include/require), що може призвести навіть до виконання коду.

Корінь проблеми той самий, що й у всіх ін'єкцій: користувацький ввід використовується як частина шляху без валідації.

Як це працює

$file = $_GET['page'];
include("/var/www/pages/" . $file);

Запит ?page=../../../../etc/passwd дає шлях /var/www/pages/../../../../etc/passwd → /etc/passwd. Кожен ../ піднімає на рівень вище.

Що читати в першу чергу

  • /etc/passwd — підтвердження вразливості (список користувачів).
  • Вихідний код застосунку — часто містить секрети: ../config.py, ../.env, ../app.py, ../wp-config.php.
  • Знайшовши SECRET_KEY Flask — можна підробити сесію (session forgery).
  • Логи, /proc/self/environ, ключі SSH (~/.ssh/id_rsa).

Обхід фільтрів

  • Кодування: %2e%2e%2f (URL-encoded ../), подвійне кодування %252e.
  • Нуль-байт (старі PHP): ....// або %00 для обрізання розширення.
  • Абсолютний шлях, якщо префікс не примусовий: /etc/passwd.
  • PHP-обгортки: php://filter/convert.base64-encode/resource=index.php — вивести вихідний код у base64 (обходить виконання).

Захист

  • Не будуй шляхи з вводу. Використовуй whitelist дозволених файлів (мапа id → шлях), а не саме ім'я від користувача.
  • Канонізуй і перевіряй: os.path.realpath() і переконайся, що результат всередині дозволеного каталогу.
  • Прибери небезпечні символи, але не покладайся лише на це (обходиться кодуванням).
  • Мінімальні привілеї процесу — щоб навіть при LFI не було доступу до чутливого.

Практика: завдання LFI → Secret Key → Session Forgery — прочитай код, дістань SECRET_KEY, підроби admin-сесію.

Коментарі (0)
Увійди, щоб залишити коментар.
Коментарів поки немає.
Вперше тут?
Новачок на Bastion?
Почни з гайду користувача.
Відкрити гайд →
?