首页
社区
课程
招聘
[原创]XSS修炼之-内功心法CSP篇
发表于: 2021-5-8 11:17 4755

[原创]XSS修炼之-内功心法CSP篇

2021-5-8 11:17
4755

前段时间在挖XSS漏洞的时候遇到了CSP,费了些功夫总算是绕过了,于是就想着这个可以出几道XSS挑战来分享给大家。

原来的题目在这里,总共有三道

xss修炼之-内功心法第一式

xss修炼之-内功心法第二式

xss修炼之-内功心法第三式


公布答案之前先了解一下CSP的基础知识

CSP是浏览器内容安全策略(Content-Security-Policy)的简称,主要是用来限制网页资源的加载,包括scriptimgiframe等。

- CSP的设置方法                                                                   

通过iframecsp属性
     
<iframe      csp="script-src 'self'" src="11.php"></iframe>
    但是如果设置的时候域名不同就需要被设置的页面设置

    Allow-CSP-From: http://127.0.0.1否则会出现 

                                                                

优先级是 服务端返回CSP属性>继承的CSP属性>iframe csp>meta ,但是必须同时满足才能加载成功!不存在覆盖CSP设置一说,实际上他们是叠加关系

report-uri用于触发规则后的报告接收地址,该地址不受CSP限制,但是只有服务端返回的设置才会生效,因此不要想利用report-uri在极端情况下回传数据,不过我只测试了chrome其他浏览器暂未测试。

- 安全问题
CSP
这个策略实际上很好,可以很好的控制页面的访问,出现问题大部分是由于CSP的误用导致的。而且由于CSP策略是页面级的策略,很多资源可能默认不会有CSP策略,也可以利用这个策略做一下CSP的绕过。

第一题分析

因此很明显只能加载本地域的的js,其他外域资源都是不允许的,正好jsonn.php?call=call提供了这样的js

尝试连接


可以发现<script被替换为_了,我们可以利用iframe的srcdoc加html实体编码绕过这样的限制

最终POC为

第二题分析

第一个文件CSP限制太多,无法执行js,第二个文件有长度限制,看起来只能直接alert也不满足要求,肯定是要两者结合了


由于刚开始没有考虑到top.name的问题,二哥(gainover)给了一个很巧妙的答案,是超出我预期的,于是后来逼我加了一个window.name=""。

没多久二哥(不愧是二哥啊)又给了一个超出我预期的答案……

大家可能会好奇,name不是被置空了吗?

这里有一个小知识点

在on属性的js的上下文里面 eval(name),之前的浏览器识别为window.name,现在的浏览器识别为document.name,因此现在利用name跨域必须要eval(self.name),但是在js的上下文里面eval(name)还是识别为eval(window.name)

eval(top.name),实际上是top.window.name这里window.name被置空了,所以不行了

而eval(top.x.name),得到的实际上是eval(top.document.getElementById('x').getAttribute('name')),实际上得到的是id=x的元素的name属性,也就是iframe的name属性


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 2
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//