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

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

SSRF: Обход проверки URL через HTTP-редирект в Node.js

Админ-форма импорта продуктового фида проверяет hostname URL и отвергает loopback и приватные сети, но fetch() автоматически следует HTTP-редиректам — внешний сервер атакующего перенаправляет на внутренний /admin/stats и утечка флага.

Автор: Hack & Fix
Освоишь: allowlist URLmetadata-guard 169.254DNS-rebinding защита
Сложно+90 XP ~65 мин nodejs
CWE-918 · A10:2021 Pro
Обложка: SSRF: Обход проверки URL через HTTP-редирект в Node.js Обложка: SSRF: Обход проверки URL через HTTP-редирект в Node.js
Задача
# SSRF: обход проверки URL через HTTP-редирект ## Сценарий Оптовик **«Лоцман-Трейд»** принимает товарные фиды партнёров: в админ-панели магазина на Express есть форма импорта — оператор подаёт ссылку на фид, сервер делает пробный запрос и показывает тело ответа. Прямые ссылки на внутренние сети фильтр отвергает, а «доверенные staging-прокси» пропускаются по служебному allowlist окружения. Вас пригласили проверить интеграционный контур перед подключением крупного поставщика. ## Цель 1. Войдите в админ-панель и убедитесь, что прямая ссылка на внутренний эндпоинт статистики блокируется фильтром. 2. Постройте цепочку, в которой начальная ссылка проходит проверку, а итоговый сетевой запрос попадает на внутренний эндпоинт с флагом. 3. Извлеките флаг из JSON-ответа, вернувшегося в предпросмотр фида. ## Теория Проверка URL перед запросом защищает ровно один шаг — первый. Если HTTP-клиент после ответа автоматически следует перенаправлениям, каждый следующий адрес из заголовка `Location` уходит в сеть уже без повторной проверки. **Уязвимый паттерн:** ```js const blocked = await isPrivateHost(parsed.hostname); // проверка — только начальный URL const upstream = await fetch (raw); // редиректы следуются автоматически ``` Атакующий готовит «внешний» адрес, прошедший фильтр, который отвечает перенаправлением на внутренний эндпоинт. Клиент молча идёт по цепочке, оказывается на loopback-адресе — и обработчик возвращает тело внутреннего ответа в предпросмотр формы. В лабораторном окружении роль такого адреса играет учебный staging-редиректор, уже внесённый в allowlist окружения. ## Точка входа атаки `POST /admin/import-feed` — поля `url` и `csrf_token` (токен — со страницы админ-панели); внутренний эндпоинт статистики `GET /admin/stats` отдаёт JSON с флагом. * **Администратор:** `admin` / `admin`

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

другие лабы по этой уязвимости
Обложка лабы: 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
Обложка лабы: SSRF через обход проверки IP с помощью HTTP-редиректа Обложка лабы: SSRF через обход проверки IP с помощью HTTP-редиректа
SSRF

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

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

+90 XP
PHP Pro
Exploit Fix
Обложка лабы: Bypass SSRF: Обход фильтров хоста Обложка лабы: Bypass SSRF: Обход фильтров хоста
SSRF

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

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

+60 XP
Go Pro
Exploit Fix