Content Security Policy (CSP) Bypass

Content Security Policy (CSP) Bypass

前言

Content Security Policy(网页安全政策),缩写 CSP

首先我们要理解什么是CSP,下面的博文讲的还是很清楚

Content Security Policy 入门教程

Content Security Policy (CSP) is a computer security standard introduced to prevent cross-site scripting (XSS), clickjacking and other code injection attacks resulting from execution of malicious content in the trusted web page context. ——*

可以从*的的介绍看到,CSP是一种计算机安全标准,主要用来防御xss等注入。2012年出了版本1,2014年出了Level2,2015开始研发Level3.可以看到这个技术还是很新的,(感觉安全这方面也是越来越重视,现在感觉很多的web安全策略都直接在框架中已经完善了,前面看Django框架看到它的orm,程序员只要正常使用接口,我们就很难用前面学的SQL注入了)

这里的dvwa练习有Content Security Policy,正好学习一下。

练习

Low

Content Security Policy (CSP) Bypass
这里是要我们输入资源,然后我们的资源能被执行就OK
Content Security Policy (CSP) Bypass
这里我们查看元素可以看到它的CSP里面的内容

这里面有一个pastebin网站,这个网站是一个快速分享文本的网站…(网站就是下图那样)
Content Security Policy (CSP) Bypass
然后我们来测试一下,弹个cookie
Content Security Policy (CSP) Bypass
生成成功后,我们点击raw获得连接
Content Security Policy (CSP) Bypass
把获得的url输入dvwa,就可以看到成功的弹出cookie
Content Security Policy (CSP) Bypass
简单的说,这里用CSP的时候就不要给这种不安全的网站,不然防护限制用处就不大了

Medium

还是先抓包看
Content Security Policy (CSP) Bypass
这里可以看到有"nonce",“unsafe-inline”

这里我觉得考察点就是我们队script-src中的参数(特殊值)的理解

‘unsafe-inline’:允许执行页面内嵌的<script>标签和事件监听函数
unsafe-eval:允许将字符串当作代码执行,比如使用eval、setTimeout、setInterval和Function等函数。
nonce值:每次HTTP回应给出一个授权token,页面内嵌脚本必须有这个token,才会执行
hash值:列出允许执行的脚本代码的Hash值,页面内嵌脚本的哈希值只有吻合的情况下,才能执行。

我们可以看到这个语句中有self没有别的域所以我们很难让目标下载我们的js文件,但unsafe-inline这个参数让我们有了直接插入js代码的可能,然后这里的nonce是我们需要在js里嵌套的东西

这里注意的是nonce后面是等号不是 - 了
Content Security Policy (CSP) Bypass
可以看到也成功的弹出了cookie
Content Security Policy (CSP) Bypass
Medium我感觉是在帮我们更深入的理解CSP的运用,参数的配置

High

Content Security Policy (CSP) Bypass
High级别和前面级别就不太一样了,这里是点击按钮返回结果

我们也可以看到这里的script-src ‘self’ ,这里我已经是没有任何想法了…
Content Security Policy (CSP) Bypass
看了下别人的博客

然后我们可以发现请求逻辑在high.js里面
Content Security Policy (CSP) Bypass
可以看到里面的逻辑
Content Security Policy (CSP) Bypass
前端的知识确实还有所欠缺,看着也不是很理解

客户端点击按钮后,会在 html 中创建 <script src=“http://x.x.x.x:yyyy/vulnerabilities/csp/source/jsonp.php?callback=solveSum”></script> 这样的标签
因为 script 不同于 ajax,所以可以跨域发送的
服务器就根据 callback 请求,返回 solveSum({“answer”:“15”}) , 就可以调用 high.js 中的solveSum 有点绕。

这里的jsonp方式可以自行查阅,因为jsonp所以可以实现跨域了(不知道这里说的对不对)

这里可以参考DVWA 黑客攻防实战(十五) 绕过内容安全策略 Content Security Policy (CSP) Bypass

利用方法也有讲解

Impossible

url中没有callback,也只允许访问本站资源。

总结

虽然说CSP标准提出来有些年了,但我访问网页也看了下其实用的并不是那么多啊,包括我访问淘宝和京东那些网站也没有看到CSP的影子。

所以整体应该还算是一个较新的技术吧,但确实我感觉CSP在安全方面设置的好的话,对xss等注入是有一个较好的防范的,但一些网站想要设置合适的CSP也不是容易的事,所以就目前的环境而言CSP还是存在绕过的

参考

  1. Content Security Policy 入门教程
  2. CSP(Content-Security-Policy)内容安全策略
  3. DVWA 黑客攻防实战(十五) 绕过内容安全策略 Content Security Policy (CSP) Bypass
  4. Content Security Policy (CSP) 是什么?为什么它能抵御 XSS 攻击?