← Все комнаты Путь «Защита (код)» →
СреднийЗащита (код) Код Осенний CTF

Внутренний или внешний

Прогресс комнаты 0 / 4
Задание 1Введение

Цель: Строго валидировать входные данные и защищаться от SSRF.

Напишите функцию is_private_ip(s) для защиты от SSRF. Верните True, только если s — корректный IPv4-адрес из диапазонов 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16 или 127.0.0.0/8.

Корректный адрес: ровно 4 части через точку, каждая — десятичное число 0–255 без ведущих нулей (0 допустим, 01 — нет). Некорректный адрес — False.

Задание 2Теория и инструменты

SSRF — атака, когда сервер по запросу пользователя ходит во внутреннюю сеть (http://127.0.0.1/admin, http://10.0.0.5).

Фильтр внутренних адресов должен строго разбирать формат: варианты вроде 010.0.0.1 или 10.0.0 разные библиотеки понимают по-разному, и этим пользуются для обхода.

Инструменты

  • Python: str.split, re.fullmatch
  • JS: split, регулярные выражения

Больше теории — в разделе «Обучение: Защита (код)».

Задание 3Практика: напишите код

Примеры

Пример 1
is_private_ip("10.0.0.1")
→ true
Пример 2
is_private_ip("10.255.255.255")
→ true
Пример 3
is_private_ip("172.16.0.1")
→ true

Ещё 18 скрытых тестов.

solution
Ctrl+Enter — отправить Войдите, чтобы отправить

Пошаговый план — открывайте по одному шагу

  1. 1
    Разбейте строку по точкам — частей должно быть ровно 4.

Подсказки — каждая до решения стоит −25 очков

Задание 4Как защититься

Для SSRF проверяйте адрес после DNS-резолва, запрещайте редиректы во внутреннюю сеть и выпускайте сервер наружу через прокси с белым списком.

Разборы участников

Разборы открываются после того, как вы решите комнату, — чтобы не спойлерить ответ.