等级7 - CSP绕过XSS
绕过内容安全策略实现XSS攻击
挑战描述
内容安全策略(CSP)是一种重要的XSS防护机制,通过限制资源加载来源来防止恶意脚本执行。但是,不当配置的CSP可能存在绕过方法。这个挑战模拟了一个配置了CSP但仍存在XSS漏洞的场景。
目标:在CSP保护下,找到绕过方法执行JavaScript代码并弹出包含"XSS"的警告框。
💡 提示
- 当前CSP策略允许'unsafe-inline',可以执行内联脚本
- 尝试使用内联事件处理器,如onclick、onload等
- 可以利用现有的JavaScript函数或全局变量
- 尝试构造不需要外部资源的payload
- 示例:<img src=x onerror="alert('XSS')">
- 或者:<svg onload="alert('XSS')">
- 也可以尝试:<details open ontoggle="alert('XSS')">
- 利用现有函数:onclick="eval('alert(\\'XSS\\')')"
CSP策略分析
// 当前CSP策略:
// Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline'; object-src 'none';
// CSP策略解析:
// default-src 'self' - 默认只允许同源资源
// script-src 'self' 'unsafe-inline' - 允许同源脚本和内联脚本
// object-src 'none' - 禁止所有object、embed、applet
// 漏洞分析:
// 1. 'unsafe-inline'允许内联JavaScript执行
// 2. 可以使用事件处理器属性
// 3. 可以利用现有的JavaScript上下文
// 4. 不需要加载外部脚本资源
// 绕过方法:
// 1. 内联事件处理器:onclick、onload、onerror等
// 2. 利用HTML5新标签:details、summary等
// 3. 使用现有的全局函数:eval、setTimeout等
// 4. 数据URI:data:text/html,<script>alert('XSS')</script>
数据展示测试区域
模板渲染测试区域
CSP绕过技巧:
- 利用'unsafe-inline':内联事件处理器
- HTML5新特性:details、summary、dialog等
- 利用现有上下文:全局函数、变量
- 数据URI:在允许的情况下使用data:协议
- JSONP:利用script-src 'self'加载同源JSONP