Reverse Tab Nabbing
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
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?)
Link między stronami nadrzędnymi a podrzędnymi, gdy atrybut zapobiegający nie jest używany:
Link między stronami nadrzędnymi a podrzędnymi, gdy atrybut zapobiegający jest używany:
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.
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.
Informacje o zapobieganiu są udokumentowane w HTML5 Cheat Sheet.
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)