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

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

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

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

Автор: Hack & Fix
Освоишь: allowlist URLmetadata-guard 169.254DNS-rebinding защита
Средне+60 XP ~35 мин golang
CWE-918 · A10:2021 Pro
Обложка: Bypass SSRF: Обход фильтров хоста Обложка: Bypass SSRF: Обход фильтров хоста
Задача
# SSRF: обход чёрного списка хостов ## Сценарий Вы аудируете **SecureHooks** — платформу интеграций, где пользователи настраивают webhook-уведомления: указывают URL внешнего сервиса, а сервер отправляет туда тестовый запрос. После прошлого инцидента команда добавила «защиту»: имя хоста из URL сверяется со списком запрещённых строк, при совпадении запрос блокируется. Команда уверена, что внутренняя сеть теперь недоступна. По данным аудита, в приложении остался служебный эндпоинт, доверяющий обращениям с loopback-интерфейса, — до него и нужно добраться, имея обычную учётную запись. ## Цель 1. Изучите фактический список запрещённых строк и то, как именно сверяется имя хоста. 2. Найдите запись адреса, которая строковой проверкой не блокируется, но сетевым стеком интерпретируется как внутренний адрес этого же сервера. 3. Через серверный клиент обратитесь к служебному эндпоинту и извлеките флаг. ## Теория Чёрный список по строковому представлению хоста — самая частая ошибка при «латании» SSRF: разработчик блокирует несколько точных имён, а сетевой стек понимает адреса куда либеральнее. Один и тот же внутренний адрес записывается десятками способов: сокращённые формы IPv4, запись числа в разных системах счисления, IPv6-нотации, специальные домены, резолвящиеся в тот же адрес, «неопределённый» адрес. Ни одна из этих записей не совпадает со строками списка, но все приводят соединение туда же. **Уязвимый паттерн:** ```go blocked := []string{"localhost", "127.0.0.1", "internal", "0.0.0.0"} if strings.Contains(strings.ToLower(parsedURL.Hostname()), b) { /* блокировка */ } resp, err := client.Get(webhookURL) ``` Фильтр проверяет текст, а подключение происходит по адресу — разрыв между синтаксисом и сетевым смыслом и есть уязвимость. ## Точка входа атаки `POST /webhook` — форма тестового webhook-запроса, поле `webhook_url` (требуется вход). * **Обычный пользователь:** `demo` / `demo` * **Цель:** служебный эндпоинт приложения, доступный только с loopback-источника; его ответ содержит флаг

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

другие лабы по этой уязвимости
Обложка лабы: 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
Обложка лабы: Basic SSRF: Доступ к админке Обложка лабы: Basic SSRF: Доступ к админке
SSRF

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

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

+30 XP
Go Pro
Exploit Fix
Обложка лабы: SSRF к облачным метаданным через обход проверки IP Обложка лабы: SSRF к облачным метаданным через обход проверки IP
SSRF

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

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

+60 XP
PHP Pro
Exploit Fix