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

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

SSRF через file_get_contents() в загрузке аватара

Приложение загружает аватар по URL без проверки — атакующий может обратиться к внутренним сервисам.

Автор: Hack & Fix
Освоишь: allowlist URLmetadata-guard 169.254DNS-rebinding защита
Легко+30 XP ~20 мин php
CWE-918 · A10:2021 Pro
Обложка: SSRF через file_get_contents() в загрузке аватара Обложка: SSRF через file_get_contents() в загрузке аватара
Задача
# SSRF: запрос к внутренним эндпоинтам через серверный HTTP-клиент ## Сценарий Вы проводите аудит магазина ИТ-мерча **GadgetForge** перед подключением нового платёжного провайдера. В кабинете покупателя есть функция загрузки аватара по ссылке: пользователь указывает адрес изображения, а сервер сам скачивает картинку и подключает её к профилю. Команда разработки считает эндпоинт безопасным — «это всего лишь прокси для внешних картинок», — но автоматический сканер перед аудитом отметил подозрительную гибкость: сервер соглашается идти по любому переданному адресу. ## Цель 1. Изучите поведение серверного HTTP-клиента в функции предпросмотра: что именно приложение делает с адресом, который передал пользователь. 2. Используя предпросмотр как прокси, обратитесь к служебному эндпоинту приложения со статистикой, защищённому проверкой адреса источника запроса. 3. Извлеките флаг из ответа служебного эндпоинта. ## Теория **Server-Side Request Forgery (SSRF)** — класс уязвимостей, при котором атакующий заставляет сервер выполнить запрос по выбранному им адресу. Запрос исходит от самого сервера и поэтому действует внутри доверительной границы: проходит сетевые фильтры, видит внутренние сервисы и достаёт до адресов, недоступных извне. **Уязвимый паттерн:** ```php // Адрес назначения берётся из пользовательского ввода без проверки $url = $_POST['url']; $content = @file_get_contents($url, false, $ctx); ``` Ключевая ошибка — отсутствие валидации адреса назначения до вызова HTTP-клиента. Служебные эндпоинты часто доверяют сетевой границе: «доступен только с localhost», «только из внутренней сети». При SSRF запрос приходит от самого приложения, и такая проверка источника проходит. Типичные цели атаки — внутренние административные и отладочные эндпоинты на loopback-адресах, соседние сервисы в частных диапазонах сети и внутренний адрес метаданных облака, по которому инстанс отдаёт свои секреты. Отдельный пласт — нестандартные схемы URL: потоковые обёртки PHP открывают доступ к локальным файлам и внутренним службам на нестандартных портах. ## Точка входа атаки `POST /fetch-url` — предпросмотр аватара: принимает поле `url` и возвращает содержимое, скачанное сервером по этому адресу. Валидации хоста и схемы не выполняется. * **Обычный пользователь:** `demo` / `demo` * **Цель:** служебный эндпоинт со статистикой, доступный только с loopback-адреса

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

другие лабы по этой уязвимости
Обложка лабы: SSRF к облачным метаданным через обход проверки IP Обложка лабы: SSRF к облачным метаданным через обход проверки IP
SSRF

SSRF к облачным метаданным через обход проверки IP

Приложение блокирует только loopback-адреса, но не link-local 169.254.169.254 — атакующий читает облачные метаданные AWS.

+60 XP
PHP Pro
Exploit Fix
Обложка лабы: SSRF через обход проверки IP с помощью HTTP-редиректа Обложка лабы: SSRF через обход проверки IP с помощью HTTP-редиректа
SSRF

SSRF через обход проверки IP с помощью HTTP-редиректа

Приложение проверяет IP адрес при первом запросе, но cURL автоматически следует редиректам на внутренние адреса — атакующий обходит проверку через промежуточный сервер.

+90 XP
PHP Pro
Exploit Fix
Обложка лабы: Basic SSRF: Доступ к админке Обложка лабы: Basic SSRF: Доступ к админке
SSRF

Basic SSRF: Доступ к админке

Простая SSRF-уязвимость, позволяющая получить доступ к внутренним ресурсам сервера.

+30 XP
Go Pro
Exploit Fix
Обложка лабы: SSRF: Fetch Avatar в Express + better-sqlite3 Обложка лабы: SSRF: Fetch Avatar в Express + better-sqlite3
SSRF

SSRF: Fetch Avatar в Express + better-sqlite3

Обработчик загрузки аватара в Express делает fetch по пользовательскому URL без валидации — доступ к внутреннему /admin/stats и утечка флага.

+30 XP
Node.js Pro
Exploit Fix