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

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

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

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

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

Похожие лабораторные (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
Обложка лабы: Local File Inclusion через include() Обложка лабы: Local File Inclusion через include()
File Incl

Local File Inclusion через include()

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

+30 XP
PHP Pro
Exploit Fix