Перевод: Скрытый параметр в XSS👾

Перевод: Скрытый параметр в 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: Сообщил об ошибке

Ссылки:

HackTricks для CSTI

Оригинал статьи - здесь.
Поддержите автора хлопками на Medium.


Перевод статьи был выполнен проектом перевод энтузиаста:

  • 📚 @Ent_TranslateIB - Телеграмм канал с тематикой информационной безопасности
  • 🔥 @Ent_Translate - Инстаграм проекта

Report Page