Перевод: Скрытый параметр в XSS👾
@Ent_TranslateIBПривет всем! Это статья об XSS, на которой вы можете поучиться, причем довольно странная. В этой статье я делюсь одной из своих находок, на которой вам всем стоит сосредоточиться.
Я нашел эту проблему в частной программе на HackerOne, и она довольно интересна.

В этой программе я получаю только один домен, который имеет страницу входа с регистрацией. После регистрации в приложении я попытался найти такие ошибки, как csrf, IDOR, SQL и т.д., но не нашел ничего интересного.
Последним моим шагом была проверка на XSS, затем я начал искать параметры, но никаких результатов.

Я проверил исходный код в браузере. Я начал искать скрытые параметры, затем нашел параметр с именем "next".

Я попробовал внедрить в него XSS-полезную нагрузку, но ничего не сработало.
Затем я заметил, что этот сайт построен с использованием Angular. Недавно я прочитал статью о Client Side Template Injection (CSTI). После прочтения статьи в HackTricks я поэкспериментировал с полезными нагрузками для инъекции кода.

Начнем с базового запроса, который представляет собой {{7*7}}. Я попробовал внедрить его, но ничего не произошло. Я сдался и попытался войти в приложение, но в URL вернулось "49".


Наконец я получил ответ. На следующем этапе я вставил полезную нагрузку XSS, упомянутую в статье Hackarticles for Angular JS.

Woolaaaaaa.... наконец-то появилось всплывающее окно...!!!

Я сообщил об этом с помощью POC и продемонстрировал последствия кражи cookie, которая приводит к компрометации учетной записи.
Устранение
Следующий параметр не должен контролироваться пользователем.
Предпочтительно установить httponly cookies, чтобы javascript не мог использоваться для кражи cookies.
Советы:
Никогда не забывайте искать скрытые параметры в исходном коде. Нажмите кнопку просмотра исходного кода и найдите параметры "hidden", "input" или "var".
Рекомендуемая полезная нагрузка для CSTI:
AngularJS:
{{$on.constructor('alert(1)')()}}
{{constructor.constructor('alert(1)')()}}
<input ng-focus=$event.view.alert('XSS')>
{{constructor.constructor('alert(1)')()}}
<input ng-focus=$event.view.alert('XSS')>
VueJS:
V3:
{{_openBlock.constructor('alert(1)')()}}
V2:{{constructor.constructor('alert(1)')()}}
На этом все. Увидимся в следующей статье.
Подписывайтесь на LinkedIn
Временная шкала
16:08, 10 сентября 2022: Сообщил об ошибке
Ссылки:
Оригинал статьи - здесь.
Поддержите автора хлопками на Medium.
Перевод статьи был выполнен проектом перевод энтузиаста:
- 📚 @Ent_TranslateIB - Телеграмм канал с тематикой информационной безопасности
- 🔥 @Ent_Translate - Инстаграм проекта