Перейти к содержимому

Поиск по платформе

Local File Inclusion через include()

Параметр file передаётся напрямую в include() без валидации — атакующий читает произвольные файлы сервера.

Автор: Hack & Fix
Освоишь: allowlist путейbasename-onlydisable dynamic include
Легко+30 XP ~17 мин php
CWE-98 · A03:2021 Pro
Обложка: Local File Inclusion через include() Обложка: Local File Inclusion через include()
Задача
# Локальное включение файлов (LFI) ## Сценарий Вы проводите аудит **ТехноЛавка** — магазина техники и аксессуаров на нативном PHP. Для информационных разделов «О компании», «Контакты» и «Доставка» разработчик сделал простую систему страниц: каждая лежит отдельным файлом-шаблоном, а единая точка просмотра принимает короткое имя страницы и подключает соответствующий файл. Внешний сканер перед плановым релизом отметил странность: на спецсимволы в параметре имени страницы приложение реагирует нестандартно. Разработчик уверен, что «фронтенд всё равно пришлёт только известные имена», — проверьте, так ли это. ## Цель 1. Найдите точку просмотра информационных страниц и разберитесь, как параметр запроса превращается в путь к файлу. 2. Подтвердите выход за пределы каталога страниц: добейтесь чтения общесистемного файла. 3. Извлеките флаг — он доступен средствами файловой системы: и как файл на сервере, и через переменные окружения процесса. ## Теория Local File Inclusion возникает, когда путь к файлу строится из пользовательского ввода без проверки границ. Имя страницы конкатенируется с базовым каталогом, а операционная система честно раскрывает относительные сегменты пути: специальной последовательностью перехода в родительский каталог, повторённой нужное число раз, итоговый путь выводит за пределы приложения — вплоть до корня файловой системы. PHP здесь особенно чувствителен: функции подключения исполняют файл как код, функции чтения выводят содержимое как есть — включая системные файлы и файлы с секретами. **Уязвимый паттерн:** ```php // Имя страницы из запроса конкатенируется с базовым путём напрямую: $pagePath = $basePath . $file; @include($pagePath); // или чтение и вывод содержимого файла ``` Эндпоинт публичен — для атаки не требуется даже авторизация. ## Точка входа атаки `GET /page` — просмотр информационных страниц; имя передаётся параметром `file`. * **Обычный пользователь (для знакомства с магазином):** `demo` / `demo` * **Объект атаки:** параметр `file`, попадающий в путь без проверки * **Признак успеха:** в ответе — содержимое файла вне каталога страниц

Похожие лабораторные (2)

другие лабы по этой уязвимости
Обложка лабы: LFI через PHP stream wrappers (php://filter) Обложка лабы: LFI через PHP stream wrappers (php://filter)
File Incl

LFI через PHP stream wrappers (php://filter)

Наивная фильтрация ../ не блокирует php://filter — атакующий читает исходники PHP-файлов в base64.

+60 XP
PHP Pro
Exploit Fix
Обложка лабы: Remote File Inclusion через include() с allow_url_include Обложка лабы: Remote File Inclusion через include() с allow_url_include
File Incl

Remote File Inclusion через include() с allow_url_include

Параметр page передаётся в include() при включённом allow_url_include — атакующий загружает и выполняет произвольный PHP-код с удалённого сервера.

+90 XP
PHP Pro
Exploit Fix