前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >通过浏览器缓存来bypass nonce script CSP

通过浏览器缓存来bypass nonce script CSP

作者头像
FB客服
发布2018-02-24 14:59:20
1.4K0
发布2018-02-24 14:59:20
举报
文章被收录于专栏:FreeBufFreeBuf

最近看了去年google团队写的文章CSP Is Dead, Long Live CSP!,对csp有了新的认识,在文章中,google团队提出了nonce-{random}的csp实现方式,而事实上,在去年的圣诞节,Sebastian 演示了这种csp实现方式的攻击方式,也就是利用浏览器缓存来攻击,现在来详细分析下。

漏洞分析

原文查看:http://sirdarckcat.blogspot.jp/2016/12/how-to-bypass-csp-nonces-with-dom-xss.html

国内的翻译(只有翻译):http://paper.seebug.org/166/

首先我需要个demo

首先是实现了nonce script的站,然后包含了因为是利用了浏览器缓存,所以我们不能对页面发起请求,因为发起请求之后,后台就会刷新页面并刷新nonce的字符串,符合条件的只有3种。

持久型 DOM XSS,当攻击者可以强制将页面跳转至易受攻击的页面,并且 payload 不包括在缓存的响应中(需要提取)。

包含第三方 HTML 代码的 DOM XSS 漏洞(例如,fetch(location.pathName).then(r=>r.text()).then(t=>body.innerHTML=t);)

XSS payload 存在于 location.hash 中的 DOM XSS 漏洞(例如 https://victim/xss#!foo?payload=)

这里首先我们需要一个开启了nonce script规则的站,并加入一个xss点

iframe引用

然后我们需要利用iframe引入这个页面,并对其发起请求获取页面内容,这里我们通过向其中注入一个<textarea>标签来吃掉后面的script标签,这样就可以获取内容。

获取nonce字符串

然后我们需要一个页面去获取nonce字符串,为了反复获得,这里需要开启session。

一切就绪了,唯一的问题就是在nonce script上,由于csp开启的问题,我们没办法自动实现自动提交,也就是攻击者必须要使按钮被点击,才能实现一次攻击。

nonce绕过实例-pwnhub绝对防御

为了研究整个漏洞的限制性,我专门写了一个pwnhub的题目。题目环境大概是这样的。

前台是个聊天版,可以发给任何人,有简单的xss过滤,但是可以随便绕过

在admin的聊天版里可以找到后台的信息,通过构造任意xss获得后台地址。

Wow, good guys,maybe you want /adminshigesha233e3333/#admin

打开看一眼发现敏感信息

右键看源码是这样的

存在dom xss,看看返回头还可以发现更多信息。

服务端不但开启了最新版的nonce csp,而且还开启了浏览器缓存

这就让我们有了可乘之机,就如同上面提到的一样,如果我们仅修改location.hash,浏览器不会请求服务器,那么nonce string就不会更换。

那么思路就很清楚了,我们可以在主站构造xss,先开iframe请求admin目录的,获取到nonce值后,再新建一个iframe,添加带有nonce字符串的iframe窗口,执行任意xss

总结

但是让我回过头来总结下上面的利用条件:

1、目标站开启了缓存机制。 2、目标站同源下存在未被csp保护的存在xss的站点。

但事实上,我们本可以用更简单的方式获得目标站的flag,比如构造一个iframe引入flag.php,然后读iframe内容,在同源的情况下是允许的。

payload如下

那么如果admin站点和xss站点非同源呢?由于同源策略的影响,你不能从父窗口获取子窗口的内容,那么就只能通过点击劫持的方式,来发送请求,payload如前面漏洞分析时讲到的。

payload如下

如果被攻击者点击提交按钮,那么攻击者就可以获取想要的所有信息了。

回顾漏洞,我们不难发现整个漏洞处处都受到同源策略的限制,而且如果在chrome环境下,还会受到xss auditor的限制,所以虽然nonce script csp存在理论被绕过的可能,但是被作为CSP的新解决方案来说,前景仍然光明。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-05-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FreeBuf 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档