Статья Инъекция XSS в скрытых полях ввода и мета-тегах

1689085960381.png

Это перевод

Введение

В этом посте автор покажет, как вы можете использовать новую функцию всплывающих окон HTML в Chrome для эксплуатации XSS в мета-тегах и скрытых полях ввода. Все началось, когда я заметил новое поведение всплывающих окон в Chrome на Twitter. Мы все знаем о надоедливых диалоговых окнах, которые уговаривают вас подписаться на рассылку - теперь вы можете создавать эти всплывающие окна без JavaScript! О, радость. Это будет апокалипсис рассылок.
В любом случае, я заметил эту функциональность и задался вопросом, какие события JavaScript эти всплывающие окна вводят. Действительно, вы можете использовать события ontoggle и onbeforetoggle, и они применяются к цели всплывающего окна - это элемент, который имеет атрибут popover. Этот атрибут делает элемент невидимым до тех пор, пока вы не переключите элемент с помощью атрибута popovertarget с элементом, таким как кнопка.
Это полезно для обхода WAF, так как вы можете использовать событие onbeforetoggle, которое вряд ли будет заблокировано списком блокировки на основе атрибутов:

1689097061337.png


В приведенном выше примере вы можете видеть, что элемент кнопки нацеливается на пользовательский элемент 'xss' с помощью popovertarget. Когда кнопка нажата, событие onbeforetoggle будет запущено.

XSS в скрытых полях ввода

Автор опубликовал это в Twitter, как всегда, и Марио Хайдерих указал, что это даже работает со скрытыми полями ввода. Это интересно, потому что обычно, если у вас есть XSS внутри скрытого поля ввода, его может быть трудно эксплуатировать, потому что большинство событий не работают. Вы можете использовать клавиши доступа, но это требует взаимодействия с пользователем. Однако использование всплывающих окон позволяет использовать новые события в скрытых полях ввода:

1689097190956.png


Пример кода, показывающий применение всплывающих окон к скрытым полям ввода
Марио упомянул, что потребуется две точки инъекции; одна безвредная инъекция HTML с очисткой и одна внутри скрытого поля ввода. Но это заставило меня задуматься - может быть, нужна только одна. Я запустил HTML-страницу и проверил, что произойдет, если у двух элементов будет один и тот же идентификатор. Представьте себе сайт, содержащий код с использованием атрибута popovertarget и имеющий уязвимость XSS внутри скрытого поля ввода:

1689097198561.png


Пример кода с дублирующимися атрибутами id для демонстрации того, что используется первый атрибут.
Наш инъецированный код выполнит событие onbeforetoggle внутри скрытого поля ввода, потому что оно происходит первым. Это означает, что вам нужна только одна точка инъекции, при условии, что она происходит до любого существующего всплывающего окна. Всплывающие окна затем позволят использовать события ontoggle и onbeforetoggle для запуска скрытых полей ввода с помощью клика. Так что это очень полезно, если у вас есть XSS внутри скрытого поля ввода и на странице есть существующий элемент popover.

XSS в мета тегах

Теперь это уже становится довольно интересным, но подождите, есть еще! Матиас Карлссон присоединился к обсуждению со своей точкой зрения; эта техника позволяет использовать событие onbeforetoggle на элементе meta, при условии, что есть существующий элемент popover. Это интересно, потому что, как и скрытые поля ввода, элементы meta сильно ограничены. В приведенном ниже примере у вас есть инъекция внутри элемента meta, который использует атрибут popover и дублирующийся идентификатор (newsletter), который нацеливается на существующее всплывающее окно на странице:

1689097242965.png


Пример кода, показывающий, что событие onbeforetoggle будет запущено в элементе meta
Когда пользователь пытается подписаться на рассылку, он вместо этого запустит событие onbeforetoggle на скрытом поле ввода.

Как всегда, мы обновили с этими новыми векторами. Если вам нравятся обходы фильтров XSS, вы можете насладиться нашими лабораториями по и той, которая .

Наслаждайтесь!


Если вам понравился материал, то дайте обратную связь и я продолжу делать переводы статей с PortSwigger'а.
 

fasoninn

New member
11.08.2023
2
0

<script>alert(document.cookie)</script>


<script>alert(document.cookie)</script>
HTML:
<noscript><p title="</noscript><img src=x onerror=alert(1)>">
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!