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

6.6 KiB

{% 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 %}

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ę 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 i prosić użytkownika o dane logowania.

Należy jednak zauważyć, że ponieważ atakujący teraz może kontrolować obiekt okna oryginalnej strony, może go nadużywać w inny sposób, aby przeprowadzać 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:

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

Bez linku zwrotnego

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

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

Przykłady

Utwórz następujące strony w folderze i uruchom serwer www za pomocą python3 -m http.server
Następnie, uzyskaj dostęp do http://127.0.0.1:8000/vulnerable.html, kliknij w link i zauważ, jak oryginalny adres URL strony się zmienia.

{% 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 %}

Dostępne właściwości

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 zyskuje dostęp do wszystkich właściwości udostępnionych przez referencję obiektu JavaScript window.

Zapobieganie

Informacje o zapobieganiu są udokumentowane w HTML5 Cheat Sheet.

Odniesienia

{% hint style="success" %} Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)

Wsparcie dla HackTricks
{% endhint %}