/Разборы задач
1 ноября 2026
Райтап на задачу «OnlyBugs Video»
Разбираем доступ к приватной трансляции OnlyBugs Video: callNonce, X-Call-Trace и IDOR из-за отсутствия привязки ключа к комнате.42
11

Web
Задача «Вектор атаки»
Для этой задачи не понадобится ничего, кроме сайта, webkrutoi.txt и глаз.
Название задачи недвусмысленно намекает на тип обрабатываемых данных. Нам придётся работать с векторной графикой (SVG) и векторным вектором атаки. (Странно звучит, правда?)
Переходим по адресу из описания задачи. Нас встречает форма входа:
На самой странице любезно подсказывают данные для входа:
Логин: demo
Пароль: demo
Ну а мы не гордые! Вводим их и нажимаем кнопку Login, как полагается.
После авторизации попадаем на страничку профиля. Из интересных функций здесь только поле для смены аватарки, НО!
Обращаем внимание на условие: сервер для пфпшки принимает только SVG-файлы.
В отличие от стандартных PNG или JPEG, формат SVG (Scalable Vector Graphics) представляет собой не набор пикселей, а обычный текстовый XML-документ.
Когда мы загружаем SVG на сервер, бэкенд читает его с помощью XML-парсера. Если парсер настроен без защиты от внешних сущностей, мы можем провести атаку XXE (XML External Entity)!
Пришло время пошалить!!!1!!1
Создаём у себя на компе текстовый файл со следующим кодом:
<?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)))