tip

Ucz się i ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Wsparcie HackTricks

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ły sposób na nadużycie tego zachowania polegałby na zmianie 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.

Jednak należy zauważyć, że ponieważ atakujący teraz może kontrolować obiekt okna oryginalnej strony, 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:

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 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.

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>
malicious.html
<!DOCTYPE html>
<html>
<body>
<script>
window.opener.location = "http://127.0.0.1:8000/malicious_redir.html";
</script>
</body>
</html>
malicious_redir.html
<!DOCTYPE html>
<html>
<body>
<h1>New Malicious Site</h1>
</body>
</html>

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 obiekt JavaScript window.

Zapobieganie

Informacje o zapobieganiu są udokumentowane w HTML5 Cheat Sheet.

Odniesienia

tip

Ucz się i ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Wsparcie HackTricks