Райтап на задачу «Вектор атаки»

web

Автор:

web

1 ноября 2026

11

01.11.2026
Вектор атаки
Категория:

Web

Задача «Вектор атаки»

Автор:

LastTeamLead

Первая кровь:
altfoxie
Сложность:
medium
Дата публикации:
01.11.2025
Решений:
170
Рейтинг:
4.4/5
Ссылка:
Решать

Для этой задачи не понадобится ничего, кроме сайта, webkrutoi.txt и глаз.

Название задачи недвусмысленно намекает на тип обрабатываемых данных. Нам придётся работать с векторной графикой (SVG) и векторным вектором атаки. (Странно звучит, правда?)

Переходим по адресу из описания задачи. Нас встречает форма входа:

Форма входа на сайт

На самой странице любезно подсказывают данные для входа:

Логин: demo

Пароль: demo

Ну а мы не гордые! Вводим их и нажимаем кнопку Login, как полагается.

После авторизации попадаем на страничку профиля. Из интересных функций здесь только поле для смены аватарки, НО!

Обращаем внимание на условие: сервер для пфпшки принимает только SVG-файлы.

В отличие от стандартных PNG или JPEG, формат SVG (Scalable Vector Graphics) представляет собой не набор пикселей, а обычный текстовый XML-документ.

Когда мы загружаем SVG на сервер, бэкенд читает его с помощью XML-парсера. Если парсер настроен без защиты от внешних сущностей, мы можем провести атаку XXE (XML External Entity)!

Пришло время пошалить!!!1!!1

Создаём у себя на компе текстовый файл со следующим кодом:

SVG с внешней XML-сущностью
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg [
  <!ENTITY xxe SYSTEM "file:///flag.txt">
]>
<svg xmlns="http://www.w3.org/2000/svg" width="200" height="200">
  <text x="10" y="20">&xxe;</text>
</svg>

Называем как-нибудь, webkrutoi.svg, например. Сохраняем, но главное — в формате .svg!!!

Сервер честно разбирает его, читает /flag.txt и спокойненько нам его зачитывает!

P. S. Весь флаг можно увидеть, если открыть код элемента :)

Флаг в коде страницы профиля

Как два пальца об косяк, можно вписывать!

Далее для тех, кто хочет понять «как?».

Рассказываю:

<!DOCTYPE svg [...]> — объявляем правила DTD для нашего XML-чика.

SYSTEM "file:///flag.txt" — сказал серверу: «прочитай файл /flag.txt и подставь его содержимое воот сюда...».

&xxe; — тут он вывел значение нашей сущности (содержимое файла с флагом) внутри текстового слоя SVG.

Вот и весь секрет!

И ещё… Эта задача стала возможной из-за уязвимости XXE, описанной выше.

Давайте немного пофантазируем, чтоб вы поняли, как это работает!

У нас есть некоторый отель. Это наш сайт.

В отеле сидит консьерж — это XML-парсер. Его инструкция: «если в письме записка, значит, надо передать её тому, кому она адресована», и он даже ухом не поведёт (!!!), кто её написал.

Мы — атакующий, который прознал, что если ввести флаг на экранчике минибара из записки N из кабинета босса отеля, напитки станут бесплатными!

Письмо является XML-документом, который мы, собственно, отправляем.

В нашем письме с эксплойтом для парсера примерно написано: «принеси из кабинета твоего босса записку с названием N и положи ко мне в ячейку», и, как мы знаем, он беспрекословно это сделает.

Флаг — это и есть записка из кабинета начальника консьержа; для нас этот босс — сервер.

Отправляем письмо, ждём немного, и у нас в ячейке оказывается заветный флаг!

Босс злой, консьерж уволен B)))

Если вы нашли опечатку или ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter

Также по теме:

Райтап на задачу «OnlyBugs Video»

/Разборы задач

Райтап на задачу «OnlyBugs Video»

Разбираем доступ к приватной трансляции OnlyBugs Video: callNonce, X-Call-Trace и IDOR из-за отсутствия привязки ключа к комнате.
Прочитать

42

Райтап на задачу «YOFA 1.0 – grep challenge»

/Разборы задач

Райтап на задачу «YOFA 1.0 – grep challenge»

Разбираем поиск пароля в исходниках YOFA 1.0 и альтернативное получение флага через изменение JWT-токена.
Прочитать

14