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

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

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

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

Автор: Hack & Fix
Освоишь: allowlist URLmetadata-guard 169.254DNS-rebinding защита
Легко+30 XP ~20 мин golang
CWE-918 · A10:2021 Pro
Обложка: Basic SSRF: Доступ к админке Обложка: Basic SSRF: Доступ к админке
Задача
# SSRF: запрос к внутреннему эндпоинту через серверный клиент ## Сценарий Вы аудируете **PixelPort** — маркетплейс цифрового контента на Go. В профиле пользователя есть функция «загрузить аватар по ссылке»: вы указываете URL изображения, сервер сам скачивает его и сохраняет. Команда считает эндпоинт безобидным прокси для внешних картинок. По данным внутреннего аудита, в приложении есть служебный эндпоинт статистики, доступный только с loopback-адреса самого сервера: проверка доверяет адресу источника запроса, а в ответе содержится флаг. Задача — добраться до него, имея лишь обычную учётную запись. ## Цель 1. Изучите поведение функции загрузки аватара: какой URL принимает сервер и куда фактически уходит запрос. 2. Заставьте сервер обратиться к служебному эндпоинту самого себя — исходящий запрос будет идти от лица приложения и пройдёт проверку источника. 3. Извлеките флаг из ответа служебного эндпоинта. ## Теория **SSRF (Server-Side Request Forgery)** — атакующий заставляет сервер выполнить HTTP-запрос по выбранному им адресу. Запрос исходит от сервера и наследует его сетевые привилегии: проходит периметр, видит внутренние сервисы, обращается к самому приложению через loopback. Эндпоинты, «защищённые» проверкой адреса источника, против SSRF бессильны: источником и есть сам сервер. **Уязвимый паттерн:** ```go // Запрос по пользовательскому URL без проверки адреса назначения avatarURL := r.FormValue("avatar_url") resp, err := http.Get(avatarURL) ``` Многие внутренние интерфейсы доверяют сетевой границе — «доступно только с localhost». SSRF обходит эту границу изнутри: достаточно указать адрес самого приложения и порт, на котором оно слушает. ## Точка входа атаки `POST /fetch-avatar` — функция загрузки аватара по ссылке в профиле; поле `avatar_url` (форма защищена CSRF-токеном). * **Обычный пользователь:** `demo` / `demo` * **Цель:** служебный эндпоинт статистики, доступный только с loopback-адреса сервера; его ответ содержит флаг

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

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

Bypass SSRF: Обход фильтров хоста

SSRF с обходом слабого фильтра хоста в URL и эксплуатация через альтернативные IP-адреса.

+60 XP
Go Pro
Exploit Fix
Обложка лабы: SSRF Cloud Metadata: Доступ к метаданным облака Обложка лабы: SSRF Cloud Metadata: Доступ к метаданным облака
SSRF

SSRF Cloud Metadata: Доступ к метаданным облака

SSRF-уязвимость: неполная фильтрация IP позволяет обратиться к link-local адресу облачных метаданных (169.254.169.254).

+60 XP
Go Pro
Exploit Fix
Обложка лабы: SSRF Redirect: Обход валидации через HTTP-редирект Обложка лабы: SSRF Redirect: Обход валидации через HTTP-редирект
SSRF

SSRF Redirect: Обход валидации через HTTP-редирект

SSRF-уязвимость: валидация URL обходится через HTTP-редирект на внутренний адрес.

+60 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