# Dangling Markup - HTML scriptless injection
{{#include ../../banners/hacktricks-training.md}}
## Резюме
Цю техніку можна використовувати для витягування інформації від користувача, коли **знайдено HTML-ін'єкцію**. Це дуже корисно, якщо ви **не знаходите жодного способу експлуатувати** [**XSS** ](../xss-cross-site-scripting/index.html), але можете **впровадити деякі HTML-теги**.\
Це також корисно, якщо деяка **секретна інформація зберігається у відкритому тексті** в HTML, і ви хочете **екстрагувати** її з клієнта, або якщо ви хочете ввести в оману виконання деяких скриптів.
Кілька технік, згаданих тут, можна використовувати для обходу деяких [**Content Security Policy**](../content-security-policy-csp-bypass/index.html) шляхом екстракції інформації несподіваними способами (HTML-теги, CSS, http-meta теги, форми, base...).
## Основні застосування
### Вкрадання секретів у відкритому тексті
Якщо ви впровадите `test
```
### Крадіжка форм
```html
```
Тоді форми, які надсилають дані на шлях (наприклад, `
```
### Викрадення секретів у відкритому тексті через noscript
`` Це тег, вміст якого буде інтерпретовано, якщо браузер не підтримує javascript (ви можете увімкнути/вимкнути Javascript у Chrome за адресою [chrome://settings/content/javascript](chrome://settings/content/javascript)).
Спосіб ексфільтрації вмісту веб-сторінки з точки ін'єкції до низу на сайт, контрольований зловмисником, буде ін'єкцією цього:
```html
```
### Обхід CSP з взаємодією користувача
З цього [дослідження portswiggers](https://portswigger.net/research/evading-csp-with-dom-based-dangling-markup) ви можете дізнатися, що навіть з **найбільш обмежених** середовищ CSP ви все ще можете **екстрагувати дані** з деякою **взаємодією користувача**. У цьому випадку ми будемо використовувати payload:
```html
You must click me
```
### Misleading script workflow 1 - HTML namespace attack
Вставте новий тег з id всередині HTML, який перезапише наступний, і з значенням, яке вплине на потік скрипта. У цьому прикладі ви вибираєте, з ким буде поділено інформацію:
```html
← Injected markup ...
Share this status update with: ← Legitimate optional element of a dialog
... function submit_status_update() { ... request.share_with =
document.getElementById('share_with').value; ... }
```
### Оманливий сценарій робочого процесу 2 - Атака на простір імен сценарію
Створіть змінні всередині простору імен javascript, вставляючи HTML теги. Потім ця змінна вплине на потік програми:
```html
← Injected markup ... // Legitimate application code
follows function retrieve_acls() { ... if (response.access_mode == AM_PUBLIC) ←
The subsequent assignment fails in IE is_public = true; else is_public = false;
} function submit_new_acls() { ... if (is_public) request.access_mode =
AM_PUBLIC; ← Condition always evaluates to true ... }
```
### Зловживання JSONP
Якщо ви знайдете інтерфейс JSONP, ви зможете викликати довільну функцію з довільними даними:
```html
```
### Зловживання iframe
Дочірній документ має можливість переглядати та змінювати властивість `location` свого батька, навіть у ситуаціях з різними джерелами. Це дозволяє вбудовувати скрипт у **iframe**, який може перенаправити клієнта на довільну сторінку:
```html
```
Це можна пом'якшити за допомогою чогось на кшталт: `sandbox=' allow-scripts allow-top-navigation'`
Iframe також може бути зловжито використаний для витоку чутливої інформації з іншої сторінки **використовуючи атрибут імені iframe**. Це пов'язано з тим, що ви можете створити iframe, який сам себе вбудовує, зловживаючи HTML-ін'єкцією, що змушує **чутливу інформацію з'являтися всередині атрибута імені iframe**, а потім отримати доступ до цього імені з початкового iframe і витікати його.
```html
```
Для отримання додаткової інформації перегляньте [https://portswigger.net/research/bypassing-csp-with-dangling-iframes](https://portswigger.net/research/bypassing-csp-with-dangling-iframes)
### \` або виконання перенаправлення (через 5 секунд у цьому випадку): ``
Це можна **уникнути** за допомогою **CSP** щодо **http-equiv** ( `Content-Security-Policy: default-src 'self';`, або `Content-Security-Policy: http-equiv 'self';`)
### Новий \